用MSFrop搜索代码漏洞
在您开发针对Windows操作系统较新版本的漏洞攻击时,您会发现它们现在默认启用了数据执行保护(DEP)。DEP可防止shellcode在堆栈上执行,并迫使开发人员找到解决此问题的方法,并开发了所谓的“ 返回编程”(Return Oriented Programming,ROP)
面向返回程编程(ROP)是一种计算机安全漏洞利用技术,允许攻击者在存在安全防御(如可执行空间保护和代码签名)时执行代码。
在这种技术中,攻击者获得对调用堆栈的控制来劫持程序控制流程,然后执行已经存在于机器内存中的精心挑选的机器指令序列,称为“小配件或小工具”。每个小工具通常以返回指令结束,并位于现有程序和/或共享库代码内的子例程中。将这些小工具链接在一起时,攻击者可以在采用阻止更简单攻击的防御措施的计算机上执行任意操作。
一个ROP,通过使用从非ASLR指令预先存在的套创造了有效载荷启用二进制文件,使你的shellcode执行。每组指令都需要以RETN指令结束,以便通过每组指令来执行ROP链,每组指令通常称为小工具。
Metasploit中的“msfrop”工具将搜索给定的二进制文件并返回可用的小工具。
root @ kali:#msfrop -h
选项:
-d,--depth [size] 从返回指令向后反汇编的最大字节数
-s,--search [regex] 搜索匹配正则表达式的小工具,匹配intel语法或原始字节
-n,--nocolor 禁用颜色。用于管道到其他工具,如越来越少的命令
-x,--export [filename] 将小工具导出为CSV格式
-i,--import [filename] 从以前的集合导入小工具
-v,--verbose 输出非常详细
-h,--help 显示此消息
使用-v开关运行msfrop会将所有找到的小工具直接返回到控制台:
root@kali:/tmp# msfrop -v metsrv.dll
Collecting gadgets from metsrv.dll
Found 4829 gadgets
metsrv.dll gadget: 0x10001057
0x10001057: leave
0x10001058: ret
metsrv.dll gadget: 0x10001241
0x10001241: leave
0x10001242: ret
metsrv.dll gadget: 0x1000132e
0x1000132e: leave
0x1000132f: ret
metsrv.dll gadget: 0x1000138c
0x1000138c: leave
0x1000138d: ret
...略...
当二进制文件包含数千个小工具时,详细的msfrop输出不是特别有用,所以更有用的开关是' -x ',它允许您将小工具输出到CSV文件中,然后您可以稍后进行搜索。
root@kali:/tmp# msfrop -x metsrv_gadgets metsrv.dll
Collecting gadgets from metsrv.dll
Found 4829 gadgets
Found 4829 gadgets total
Exporting 4829 gadgets to metsrv_gadgets
Success! gadgets exported to metsrv_gadgets
root@kali:/tmp# head -n 10 metsrv_gadgets
Address,Raw,Disassembly
"0x10001098","5ec20c00","0x10001098: pop esi | 0x10001099: ret 0ch | "
"0x100010f7","5ec20800","0x100010f7: pop esi | 0x100010f8: ret 8 | "
"0x1000113d","5dc21800","0x1000113d: pop ebp | 0x1000113e: ret 18h | "
"0x1000117a","5dc21c00","0x1000117a: pop ebp | 0x1000117b: ret 1ch | "
"0x100011c3","5dc22800","0x100011c3: pop ebp | 0x100011c4: ret 28h | "
"0x100018b5","5dc20c00","0x100018b5: pop ebp | 0x100018b6: ret 0ch | "
"0x10002cb4","c00f9fc28d54","0x10002cb4: ror byte ptr [edi], 9fh | 0x10002cb7: ret 548dh | "
"0x10002df8","0483c20483","0x10002df8: add al, -7dh | 0x10002dfa: ret 8304h | "
"0x10002e6e","080bc20fb6","0x10002e6e: or [ebx], cl | 0x10002e70: ret 0b60fh | "
root@kali:/tmp#