writeup_intOverflow_pwn
writeup_intOverflow_pwn
先小查一下,开启了堆栈不可执行,放ida吧
逻辑很清楚,进login
username:0x19
pw:0x199
好长的密码
密码的长度为3-8则输出错误,否则正确。
那么首先要找溢出点,在login
函数中,空间给的很大,而且read()
函数限制严格,不可能溢出。
然后来到check
函数中,一开始对密码的长度做了校验,然后把校验长度之后的密码通过strcpy放入dest中,这里dest的大小很小:
如果能跳过校验,我们就可以覆盖掉返回地址,然后调用what_is_this
函数:
那么如何绕过校验,让strcpy执行,复制足够长的字符串呢?这就需要整数溢出
Int8, 等于Byte, 占1个字节.
可以看到int8非常的小,最大就是255, 如果存入int8的值比255还大,就会循环溢出。
因此
password字符串的长度可以是3-8个字符,也可以是259-264个字符
就靠这个原理就可以构造shellcode了,如下:
1 | from pwn import * |
跑一下:
受不了python3了,马上就换2
cyberpeace{988edb16506abc237bbd8c3996cf7728}
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.