[BUUCTF] PWN——picoctf_2018_leak_me(「\ x00」を置くと機密データの出力がバイパスされます)

picoctf_2018_leak_me

別館

ステップ

  1. 定期検査、32ビット、NX保護がオンになっている
    ここに画像の説明を挿入します
  2. ローカルで実行して、一般的な状況を確認します
    ここに画像の説明を挿入します
  3. 32ビットidaロード
    ここに画像の説明を挿入します
    プログラムのおおよその流れは、最初に名前を入力してからパスワードを入力することです。入力が正しいかどうかを確認するために、ターゲットマシンにpassword.txtが必要です。入力が正しい場合は、フラグ関数が呼び出され、フラグ関数がフラグを出力します。
    ここに画像の説明を挿入します
  4. スタック上のパラメータV5(ストレージ名)及びパラメータs(記憶フラグ)の位置が遠くないが、パラメータV5は、データを読み込む場合には、パラメータsは上書きすることができる。
    ここに画像の説明を挿入します
    ここに画像の説明を挿入します
    それらの間の差0x154-0x54=0x100、およびv5に入力するデータの長さは正確に0x100です。v5に続けてsを入力すると、メイン関数の34行でv5が出力され、「\ x00」に遭遇するとプットが停止し、v5のコンテンツは次のようになります。0x100*a+password+'\x00'*4c、パスワードが一緒に印刷されますので、出てきます。
    ここでは、Cyclicを使用して文字列を生成し、パスワードを読み取ってパスワードを
    ここに画像の説明を挿入します
    取得しますa_reAllY_s3cuRe_p4s$word_f85406
  5. 次に、re-ncしてパスワードを入力します
    ここに画像の説明を挿入します

この質問ではexpを書く必要はまったくありませんが、記事を読んだ後でそれについて書きましょう。

from pwn import *

p = remote("node3.buuoj.cn",28171)

password = "a_reAllY_s3cuRe_p4s$word_f85406"
p.sendlineafter("What is your name?\n","A")
p.sendlineafter("Please Enter the Password.\n",password)

p.interactive()

おすすめ

転載: blog.csdn.net/mcmuyanga/article/details/113540092