1.环境搭建
系统:Ubuntu18.04
固件:DIR822A1_FW103WWb03.bin
使用用firmadyne工具运行固件
注意:Firmadyne安装之前,先安装firmware-analysis-toolkit
- 由于过程比较复杂而且中间有错就会导致最后的失败。所以这里我把安装过程所需要的命令给
大家总结了一下:
git clone https://github.com/attify/firmware-analysis-toolkit
cd firmware-analysis-toolkit
./setup.sh
“./setup.sh”这个过程比较吃网络,如果网络慢的同学可以出门抽个烟、喝个酒、吃个火
锅再回来。
- 接着找到fat.config文件后修改root密码
- 接着安装依赖
sudo apt-get install busybox-static fakeroot git dmsetup kpartx netcat-openbsd nmap python-psycopg2 python3-psycopg2 snmp uml-utilities util-linux vlan
- 将固件拷贝到firmadyne文件夹下
- 重置文件
rm -rf images*
python3 reset.py
-
安装配置数据库(由于我这里存在firware,所以database提示存在)
sudo apt-get install postgresql
sudo -u postgres createuser -P firmadyne
sudo -u postgres createdb -O firmadyne firmware
sudo -u postgres psql -d firmware < ./firmadyne/database/schema
- 对模拟环境进行配置
/sources/extractor/extractor.py -b Dlink -sql 127.0.0.1 -np-nk "DIR822A1_FW1
./scripts/getArch.sh ./images/1.tar.gz
./scripts/makeImage.sh 1 mipseb
./scripts/inferNetwork.sh 1 mipseb
./scratch/1/run.sh
- 最后打开浏览器输入ip即可访问
2.漏洞分析
- genacgi_main函数是漏洞开始的触发点,通过getenv函数获取“REQUEST_URI”环境变量的内容,接着对其进行验证,最后进入sub_40FCE0。
- 下图是sub_40FCE0函数的内容,在上图中获得的值,最终通过xmldbc_ephp函数发送出
去,数据由run.NOTIFY.php进行处理。
- 该php调用了GENA_subscribe_new函数,并且向里面传递了cgibin中获取到的数据,还
传递了SHELL_FILE参数。
- 文件gena.php中是函数GENA_subscribe_new的实现代码。从代码中我们可以看到该函数并未对shell_file数据进行操作。但是在最后调用了
GENA_notify_init函数传入了shell_file。接下来在该文件下找到GENA_notify_init函。
- 接下来在该文件下找到GENA_notify_init函数 第一次调用fwrite的时候创建了文件, 第二次调用fwrite的时候使用了”rm -f”命令。
到此为止我们的攻击思路大致已经出来了。我们只需要插入一个反引号包裹的系统命
令,然后注入到shell脚本中即可。
3.漏洞验证
本文来源于互联网:从0教你iot漏洞挖掘