python3进行编译此条代码会出现报错:
1 | payload = 'a' * 4 + p64(1853186401) |
报错信息:
1 | File "mex.py", line 4, in <module> |
报错翻译——字符类型不匹配不能进行拼接。
百度搜索相关资料,找到解决方法—添加后缀(**.decode(“iso-8859-1”)**)进行转码。
1 | payload = 'a'*4 + p64(1853186401).decode("iso-8859-1") |
1 | payload = 'a' * 23 + p64(0x401185).decode("iso-8859-1") + p64(0x401186).decode("iso-8859-1"); |
要使用额外地址的原因是栈地址需要对齐才能执行system。
(64位ubuntu18以上系统调用system函数时是需要栈对齐的。再具体一点就是64位下system函数有个movaps指令,这个指令要求内存地址必须16字节对齐)
解决方法:
1 | from pwn import * |
1 | from pwn import * |
p32、p64所做的是,将一个整形数据进行hex转换后,将这个进行转换成byte型,并进行小段输入。
(Hex)
1 | Hex就是16进制,本质上是将字节数组转化为16进制,然后用字符串的形式表现出来。 |