Angr符号执行练习–SecuInside 2016 mbrainfuzz
内容提要
本文介绍了使用angr和radare2/r2pipe进行静态分析和漏洞利用的过程。通过分析sample_1中的栈溢出,构造特定的argv[1]以触发漏洞,并利用angr求解约束条件,生成shellcode和最终的Exploit。同时提到需手动修改sample_1以使.bss可执行。
关键要点
-
本文介绍了使用angr和radare2/r2pipe进行静态分析和漏洞利用的过程。
-
通过分析sample_1中的栈溢出,构造特定的argv[1]以触发漏洞。
-
利用angr求解约束条件,生成shellcode和最终的Exploit。
-
需手动修改sample_1以使.bss可执行。
-
sample_1存在由argv[1]触发的经典栈式缓冲区溢出。
-
使用r2pipe进行静态分析,提取函数调用和约束条件。
-
angr CFG静态分析方案用于分析控制流图。
-
针对每个sub_400XXX求解rdi/rsi/rdx/rcx的值。
-
使用pwn模块生成shellcode以提高可维护性。
-
生成最终Exploit时需考虑局部变量和返回地址。
-
Patch sample_1以使.bss可执行,解决SIGSEGV问题。
-
修改原solve.py以避免某些函数返回None。
-
simulation_manager是path_group的升级版,path_group已过时。
延伸解读
静态分析工具的选择
在进行静态分析时,选择合适的工具至关重要。本文提到的r2pipe和angr各有优劣。r2pipe在静态分析速度上明显更快,而angr在处理复杂控制流图时更为灵活。读者应根据具体需求选择工具,尤其是在时间紧迫的情况下,r2pipe可能是更好的选择。
栈溢出利用的复杂性
sample_1中的栈溢出利用并非简单的输入构造。由于存在多个对argv[1]的检查,攻击者需要精确满足这些约束条件才能成功触发溢出。这种复杂性要求攻击者具备较强的逆向工程能力和对程序逻辑的深入理解。
内存权限的重要性
在进行漏洞利用时,内存区域的权限设置至关重要。sample_1的.bss区域在未被设置为可执行时,攻击者即使成功构造了shellcode,也无法执行。这提醒开发者在设计程序时,需仔细考虑内存权限,以防止潜在的安全漏洞。
延伸问答
如何使用angr进行静态分析和漏洞利用?
使用angr进行静态分析和漏洞利用的过程包括分析样本中的栈溢出,构造特定的argv[1]以触发漏洞,并利用angr求解约束条件生成shellcode和最终的Exploit。
sample_1中的栈溢出是如何触发的?
sample_1中的栈溢出是通过sscanf从argv[1]读取16进制字节流并灌入.bss中的固定位置缓冲区,导致缓冲区溢出。
如何生成shellcode以提高可维护性?
可以使用pwn模块生成shellcode,通过指定要执行的命令来提高可维护性。
为什么需要手动修改sample_1使.bss可执行?
需要手动修改sample_1使.bss可执行是因为默认情况下.bss只有读写权限,没有执行权限,这会导致shellcode无法执行。
r2pipe和angr在静态分析中的主要区别是什么?
r2pipe的静态分析速度较快,而angr的CFG静态分析速度较慢,angr在处理时耗时几乎是r2pipe的10倍。
如何使用angr求解sub_400XXX中的约束条件?
使用angr求解sub_400XXX中的约束条件时,需要指定起始地址和结束地址,以及需要避免的返回地址和符号变量。