CVE-2018-5767
固件下载连接
1 | https://drivers.softpedia.com/dyn-postdownload.php/d27e8410d32cd9de63a3506c47ded1bc/61ff85c5/75eb7/4/1 |
虚拟机环境
ubuntu 18
binwalk 解包
1 | binwalk -Me US_AC15V1.0BR_V15.03.1.16_multi_TD01.rar |

使用 qumu 启动 ./bin/httpd 进行固件模拟
1 | 打开到此处 _US_AC15V1.0BR_V15.03.1.16_multi_TD01.rar.extracted |

程序卡在了 Welcome to …
1 | 使用ida打开 |
如果 R3 > 0 则跳转loc_2CFA8,会导致无限循环

1 | loc_2CF84 |
使用Keypatch 修改 mov R3,R0 为mov R3,#1,让其可以跳出循环,并在Edit–>Patch program–>Apply patches to 导出修改后的文件,将其修改后的httpd 将其替换(记得替换掉后 chmod 777 *给权限)

但是后续模拟固件还是有报错,继续分析 ida

分析当loc_2CF84 最后跳转到loc_2CFA8 后还有一次判断CMP R3, #0,还是使用Keypatch 修改进行修改mov R3,R0 为mov R3,#1 使其不进入左边


再次执行,发现 ip 是从错误的

发现是在get_eth_name的外部函数引起的,使用命令搜索
1 | grep -r "get_eth_name" | grep "匹配到二进制文件" |


挂起虚拟网卡,再重新启动
首先使用 ifconfig -a 查看虚拟机使用的是那个网卡,我们使用ens33

1 | sudo apt install uml-utilities bridge-utils |
此时 IP 正常显示

漏洞实现

使用浏览器打开网页,显示无法访问
1 | cp -rf ./webroot_ro/* ./webroot/ |

成功进入
根据 POC可知溢出漏洞点位于R7WebsSecurityHandler函数中


通过 scanf 输入 password,s_ 大小为 128,可以进行溢出


我们首先要通过此 if 才能进入到后续的 scanf,scanf 就是这次的漏洞点
password 是用户可控的,它是 http 请求中 cookie 上的一个字段,也是 s_1
s_ 大小为 128
根据strncmp 判断只需要让我们的请求中包含”/goform/xxx”就可以靠近漏洞点
我们通过访问 ip/goform/anza,通过burpsuite 进行抓包,通过NATBypass 将虚拟机 ip 内网穿透出去


我们增加Cookie 进行发送,程序最后会出现报错









![[2021 鹤城杯]easyecho](/img/22.jpg)


![[HNCTF 2022 WEEK4]ezheap](/img/17.jpg)


![[BJDCTF 2020]YDSneedGirlfriend](/img/8.jpg)

