私が受け取ったバイトが私が送ったバイトではないのはなぜですか?

私が受け取ったバイトが私が送ったバイトではないのはなぜですか?

私は私がやっていることを自動化するためにSafe Gamingのウェブサイトを通して働いてきました。亀裂工具。ところで、その過程で問題が生じました。エクスプロイト文字列を使用してサーバー上で脆弱なプログラムを実行しようとすると、私のコンピュータのPython 2.7スクリプト間のどこかで変更され、私に戻ります。

この特定の課題にアプローチする一般的なプロセスは次のとおりです。

  1. SSH接続開始
  2. SSH接続を介してシェルを開き、「/bin/bash」、「/bin/sh」を試しました。
  3. メッセージが届くまでお待ちください。
  4. "%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の代わりに他のプログラムの入力に送る必要がありますか?

おすすめ記事