论坛首页 逆向工程技术区 阅读主题

某达路由器测试

374 浏览 12 回复
#1 楼主 2026-06-01 21:09:05
分析这款是某某路由器A1206,固件是比较早的未加密的那个。都是些个人学习过程中的思考与知识,整理下来。固件在这:39fK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6H3x3i4W2S2L8X3N6Q4x3X3g2Y4K9i4c8Z5N6h3u0Q4x3X3g2A6L8#2)9J5c8U0t1H3x3U0u0Q4x3V1j5H3y4q4)9J5c8U0t1J5i4K6u0r3K9h3!0@1i4K6u0r3都是些老生常谈的东西可以跳过。这里使用的qemu-user,方便至于分析的文件在下面思路中会聊到,这里环境模拟启动的是/bin/httpd 文件复现环境是qemu+ghidra(反编译伪代码,我个人比较习惯ghidra的伪代码)+ida7.5(动态调试)binwalk解包,文件格式,qemu-user模式启动等这些就不赘述,主要说几个环境模拟时的几个小问题。第一次运行时爆出这个错误停止。string大法发现在main中apmib_init函数从flash中读取mib值到RAM中,像这种模拟是办不到的东西,直接patch代码或更改寄存器值来绕过(尝试了下没办法直接patch代码,可以试试patch机器码,比较麻烦,我就直接改寄存器了)在mips的判断是bne,btgz等,将断点下在他们上,他们通常依靠v0寄存器的值来做判断。此时v0值为0,改为1跳过这里陷入个死循环,问题点在也尝试更改寄存器v0的值成功绕过。继续string大法抱歉这里我并没有查到这个函数的是干什么的,有清楚的请告诉我,提前感谢。不影响,改寄存器大法。上面没问题之后发现ip开在255.255.255.255上。string大法搜 listen ipinet_ntoa函数的意思是,功能是将网络地址转换成“.”点隔的字符串格式。所以跟sockaddr.sin_port有关,查看引用inte_addr 功能是将一个点分十进制的IP转换成一个长整型数(u_long类型)等同于inet_addr()。与host有关,再向前查看其参数为全局变量 g_lan_ip。设置个lanipsudo tunctl -t br0 -u ‘用户名’sudo ifconfig br0 192.168.5.1/24 ps eth1就是第二块网卡第一块通常是eth0 tap是虚拟网络接口 br是网桥这个设置完之后问题2直接解决了。分析其使用的web服务器,常见的嵌入式有以下几种:httpd,uhttpd,gohead,lighttpd,boa还有其他的,我没咋见过,就不写了,用到的话自行查阅(懒!)我分析这款使用的是httpd,在bin目录下,一般服务器文件都在一下几个目录,不排除其他目录在逆向分析httpd时,尽量关注一些自定义功能代码,main下调用的initwebs函数中,配置了前端访问方式可以看到默认页面main,websSetPassword设置访问口令,不多说各位调试的时候可以关注一下。websUrlHandlerDefine需要关注,这个函数的意思是什么样的url交给谁处理。上面说了尽量关注一些自定义功能代码这里的自定义功能代码就在formDefineTendDa中上面这些都是通过goform来处理的,所以其访问形式为 f7eK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8U0p5J5y4#2)9J5k6e0m8Q4x3X3f1H3i4K6u0W2x3g2)9K6b7e0R3H3i4K6u0r3k6$3!0X3L8%4u0E0i4K6u0r3g2r3g2F1k6r3q4s2k6i4c8x3L8$3&6Y4f1%4c8J5K9h3&6Y4i4@1f1^5i4@1u0r3i4K6V1&6i4@1f1$3i4@1p5H3i4@1t1%4i4@1f1%4i4K6W2m8i4K6R3@1哪个路径就交由哪个函数来处理。下面分析可以由两方面展开:分析各个功能点 简单来说就是将所有接口的代码过一遍,去分析参数从哪里来,有没有经过什么危险函数这种的话效率比较低,我个人推荐第二种通过危险函数来查找可利用点,利用逆向分析工具的交叉编译功能查找这里放一张危险函数表dosystemcmdsystem根据上面的函数表来将危险函数过一下下面是之前分析到的两个问题的思路,住这里不涉及exp,poc等脚本的编写,还是以思路为主。过一遍dosystemcmd函数可以看到有145次调用,感觉有漏洞的几率还是挺大的注意点,尽量找form这类的函数,即上面说的自定义功能,有前后端交互且危险函数的参数来自于前端参数websGetVar就是从wp中获取其第二个参数对应的值,如果没有该参数,值默认为第三个参数。上面可以看到这里pcVar1未作任何处理直接拼接到参数中。这里就产生了命令执行,不多做赘述,各位有兴趣可自行复现。溢出是在strpintf函数的调用中发现的。goform/NatStaticSetting路径访问到fromNatStaticSetting函数 sprintf函数将page的参数给拼接到字符串中,未做长度校验,导致溢出 复现过程:断点到fromNatStaticSetting函数入口 将调用fromNatStaticSetting函数的返回地址放入0x407FFAE4 处向下执行到第三个websGetVar函数获取page参数,然后向下执行sprintf函数,将page参数的内容拼接到gotopage内,由代码可知长度为256参数初始化完毕后发现gotopage位置为0x407FF9E0这里我们传入page参数为:执行完后 返回地址0x407FFAE4已经被AAAA覆盖。


登录后可查看完整内容

---
来源: 看雪论坛
原文链接: https://bbs.kanxue.com/thread-272497.htm
#2 2026-06-01 21:09:05
我来啦,终于发文了
#3 2026-06-01 21:09:05
e*16 a


我来啦,终于发文了

好哥哥,带带我
#4 2026-06-01 21:09:05
感谢分享,其实文中的问题可以靠买真实路由器设备解决,我就是75块钱入了一个二手的tenda AC15
#5 2026-06-01 21:09:05
pureGavin


感谢分享,其实文中的问题可以靠买真实路由器设备解决,我就是75块钱入了一个二手的tenda AC15

节省成本,穷
#6 2026-06-01 21:09:05
p1yang


节省成本,穷[em_13]

IOT这东西本来就是需要搞不少设备的,我已经自己自费买了不少设备了,杜邦线啥的都还好,就是路由器那种的比较贵,淦……
#7 2026-06-01 21:09:05
没记错的话,connectcfm是在libcfm.so里面实现的
#8 2026-06-01 21:09:05
我是EP


没记错的话,connectcfm是在libcfm.so里面实现的[em_88]

我去查一下,谢谢哥哥!!!
#9 2026-06-01 21:09:05
大佬,我刚来,最上方的固件地址404了
#10 2026-06-01 21:09:05
wx_没有彩虹的阳光


大佬,我刚来,最上方的固件地址404了

放错了,你用这个,178K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8W2k6g2)9J5k6h3y4G2L8g2)9J5c8Y4l9I4M7r3W2&6j5h3&6Y4i4K6u0r3j5X3q4U0K9%4N6S2M7X3c8Q4x3X3c8S2L8X3q4D9P5i4y4A6M7H3`.`.
#11 2026-06-01 21:09:05
师傅,按照你的方法我web起来后还是有问题一直是Unsupported setsocket 

最后于 2022-9-27 21:17
被mb_htwtewjt编辑

,原因:
#12 2026-06-01 21:09:05
笔者与我习惯一样,用ghidra来静态分析,ida来动调,就是ghidra的地址不是那么准。
#13 2026-06-01 21:09:05
mb_ohjamvjn


笔者与我习惯一样,用ghidra来静态分析,ida来动调,就是ghidra的地址不是那么准。

其实当时更习惯用ida,但是公司刚让hexray代理公司发了个函,那段时间没得用,现在主要还是ida,ghidra对小屏幕实在是不友好

请登录后参与讨论

立即登录 注册账号