第一届东软杯pwn-justdoit
一直等着比赛第二天有pwn题续命,可惜,下次比赛目标pwn题拉满!
ida分析通过伪函数分析发生没有什么漏洞,也没看到malloc、free、new关键字,那么一定是栈题、函数中也没发现缓冲区溢出,那么就找程序中一些奇奇怪怪的代码配合汇编一起看。

![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CU3UxYOP-1639138860359)(C:\Users\54622\AppData\Roaming\Typora\typora-user-images\image-20211210190159821.png)]](https://i-blog.csdnimg.cn/blog_migrate/a54772ae326585f8391b55eeb34414bd.png)
最后在main汇编代码里面发现了这个
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-U4sidVr3-1639138860361)(C:\Users\54622\AppData\Roaming\Typora\typora-user-images\image-20211210190418140.png)]](https://i-blog.csdnimg.cn/blog_migrate/d6275ef18b6b2bc7ace8ecb011437bb5.png)
加上测试程序时报了段错误
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MBwHKB6X-1639138860362)(C:\Users\54622\AppData\Roaming\Typora\typora-user-images\image-20211210190524391.png)]](https://i-blog.csdnimg.cn/blog_migrate/15c9c325fddc2c85e0e63794942d365d.png)
那么程序漏洞利用点必是这里无疑,既然rbp的值可以控制,因为rbp与程序执行流密切相关,那么我输入一个地址将rbp置于它的上方即可达到劫持执行流。因为程序没有后门,嗯,保护措施如下:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ydrtpHmM-1639138860363)(C:\Users\54622\AppData\Roaming\Typora\typora-user-images\image-20211210190839038.png)]](https://i-blog.csdnimg.cn/blog_migrate/5cc681eb037d3a701bdc6f7173f26aaf.png)
思路:可用got表劫持,libc泄漏
ok,name后面的buf可以输入执行地址,frends后面的buf可以改变执行流,以下简称buf1、buf2.
buf1只能输入0x18那么刚好就是3个地址,64位中ROP泄漏libc就是 pop_rdi + @got + @plt + ret_addr,即可leak,那么很明显这里放不下,那么就需要拆分执行。
call和ret指令都是转移指令,它们都修改IP,或同时修改CS和IP
这题我们调整rep的值指向rsp,那么它会将rsp的下一条指令pop ip,那么此时rbp也会指向rsp的值经过leave后会将这个值保存至rbp寄存器,此时程序误以为回到了调用者函数,然后又会重用之前的rbp,嗯,ok
payload:
sa('name?',p64(main) +p64(main))
sa('frends??',str(-0x20)) #指向第二个参数 那么rbp = main ,ret = main
sa('name?',p64(prdi)+p64(puts_got)+p64(puts_plt))
sa('frends??',str(-0x28))
程序先执行一遍main函数并把main函数地址保存至rbp,然后执行got表泄漏后执行rbp的值,那么程序就又回到了main。
ok,这一次直接getshell

本文详细介绍了如何分析一个没有明显malloc、free、new的pwn题目,通过深入汇编代码找到栈溢出漏洞,并利用该漏洞实现执行流劫持。作者展示了从泄露libc地址到构造payload获取shell的完整过程,涉及知识点包括ROP链、libc基址计算及利用技巧。
最低0.47元/天 解锁文章
519

被折叠的 条评论
为什么被折叠?



