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密码

从0教你iot漏洞挖掘

  • 接着安装依赖
sudo apt-get install busybox-static fakeroot git dmsetup kpartx netcat-openbsd nmap python-psycopg2 python3-psycopg2 snmp uml-utilities util-linux vlan
  • 将固件拷贝到firmadyne文件夹下

从0教你iot漏洞挖掘

  • 重置文件
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

从0教你iot漏洞挖掘

  • 对模拟环境进行配置
/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

从0教你iot漏洞挖掘

从0教你iot漏洞挖掘

  • 最后打开浏览器输入ip即可访问

从0教你iot漏洞挖掘

2.漏洞分析

  • genacgi_main函数是漏洞开始的触发点,通过getenv函数获取“REQUEST_URI”环境变量的内容,接着对其进行验证,最后进入sub_40FCE0。

从0教你iot漏洞挖掘

  • 下图是sub_40FCE0函数的内容,在上图中获得的值,最终通过xmldbc_ephp函数发送出
    去,数据由run.NOTIFY.php进行处理。

从0教你iot漏洞挖掘

  • 该php调用了GENA_subscribe_new函数,并且向里面传递了cgibin中获取到的数据,还
    传递了SHELL_FILE参数。

从0教你iot漏洞挖掘

  • 文件gena.php中是函数GENA_subscribe_new的实现代码。从代码中我们可以看到该函数并未对shell_file数据进行操作。但是在最后调用了
    GENA_notify_init函数传入了shell_file。接下来在该文件下找到GENA_notify_init函。

从0教你iot漏洞挖掘

  • 接下来在该文件下找到GENA_notify_init函数 第一次调用fwrite的时候创建了文件, 第二次调用fwrite的时候使用了”rm -f”命令。

     

从0教你iot漏洞挖掘

到此为止我们的攻击思路大致已经出来了。我们只需要插入一个反引号包裹的系统命
令,然后注入到shell脚本中即可。

3.漏洞验证

 

从0教你iot漏洞挖掘

从0教你iot漏洞挖掘

从0教你iot漏洞挖掘

 

本文来源于互联网:从0教你iot漏洞挖掘