ブルートフォース遠隔NOPスレッドメモリアドレス


0

私は局所的に、ソースコードを持っているC.

における単純ソケット・サーバを介して通信するリモートサーバ上のバイナリcrackme(ELF-64)の中央にい。バッファオーバーフロー後(ソケットバッファは2000、パスワードバッファはless)、RIPを上書きし、NOPスレッド(512 nops)で埋め、その上に逆バインドシェルコードを挿入して、完全アドレスを見つけます(\x00なし)。 nopスレッドの途中でシェルコードを実行します。

  • リモートサーバーASLRがオフです。

  • バイナリはカナリアなしでコンパイルされ、スタックからコードを実行できます。

私はリモートサーバーにNOPスレッドのアドレスを見つけるように強要した​​いと思います。 そのための良い練習ですか?なぜなら、最後の5K回の試行はまったく機能しなかったからです。

ASLRをオフにしたときのローカルアドレスは0x7fffffffd292です。

次のコードは、ローカルシェル(対話式ではない)をポップ:

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.connect((h, p)) 

s.send(("hello " + "A" * 100).encode() + struct.pack("L", 0x7fffffffcccc) + (b'\x90'*512) + shell_code) 
print(s.recv(2048)) 
  0

私が間違っていれば私を訂正してください。しかし、私は遠隔サーバー上のbrute-forcingメモリアドレス、特に64ビットアドレス空間のために実行可能ではないと思います。たぶん特定のスタックアドレスまたは空きアドレスをどこかに検索スペースを制限することはあなたの問題を助けるかもしれません。私はこのタイプの問題のための他の知的検索方法を聞いていない。 26 12月. 172017-12-26 09:07:35

  0
4

ブルートフォースは、あなたがそのあなたの最後のない限り、何にするはずの方法ではありません。 x64のアドレス空間は大きすぎるため無理矢理働くことはできません。 ROP(Return Oriented Programming)と呼ばれるこの手法を見てください。現在、あなたはRIPを強要しています。バイナリにあなたがシェルコードにジャンプするのを助けるいくつかのコードがあり、PIEがないということはアドレスが一定であることを意味します。コントロールがretに転送されると、他のレジスタに含まれているものを見てください。バイナリにはcall eaxのようなコードがあります。

  0

私はROPgadgetの出力を共有することができますが、私はスタックピボットはありませんが、ropチェーンはありません。私は "raxコール"ガジェットを持っていますしかし、どうすればraxにnopスレッドにジャンプするのですか? 25 12月. 172017-12-25 14:53:02

  0

レジスタの内容は何ですか?彼らはバッファを参照していますか? 25 12月. 172017-12-25 15:10:08

  0

ROPgadgetの出力も共有できますか? 26 12月. 172017-12-26 08:57:32

  0

ROPgadget&ropperの出力https://hastebin.com/raw/ehadepohod 26 12月. 172017-12-26 13:17:04

  0

@IddoEバイナリに便利なガジェットはないと思います。多分、バイナリの一部が助けることができますか?バイナリを共有できますか? 27 12月. 172017-12-27 12:47:33

  0

はい、どうすれば連絡できますか? 27 12月. 172017-12-27 16:00:28