本文为看雪论坛精华文章
看雪论坛作者ID:p1yang
型号:X5000R(http://www.totolink.cn/home/menu/newstpl.html?menu_newstpl=products&id=65)AX1800 无线双频千兆路由器(http://www.totolink.cn/home/menu/newstpl.html?menu_newstpl=products&id=65)下面有分析思路,设备模拟过程比较靠近新手,师傅们可以直接跳到后面分析过程。formLoginAuth.htm?authCode=1&action=login(http://192.168.0.1/formLoginAuth.htm?authCode=1&userName=admin&goURL=home.html&action=login)产生原因在lighttpd wen服务文件from_login函数中。if (iVar2 == 0) {
iVar1 = strcmp((char *)&sa58,"ie8");
if (iVar1 == 0) {
pcVar1 = "/login_ie.html";
}
else {
iVar1 = atoi((char *)&sa58);
if (iVar1 == 1) {
pcVar2 = "/login.html";
pcVar1 = "http://%s%s%s";
pcVar3 = "/phone";
LAB_409114:
sprintf(param_2,pcVar1,acStack1860,pcVar3,pcVar2);
return 1;
}
pcVar1 = "/login.html";
}
sprintf(param_2,"http://%s%s",acStack1860,pcVar1);
return 1;
}
上面代码是登陆检查,当iVar2=1的时候,直接跳过检查,不需要登陆。iVar2的值是autoCode参数的值,所以构造autoCode=1即可绕过。今天偶然发现这款非常小众的路由器,至于多小众,我分析这款官方月销15台。我分析的这款是 AX1800,官方可以直接下载固件。binwalk TOTOLINK_C8343R-1C_X5000R_IP04433_MT7621A_SPI_16M256M_V9.1.0u.6118_B20201102_ALL.web
squashfs文件系统,uImage,LZMA压缩文件中应该也是个比较大的内容,直接使用-Me参数递归提取。binwalk -Me TOTOLINK_C8343R-1C_X5000R_IP04433_MT7621A_SPI_16M256M_V9.1.0u.6118_B20201102_ALL.web
mips小端序,查看其文件系统瞅瞅有没有什么东西。有个工具叫firmwalker,可以自动分析文件系统,提取重要文件,我个人觉得不是特别好用。etc/ #这里会存放系统启动文件如openwrt的rcS文件
sbin/ #这里一般会存放厂商制作的功能性文件和提供web服务的文件
www/ #这里会存放一些web静态页面和后台服务文件文件
其他地方也尽量看一下,经验多了就容易清楚哪些文件是做什么的了,没经验就慢慢来。可以看到他使用了lighttpd 的web服务文件。一般固件大概会有这几个轻量级httpd文件:lighttpd,httpd,uhppd。cp (which qemu-mipsel-static) ./
sudo chroot . ./qemu-mipsel-static ./usr/sbin/lighttpd
这里的报错是需要用-f参数指定配置文件,上面已经发现了lighttpd.conf文件。sudo chroot . ./qemu-mipsel-static ./usr/sbin/lighttpd -f ./lighttp/lighttpd.conf
没有这个文件,这里我们先去把这个路径改一下,在lighttpd.conf中。把它改到固件的系统文件中./var/run/lighttpd.pid,并且去创建这个文件。这里虽然正常启动,但是如果不挂载文件夹,还是挺多问题的,所以我更倾向使用系统模式。这里系统模式不做赘述,我写了个脚本,可以很方便启动。https://people.debian.org/~aurel32/qemu/mips/https://gitee.com/p1piyang/backward-analysis/tree/master/ifconfig eth0 192.168.5.12 up #qemu中设置ip,qemu里边
chroot ./squashfs-root/ /bin/sh
./user/sbin/lighttpd -f ./lighttp/lighttpd.conf
刚开始是想直接去分析lighttpd的。随手登陆了一下,看了下包。我个人浅薄的经验,不要单纯去无目的的分析某个应用,我之前犯过这种错误,太容易对着一个程序漫无目的的乱逛,希望你没有这种情况。
这里明显可以看到调用了cgi文件,之前看文件的时候看到了这个东西的。ghidra open!!!
Link 死大头!!!
search "action"!!!
说实话,ghidra的这个伪代码看着老奇怪了,这里是判断了登陆还是升级。if下面,这里判断flag=1,最后的逻辑是将字符串格式化到acStack4456中。再往下这个地方我刚开始比较懵了,因为websGetVar程序查找表变量var,相当于获取参数。所以这里并没有往下看,而是换了个思路点。所以这个地方是判断密码的地方。本来想试试正确密码,来分析下,结果密码怎么都不对。这里解释下,因为我没有设备,是直接在官网下载的固件,所以这个密码怎么都不对,我怀疑是固件模拟的问题,就没有往下追究。他主动访问了formloginAuth.htm,在www/文件夹下并没有这个文件,所以去找下lighttpd文件分析下。ghidra open!!!
Link 死大头!!!
search "formLoginAuth"!!!
判断几个参数做了什么,userName是空的先不看,goURL是某个html文件,盲猜他是的从哪来的,action是要做什么。如果authCode不等于0,iVar2就等于整形的authCode的值。这里pcVar2=1,导致跳过了设置pcVar2 = home.html。其实在ghidra反编译的时候,好多地方不太习惯,很多地方靠函数名和字符串硬猜。看雪ID:p1yang
https://bbs.pediy.com/user-home-934060.htm
*本文由看雪论坛 p1yang 原创,转载请注明来自看雪社区
文章来源: http://mp.weixin.qq.com/s?__biz=MjM5NTc2MDYxMw==&mid=2458437312&idx=2&sn=166a0528366a6f6e15f05724e9ac4279&chksm=b18ff64a86f87f5c910d1c5f9ab0538f9d36846c574324497034eaa17781e90ef371be47a377#rd
如有侵权请联系:admin#unsafe.sh