1 概述
SROP: Sigreturn Oriented Programming ,系统Signal Dispatch之前会将所有寄存器压入栈,然后调用signal handler,signal handler返回时会将栈的内容还原到寄存器。 如果事先填充栈,然后直接调用signal handler,那在返回的时候就可以控制寄存器的值。
2 资源
1. Framing Signals—A Return to Portable Shellcode
http://www.ieee-security.org/TC/SP2014/papers/FramingSignals-AReturntoPortableShellcode.pdf
PS:SROP的论文,不容易理解,未读。
2. Sigreturn Oriented Programming (SROP) Attack攻击原理
http://www.freebuf.com/articles/network/87447.html
PS:介绍了SROP的基本原理。
3. Sigreturn Oriented Programming攻击简介
https://www.anquanke.com/post/id/85810
PS:介绍了SROP的基本原理。附带有32位的DEMO。
4. Playing around with SROP
https://x86overflow.blogspot.in/2014/04/playing-around-with-srop.html
PS:32位SROP DEMO
5. Sigreturn Oriented Programming
https://www.slideshare.net/AngelBoy1/sigreturn-ori
PS:介绍了SROP的基本原理
6. 2017 429 ichunqiu ctf smallest(pwn300) writeup
http://anciety.cn/2017/04/21/2017429ctf-smallest-writeup/
PS:64位SROP实例
7. Return to VDSO using ELF Auxiliary Vectors。https://v0ids3curity.blogspot.jp/2014/12/return-to-vdso-using-elf-auxiliary.html。
PS:VDSO的利用,SROP可以利用VDSO。
8. Defcon 2015 Qualifier fuckup
https://github.com/ctfs/write-ups-2015/tree/master/defcon-qualifier-ctf-2015/pwnable/fuckup
此题较难。
3 SROP原理
4 SROP利用
4.1 Signal Frame
Ubuntu 16.04 64
4.1.1 X86
Sigcontext
对x86来说,此数据结构为sigcontext。
大小为80字节,示例:
frame.set_regvalue("eax", SYS_MPROTECT) #125 frame.set_regvalue("ebx", page_text_segment) #0x08048000 frame.set_regvalue("ecx", 0x1000) frame.set_regvalue("edx", 0x7) frame.set_regvalue("ebp", page_text_segment) frame.set_regvalue("eip", INT_80) #0x08048071 frame.set_regvalue("esp", page_text_segment+16) frame.set_regvalue("cs", 0x23) frame.set_regvalue("ss", 0x</ |