20145331魏澍琛 《网络对抗技术》 PC平台逆向破解
学习任务
1、shellcode注入:shellcode实际是一段代码,但却作为数据发送给受攻击服务器,将代码存储到对方的堆栈中,并将堆栈的返回地址利用缓冲区溢出,覆盖成为指向 shellcode 的地址。
2、Return-to-libc 攻击实验:即使栈有不可执行的能力,无法将shellcode放入堆栈中运行,但我们却可以直接让漏洞程序调转到现存的代码来实现我们的攻击。
注入Shellcode并执行
1、设置环境
2、以 anything+retaddr+nops+shellcode 的结构来构造,先估计返回地址所在位置,并且找到 shellcode 所在地址
3、验证返回地址所在位置以及找到 shellcode 地址,切记先别着急按回车,先另外打开一个终端!
4、找到正在执行的20145331pwn1的进程号
5、进入GDB,联上刚刚找到的进程号
6、在 ret 处设置断点,接着运行到断点处,显示当前esp的值并依照此位置显示接下来的内存地址内容,并由此分析出返回地址位置的正确性以及shellcode的地址
7、继续运行,再次检测是否跳到覆盖的返回地址所表示的地方
8、将作为输入的 input_shellcode 处的 “\x10\x20\x30\x40” 换为上面所找到的 shellcode 地址 “\x31\xd3\xff\xff”,接着执行 20145331pwn1 ,shellcode成功注入!
Return-to-libc 攻击实验
1、进入 32 位 linux 环境。输入“/bin/bash”使用 bash
2、把漏洞程序代码保存为“retlib.c”,在 /tmp 目录下
3、编译
4、环境变量的程序“getenvaddr.c”,代码如下
5、攻击程序代码保存为“exploit.c”,在/tmp 目录下
6、用getenvaddr程序获得 BIN_SH 地址
7、用gdb获得system和exit地址
8、用得到的值去覆盖原exploit.c 文件的对应数据(BIN_SH+system+exit)
9、先运行攻击程序 exploit,再运行漏洞程序 retlib,可见攻击成功,获得了 root 权限,实验成功!
/.
个人痕迹好像不太明显。。。。
不过BIN_SH、system、exit的值每个人都应该不一样
./