首页
社区
课程
招聘
totolink登陆跳过,分析思路
2022-3-8 09:12 31085

totolink登陆跳过,分析思路

2022-3-8 09:12
31085

型号:X5000R

 

AX1800 无线双频千兆路由器

 

下面有分析思路,设备模拟过程比较靠近新手,师傅们可以直接跳到后面分析过程。

漏洞

img

 

登陆页面构造参数,无需密码

 

formLoginAuth.htm?authCode=1&action=login

 

可直接绕过登陆,进入后台

 

image-20220304194832878

 

image-20220304194847103

 

产生原因在lighttpd wen服务文件from_login函数中

 

image-20220304194857659

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
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分析

1
binwalk TOTOLINK_C8343R-1C_X5000R_IP04433_MT7621A_SPI_16M256M_V9.1.0u.6118_B20201102_ALL.web

image-20220305103700622

 

squashfs文件系统,uImage,LZMA压缩文件中应该也是个比较大的内容,直接使用-Me参数递归提取。

1
binwalk -Me TOTOLINK_C8343R-1C_X5000R_IP04433_MT7621A_SPI_16M256M_V9.1.0u.6118_B20201102_ALL.web

image-20220305105106760

 

里面有标准的文件系统

 

查看架构

1
binwalk ./bin/busybox

image-20220305110849531

 

mips小端序,查看其文件系统瞅瞅有没有什么东西。

 

有个工具叫firmwalker,可以自动分析文件系统,提取重要文件,我个人觉得不是特别好用。

 

我比较推荐使用vscode来做分析。

 

下面是要关注的一些地方

1
2
3
etc/ #这里会存放系统启动文件如openwrt的rcS文件
sbin/ #这里一般会存放厂商制作的功能性文件和提供web服务的文件
www/ #这里会存放一些web静态页面和后台服务文件文件

其他地方也尽量看一下,经验多了就容易清楚哪些文件是做什么的了,没经验就慢慢来。

 

这里发现了这几个文件:

 

image-20220305114448182

 

image-20220305114546035

 

image-20220305114833951

 

可以看到他使用了lighttpd 的web服务文件,

 

一般固件大概会有这几个轻量级httpd文件:lighttpd,httpd,uhppd。

 

其他的还有很多。

 

尝试使用qemu-user模拟http服务。

1
2
cp (which qemu-mipsel-static) ./
sudo chroot . ./qemu-mipsel-static ./usr/sbin/lighttpd

image-20220305115606040

 

这里的报错是需要用-f参数指定配置文件,上面已经发现了lighttpd.conf文件。

1
sudo chroot . ./qemu-mipsel-static ./usr/sbin/lighttpd -f ./lighttp/lighttpd.conf

image-20220305120451059

 

没有这个文件,这里我们先去把这个路径改一下,在lighttpd.conf中

 

image-20220305120913434

 

把它改到固件的系统文件中./var/run/lighttpd.pid,并且去创建这个文件。

 

运行

 

image-20220305121237702

 

这里虽然正常启动,但是如果不挂载文件夹,还是挺多问题的,所以我更倾向使用系统模式。

 

这里系统模式不做赘述,我写了个脚本,可以很方便启动。

 

核心文件比较大,大家按文件自行下载

 

https://people.debian.org/~aurel32/qemu/mips/

 

我把脚本放链接放这里

 

https://gitee.com/p1piyang/backward-analysis/tree/master/

 

qemu启动

1
sudo ./start-mipsel.sh

sudo 启动

1
ifconfig eth0 192.168.5.12 up #qemu中设置ip,qemu里边

将文件系统上传

1
scp -r squashfs-root/ root@192.168.5.12:/root/  #在主机

挂载

1
chroot ./squashfs-root/ /bin/sh

启动

1
./user/sbin/lighttpd -f ./lighttp/lighttpd.conf

image-20220307093821751

分析

刚开始是想直接去分析lighttpd的。随手登陆了一下,看了下包。

我个人浅薄的经验,不要单纯去无目的的分析某个应用,我之前犯过这种错误,太容易对着一个程序漫无目的的乱逛,希望你没有这种情况。

 

这里明显可以看到调用了cgi文件,之前看文件的时候看到了这个东西的。

 

image-20220307181918264

 

可以去分析下这个文件。

1
2
3
4
5
ghidra open!!!
 
Link 死大头!!!
 
search "action"!!!

image-20220307182940789

 

action=login,交叉引用,看一下。

 

image-20220307183416764

 

说实话,ghidra的这个伪代码看着老奇怪了,这里是判断了登陆还是升级。

 

image-20220307184521351

 

if下面,这里判断flag=1,最后的逻辑是将字符串格式化到acStack4456

 

image-20220307184714453

 

再往下这个地方我刚开始比较懵了,因为websGetVar程序查找表变量var,相当于获取参数。所以这里并没有往下看,而是换了个思路点。

 

这里知道了他是对登陆做了个判断。

 

去查找登陆的请求参数

 

image-20220307185324712

 

image-20220307185727561

 

发现了这么个地方。

 

根据登陆的包。

 

image-20220307185014268

 

发现他返回了一串地址。并且主动访问了这串地址。

 

image-20220307185111026

 

所以这个地方是判断密码的地方。本来想试试正确密码,来分析下,结果密码怎么都不对。

 

这里解释下,因为我没有设备,是直接在官网下载的固件,所以这个密码怎么都不对,我怀疑是固件模拟的问题,就没有往下追究。

 

他主动访问了formloginAuth.htm,在www/文件夹下并没有这个文件,所以去找下lighttpd文件分析下

1
2
3
4
5
ghidra open!!!
 
Link 死大头!!!
 
search "formLoginAuth"!!!

image-20220307191251386

 

跟进from_Login函数

 

image-20220307191351213

 

这里就发现了参数处理

 

image-20220307191700270

 

判断几个参数做了什么,userName是空的先不看,goURL是某个html文件,盲猜他是的从哪来的,action是要做什么。

 

所以现在要看一下authCode

 

如果authCode不等于0,iVar2就等于整形的authCode的值。

 

往下分析。

 

image-20220307192755810

 

这里改成1之后直接,跳过了这个判断。

 

但是只吧这个改为1之后还是返回到登陆界面。

 

image-20220307193539199

 

这里pcVar2=1,导致跳过了设置pcVar2 = home.html

 

所以我猜测goUrl参数不是从哪来,而是从哪去。

 

最后发现果然是哦。

 

其实在ghidra反编译的时候,好多地方不太习惯,很多地方靠函数名和字符串硬猜。

 

希望师傅们多多指导嘿嘿。


[培训]《安卓高级研修班(网课)》月薪三万计划

最后于 2022-3-11 10:50 被p1yang编辑 ,原因: 内容有不清晰
收藏
点赞7
打赏
分享
打赏 + 150.00雪花
打赏次数 1 雪花 + 150.00
 
赞赏  Editor   +150.00 2022/04/11 恭喜您获得“雪花”奖励,安全圈有你而精彩!
最新回复 (11)
雪    币: 19737
活跃值: (5320)
能力值: (RANK:445 )
在线值:
发帖
回帖
粉丝
胡一米 3 2022-3-8 10:47
2
0
不错的0day!!!
Link 死大头!!!
雪    币: 5228
活跃值: (11659)
能力值: ( LV12,RANK:312 )
在线值:
发帖
回帖
粉丝
一半人生 5 2022-3-8 13:47
3
0
雪    币: 15685
活跃值: (12438)
能力值: ( LV15,RANK:595 )
在线值:
发帖
回帖
粉丝
evilpan 13 2022-3-9 17:18
4
0
直接把 Host 头改成 'A'*4096 试试 
就光截图里的代码就看到好几个漏洞
雪    币: 1199
活跃值: (2709)
能力值: ( LV3,RANK:25 )
在线值:
发帖
回帖
粉丝
Endali 2022-3-11 09:01
5
0
感谢,学到一些东西
雪    币: 370
活跃值: (1609)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
p1yang 1 2022-3-11 09:52
6
0
evilpan 直接把 Host 头改成 'A'*4096 试试 [em_4] 就光截图里的代码就看到好几个漏洞
后续测试确实老多问题了,所以我个人觉得这款路由器太适合新手了,代码稀烂
雪    币: 3473
活跃值: (5980)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
e*16 a 2 2022-3-19 11:00
7
0
师傅,请问水星路由器适合iot新手嘛?我快被折磨烂了
雪    币: 3473
活跃值: (5980)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
e*16 a 2 2022-3-19 11:36
8
0
evilpan 直接把 Host 头改成 'A'*4096 试试 [em_4] 就光截图里的代码就看到好几个漏洞
师傅请问水星路由器适合iot的新手嘛,感觉和其他品牌路由器比起来好难哇
雪    币: 370
活跃值: (1609)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
p1yang 1 2022-3-21 11:20
9
0
e*16 a 师傅,请问水星路由器适合iot新手嘛?我快被折磨烂了
我手里的一个水星的事rtos,还没有调试串口,太痛苦了,想找某个目标的话可以试试先去看看他的拆机,有没有比较方便的串口,然后是一些文章,看下他是什么系统
雪    币: 3473
活跃值: (5980)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
e*16 a 2 2022-3-22 14:26
10
0
p1yang 我手里的一个水星的事rtos,还没有调试串口,太痛苦了,想找某个目标的话可以试试先去看看他的拆机,有没有比较方便的串口,然后是一些文章,看下他是什么系统
我也是水星,有uart,但是用secureCRT连上之后,需要输入用户名和密码,我去固件里看/etc/passwd和/etc/shadow文件发现只有root用户的账号和密码可以用,但是密码被md5加密了,爆破不出来,方便加下我嘛?向师傅学习学习。qq:2218827807
雪    币: 3825
活跃值: (5433)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
badboyl 2 2022-5-8 13:38
11
0
e*16 a 我也是水星,有uart,但是用secureCRT连上之后,需要输入用户名和密码,我去固件里看/etc/passwd和/etc/shadow文件发现只有root用户的账号和密码可以用,但是密码被md5加 ...
https://bbs.pediy.com/thread-268475.htm
雪    币: 86
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
庄周恋蝶恋花 2022-8-6 08:01
12
0
想问师傅,我环境搭好的时候会卡在cgi判断这里,导致登录不进去 请问师傅有碰到过吗0.0........
游客
登录 | 注册 方可回帖
返回