天天看点

buuctf pwn jarvisoj_fm

buuctf pwn jarvisoj_fm

IDA查看

x的地址 0804A02C

.data:0804A02C x dd 3 ; DATA XREF: main+65↑r 查看得知是格式化漏洞 第10行存在格式化字符串漏洞,我们可以利用它随意读写的特性让x=4 x_addr=0x804A02C
buuctf pwn jarvisoj_fm

AAAAA.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x

那么可以看到输入点的参数在栈上存储的位置,手动输入计算得到偏移为11

利用x的地址配合上%11$n 将x修改为4

payload=p32(x_addr)+"%11$n"

稍微解释一下payload,首先传入x参数的地址,这个地址存放在栈上偏移为11的位置,利用%11$n,定位到了偏移为11的位置,往这个位置写入数据,写入的数据由%11$n前面的参数的长度决定,而我们的x参数的地址,正好是4位,不需要添a来补齐位数就可以直接利用,将x参数的地址的值改成了4,获取了shell