20145318《网络对抗》注入shellcode及Return-to-libc
注入shellcode
知识点
- 注入shellcodeShellcode实际是一段代码(也可以是填充数据),是用来发送到服务器利用特定漏洞的代码,一般可以获取权限。另外,Shellcode一般是作为数据发送给受攻击服务器的。 Shellcode是溢出程序和蠕虫病毒的核心,提到它自然就会和漏洞联想在一起,毕竟Shellcode只对没有打补丁的主机有用武之地。漏洞利用中最关键的是Shellcode的编写。
实践过程
- 写一段shellcode,保存为20145318shellcode.c
-
![技术分享](http://image.bubuko.com/info/201703/20180110224214247923.jpg)
-
安装execstack
![技术分享](http://image.bubuko.com/info/201703/20180110224214256713.jpg)
- 设置堆栈可执行,并查询堆栈是否可执行,以便shellcode在堆栈上可以执行
![技术分享](http://image.bubuko.com/info/201703/20180110224214274291.jpg)
![技术分享](http://image.bubuko.com/info/201703/20180110224214293823.jpg)
- 用more /proc/sys/kernel/randomize_va_space来查询地址随机化是开启状态还是关闭状态,`2`表示开启,`0`表示关闭。
- 采取nop+shellcode+retaddr方式构造payload(\x4\x3\x2\x1将覆盖到堆栈上的返回地址的位置,需要将它改为shellcode的地址)
![技术分享](http://image.bubuko.com/info/201703/20180110224214302613.png)
![技术分享](http://image.bubuko.com/info/201703/20180110224214310426.jpg)
- 再打开一个终端,用GDB调试5318pwn进程,找到进程号2906
![技术分享](http://image.bubuko.com/info/201703/20180110224214328004.jpg)
- 启动gdb调试进程,设置断点,查看注入buf的内存地址
![技术分享](http://image.bubuko.com/info/201703/20180110224214346560.png)
- 设置断点后,在另一个终端按下回车,并寻找返回地址,看到01020304表示返回地址的位置,shellcode就紧挨着这个地址,加四字节为其地址
![技术分享](http://image.bubuko.com/info/201703/20180110224214364139.png)
- 退出gdb,按anything+retaddr+nops+shellcode修改input_shellcode如下
![技术分享](http://image.bubuko.com/info/201703/20180110224214379764.png)
![技术分享](http://image.bubuko.com/info/201703/20180110224214398320.jpg)
Return-to-libc攻击
![技术分享](http://image.bubuko.com/info/201703/20180110224214408086.jpg)
- sudo apt-get install lib32z1 libc6-dev-i386
![技术分享](http://image.bubuko.com/info/201703/20180110224214416875.png)
![技术分享](http://image.bubuko.com/info/201703/20180110224214435430.png)
![技术分享](http://image.bubuko.com/info/201703/20180110224214455939.png)
- 使用另一个shell程序(zsh)代替/bin/bash,设置zsh程序
![技术分享](http://image.bubuko.com/info/201703/20180110224214495980.png)
![技术分享](http://image.bubuko.com/info/201703/20180110224214528207.jpg)
![技术分享](http://image.bubuko.com/info/201703/20180110224214546763.png)
- 需要用到一个读取环境变量的程序:
getenvaddr.c
![技术分享](http://image.bubuko.com/info/201703/20180110224214560435.jpg)
![技术分享](http://image.bubuko.com/info/201703/20180110224214562388.png)
![技术分享](http://image.bubuko.com/info/201703/20180110224214576061.png)
- 用刚才的
getenvaddr
程序获得BIN_SH
地址
![技术分享](http://image.bubuko.com/info/201703/20180110224214589733.png)
![技术分享](http://image.bubuko.com/info/201703/20180110224214601452.png)
![技术分享](http://image.bubuko.com/info/201703/20180110224214615125.png)
- 修改
exploit.c
文件,填上刚才找到的内存地址
![技术分享](http://image.bubuko.com/info/201703/20180110224214624891.png)
- 删除刚才调试编译的exploit程序和badfile文件,重新编译修改后的
exploit.c
![技术分享](http://image.bubuko.com/info/201703/20180110224214625867.png)
- 先运行攻击程序exploit,生成了badfile文件,再运行漏洞程序retlib,可见攻击成功,获得了root权限
![技术分享](http://image.bubuko.com/info/201703/20180110224214640516.jpg)
![技术分享](http://image.bubuko.com/info/201703/20180110224214653212.jpg)
20145318《网络对抗》注入shellcode及Return-to-libc
原文:http://www.cnblogs.com/zy1111/p/6545528.html