20145303 刘俊谦《网络对抗》shellcode注入&Return-to-libc攻击深入

20145303 刘俊谦《网络对抗》shellcode注入&Return-to-libc攻击深入

Shellcode注入

shellcode实际是一段代码,但却作为数据发送给受攻击服务器,将代码存储到对方的堆栈中,并将堆栈的返回地址利用缓冲区溢出,覆盖成为指向 shellcode 的地址

实验过程:

获取shellcode的C语言代码

884668-20170327212129748-933897157.png

下载安装execstack

884668-20170327212856686-1126891537.png

配置环境
    execstack -s pwn5303:将堆栈设为可执行状态
    execstack -q pwn5303:查看文件pwn5302的堆栈是否是可执行状态
    用more /proc/sys/kernel/randomize_va_space:查看地址随机化的状态
    用echo "0" > /proc/sys/kernel/randomize_va_space:关闭地址随机化

884668-20170327212154311-1339085595.png

构造要注入的payload

anything+retaddr+nops+shellcode结构构造

884668-20170327212111795-1713800647.png

注入这段攻击buf:

884668-20170327212232842-1459817703.png

(先只按一下回车)
打开另外一个终端,用gdb来调试pwn1这个进程

884668-20170327212243389-1644076893.png

(找到进程号为2375)

884668-20170327212253498-1678103143.png

设置断点,来查看注入buf的内存地址:

884668-20170327212304311-87506816.png

在另外一个终端中按下回车:

884668-20170327212314358-547725748.png

884668-20170327212323717-1686375110.png

(将返回地址改为0xffffd3c1)

884668-20170327212335436-254026736.png

(执行shellcode5303,可以看到成功注入)

Return-to-libc 攻击实验

即使栈有不可执行的能力,无法将shellcode放入堆栈中运行,但我们却可以直接让漏洞程序调转到现存的代码来实现我们的攻击。(本次实验所用的是已经载入内存的 libc 库中的 system()函数等)

实验过程:

创建32位C语言可编译的环境
进入32位linux操作环境,进入bash,并关闭地址随机化

884668-20170327212350514-156640696.png

在/tmp下创建“retlib.c”文件,并编译设置SET-UID

884668-20170327212400311-1208079420.png

(此程序有一个缓冲区溢出漏洞:该程序读取badfile文件,将40字节的数据读取到只有12字节大小的buffer,而fread函数不检查边界导致溢出)

在/tmp下创建“getenvaddr.c”文件用于读取环境变量,并编译。在/tmp下创建“exploit.c”文件用于攻击。并获取地址。

884668-20170327212412311-97571489.png

进入gdb设置断点,调试运行获取system和exit的地址

884668-20170327212424889-1626353122.png

修改 exploit.c 文件

当时做太快,没来得及截图(很尴尬),事后想起来的时候,已经把练习都做完了。。。

删除 exploit 和 badfile ,重新编译exploit.c,然后先运行攻击程序 exploit,再运行漏洞程序 retlib,可以看到攻击成功,获得了 root 权限

884668-20170327212522061-100980345.png

练习:

将/bin/sh重新指向/bin/bas

884668-20170327212629686-6344598.png

修改攻击程序

884668-20170327212640373-1005087352.png

编译运行,可以看到攻击成功

884668-20170327212655248-1797239655.png

转载于:https://www.cnblogs.com/ljq007/p/6628908.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值