《学习——>一步一步学ROP之linux_x64篇》的评论 http://oldblog.giantbranch.cn/?p=417 新博客:https://www.giantbranch.cn/ Tue, 04 Dec 2018 14:25:45 +0000 hourly 1 https://wordpress.org/?v=5.1.1 作者:giantbranch http://oldblog.giantbranch.cn/?p=417&cpage=1#comment-15 Thu, 09 Feb 2017 01:13:16 +0000 http://www.giantbranch.cn/?p=417#comment-15 我改成你的payload,调试了一下发现,其实不调试也应该发现的,没办法,笨,
call QWORD PTR [r12+rbx*8],那个gadgets的call是读取r12地址里面储存的去调用而不是直接call r12+rbx*8,
所以要储存到某个地方咯

]]>
作者:XIng http://oldblog.giantbranch.cn/?p=417&cpage=1#comment-14 Wed, 08 Feb 2017 13:56:21 +0000 http://www.giantbranch.cn/?p=417#comment-14 不不,不是这个意思哈,是这样的,先通过read将”/bin/sh”写入.bss段中,之后,构造payload时,这样(原本的):
payload3 += p64(0x4005fa) + p64(0) + p64(1) + p64(bss_addr) + p64(0) + p64(0) + p64(bss_addr+8) # pop_junk_rbx_rbp_r12_r13_r14_r15_ret
改成:
payload3 += p64(0x4005fa) + p64(0) + p64(1) + p64(system_addr) + p64(0) + p64(0) + p64(bss_addr) # pop_junk_rbx_rbp_r12_r13_r14_r15_ret
system_addr已经通过write函数泄露的地址偏移计算出来了,为什么我要把它写到.bss段中呢?直接调用就可以吧?
这样实际上也是在执行system(“/bin/sh”)啊,我试验时发现不行,也不知道是为什么,可能是我对指令理解有偏差

]]>
作者:giantbranch http://oldblog.giantbranch.cn/?p=417&cpage=1#comment-13 Wed, 08 Feb 2017 12:55:14 +0000 http://www.giantbranch.cn/?p=417#comment-13 因为这里是rdi传参的,不是通过栈上传递参数(不知道你是不是想这方向去了),只能通过gadgets传参并调用吧

]]>
作者:XIng http://oldblog.giantbranch.cn/?p=417&cpage=1#comment-12 Wed, 08 Feb 2017 09:53:32 +0000 http://www.giantbranch.cn/?p=417#comment-12 在level5中,为什么得到了system的地址后还要利用read将其写入.bss段中,不能够直接调用其地址吗,只将“/bin/sh”字符串写入.bss段中 。是不是多此一举了?

]]>
作者:Xing http://oldblog.giantbranch.cn/?p=417&cpage=1#comment-11 Wed, 08 Feb 2017 09:51:34 +0000 http://www.giantbranch.cn/?p=417#comment-11 请问楼主,在mylevel5的exp中,payload3构造时候,为什么不能够直接用system的地址,将“/bin/sh”写入bss段中,直接实现system(“/bin/sh”)而是先把system的地址写入.bss段中,再将“/bin/sh”写入bss段中,最后从bss段中取出地址再执行呢?是不是多此一举了….

]]>