首页
社区
课程
招聘
[原创]CVE-2019-10999复现学习
发表于: 2022-1-15 14:15 35020

[原创]CVE-2019-10999复现学习

2022-1-15 14:15
35020

https://github.com/yywz1999/docker-qemu-system

下载好后按照readme安装,连接ssh上去。

然后去打包固件

tar -zcvf cpio.tar.gz cpio-root

上传到docker

切换到root权限

仿真:

chroot . ./bin/sh进入sh。

./etc_ro/rcS中找到了internet.sh文件。查找这个文件它位于: ./sbin/internet.sh

在这个文件中又看到了一个 [lan.sh](http://lan.sh) 【./sbin/lan.sh】文件。

继续查看:

发现了关于web启动的相关信息。

确定了这个固件启动web服务的程序为: alphapd

无法打开pid file,创建一个

再次报错

创建nvramd.pid

调试查看v4的值

可以发现这里是通过 gpio 接口来获取IP的。但是我们是仿真的,并没有这个接口。所以我们直接去Patch。

patch后运行。


在gdb-multiarch中

通过对程序分析,寻找敏感函数,最终找到了一个 strcpy 用户可控的输入位置


可以看到这里的 v11 只有四个字节。 v8 是由 v10 赋值,而他是从 WEPEncryption 获取的。而且并没有长度检查。

交叉引用找到调用点

找到了 formDefineWireless 函数

在web页面中找到了相似关键字

于是测试发包

程序crash,并且控制了PC寄存器。

于是我们开始测试溢出长度

下面我们就可以来寻找gadget打这个溢出。

0x77eda000

想要打出system的话,我们这里就需要来控制 a0 寄存器作为函数调用的参数。

这是找到的gadget

栈中地址存到 s2 寄存器中,然后 s0 寄存器存入 t9 然后调用函数。

所以我们的exp就可以写了

 
 
 
 
 
 
mount -o bind /dev/ ./dev/
mount -t proc /proc/ ./proc
mount -o bind /dev/ ./dev/
mount -t proc /proc/ ./proc
 
 
 
 
 
 
 
 
killall -q alphapd
sleep 1
alphapd &
killall -q alphapd
sleep 1
alphapd &
 
 
 
 
 
 
 
 
 
./gdbserver-mipsel :23946 ./bin/alphapd
./gdbserver-mipsel :23946 ./bin/alphapd
 
 

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 6
支持
分享
最新回复 (1)
雪    币: 0
活跃值: (537)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
2022-5-20 14:31
0
游客
登录 | 注册 方可回帖
返回
//