某安全竞赛题一
前段时间一个比较大的比赛上遇到的两个题目,遂记录一下
运行改程序
该程序开启的端口为12345
发送畸形数据包之后程序崩溃,如下图可知,崩溃点发生在函数0x000000000040096b中
通过调试发现溢出发生在函数calc的memcpy函数中
溢出之后的堆栈,此时返回地址0x7fffffffc320被覆盖
通过查看即看发现溢出点的偏移为280
构造shellcode发包
内存中收到的shellcode
但是在该题中传入的shellcode会在传入溢出点之前被做加密处理,如下图所示,收取的数据在传入calc前,在函数EncodeBuffer中进行加密。
如下图所示即为处理过的shellcode,这样被传入的shellcode就不会被触发。
但是通过调试发现该处的加密处理是可逆的,即如果传入的是加密处理的shellcode,在服务端如果再进过加密处理,即会还原。
首先发送正常的shellcode
运行之后加密,可以从内存中dump出加密之后的shellcode。
此时再发送加密shellcode即会还原。
此时收到的shellcode即为加密shellcode。
双重加密之后还原的shellcode
溢出前的堆栈
溢出后此时返回地址0x7fffffff328被覆盖。
此时eip已可控。
。。。。。。。。
此题为简单的溢出,但是在溢出前对传入的数据进行了加密,因此需要对传入的shellcode进行编码处理,当是此处的加密函数可逆,因此可以不必去逆向整个加密函数,通过取巧传入加密之后的shellcode即可绕过该处加密。
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步