ipTIME AX2004M (KVE-2023-0133)漏洞复现

固件安全新发布
2025-03-24 12:56
19741

ipTIME AX2004M (KVE-2023-0133)漏洞复现

漏洞概要:未授权远程代码执行

一、信息搜集

1.使用binwalk提取固件
binwalk -Me ax2004m_ml_14_190.bin 

1.png

2.使用file命令查看固件文件信息

2.png

可以看出固件文件结构是32位MIPS架构,小端模式

3.使用checksec查看文件保护机制

3.png

只开启了NX保护

二、固件模拟

首先我们考虑使用FirmAE模拟固件,然后查看并分析固件运行的进程,如果FirmAE模拟不起来,再考虑分析启动项,并使用qemu模拟。

1.使用FirmAE模拟固件

输入以下命令进行固件模拟:

sudo ./run.sh -d AX2004M ./firmwares/ax2004m_ml_14_190.bin 

4.png

浏览器访问:

5.png

固件模拟成功!

2.查看并分析进程

使用ps命令查看进程

6.png

可以看到,由htppd提供web服务。

3.检查和分析路由器主要文件

通过观察路由器文件系统的顶层结构,以及web服务相关的文件,可以发现许多cgi文件,这些预先编译好的 cgi 文件会通过 HTTP 服务守护进程执行,并且根据路由器设置主页面的 URL(http://192.168.0.1/cgi-bin/timepro.cgi?tmenu=main_frame&smenu=main ) 以及其较大的文件容量,推测核心文件是timepro.cgi,并开始对其进行分析。

查看timepro.cgi文件所在的目录:

8.png

结合AI进行分析各cgi功能:

1.认证相关
	captcha.cgi (5616 字节):可能用于生成验证码,防止登录页面的自动化攻击。
	login.cgi -> /cgibin/login-cgi/login.cgi:登录页面入口,指向子目录中的脚本,负责显示登录界面。
	login_handler.cgi (8300 字节):处理登录请求,可能负责验证用户名和密码。
	login_session.cgi (12912 字节):管理用户会话,可能生成和验证会话令牌。
	
2.下载相关
	download.cgi, download_easymesh.cgi, download_firewall.cgi, download_portforward.cgi (均为 7840 字节):大小相同,可能是同一功能的变种,用于下载配置文件、日志或特定模块的数据(如防火墙规则或端口转发设置)。
	
3.核心功能
	m.cgi (51608 字节):多个符号链接(如 net_apply.cgi、sys_apply.cgi)指向此脚本,表明它是一个多功能核心脚本,可能处理网络、系统或无线配置的变更。
	timepro.cgi (941724 字节):最大的脚本,d.cgi 链接到它,可能涉及高级管理功能。
	mesh.cgi (10920 字节):与 Mesh 网络相关,可能与 easymeshd 进程配合,管理无线 Mesh 网络。

4.网络与硬件相关
	txbf.cgi (8484 字节) 和 txbf_act.cgi -> /cgibin/txbf.cgi:可能与波束成形(Transmit 	Beamforming)相关,用于优化无线信号。
	upgrade.cgi (13000 字节):处理固件升级,负责上传和应用新的固件文件。
	
5.符号链接
	d.cgi, info.cgi, net_apply.cgi, sys_apply.cgi, wireless_apply.cgi, wol_apply.cgi:分别指向 timepro.cgi 或 m.cgi,表明这些是通用脚本的别名,用于特定功能(如网络应用、无线配置、唤醒局域网设备)。
	
6.子目录
	ddns/ 和 login-cgi/:分别是动态 DNS 和登录相关的子目录,可能包含额外的配置文件或脚本。

三、漏洞分析

未授权访问

根据漏洞作者披露,该路由器固件在验证身份验证时存在逻辑错误,漏洞点在ftext函数。

1.漏洞点分析

timepro.cgi文件导入IDA中进行分析,找到ftext函数,分析该函数的功能作用,它的主要作用是处理 Web 请求(HTTP 请求),根据用户输入的参数(通过 a2a3 传递)执行不同的操作,例如:

  • 检查用户会话和认证。
  • 处理特定的 Web 页面请求(如登录、固件状态、调试页面等)。
  • 执行系统操作(如保存配置、重置设备)。
  • 输出 HTML 或其他响应内容给浏览器。

简单来说,这是一个嵌入式设备 Web 界面的核心处理函数,根据 URL 参数(a2)和 POST 数据(a3)决定做什么,并返回相应的结果。

重点看这里:

9.png

这段代码主要用于初始化日志和进行会话认证检查,这里的处理逻辑是:

  • httpcon_check_session_url() == 1(会话有效)且 httpcon_auth(1, 1) == 0(认证失败),条件成立,return 0 ,无法进行后续操作。
  • httpcon_check_session_url() == 1(会话有效)且 httpcon_auth(1, 1) == 1(认证成功),条件不成立,可以进行后续操作。

但这里存在一个逻辑错误,如果存在httpcon_check_session_url() == 0(会话无效)的情况,那无论认证是否成功,都能进行后续操作。

所以,这里可能存在未授权漏洞,接下来要寻找会话无效是什么情况。

2.寻找会话无效情况

点进httpcon_check_session_url函数,发现该函数是个外部引用函数。

10.png

使用grep -r "httpcon_check_session_url"命令寻找该函数存在哪个二进制文件中。

11.png

因为是外部应用,所以我们将libsession.so文件用IDA打开分析,通过搜索字符串httpcon_check_session_url找到该函数。

12.png

这是一个用于检查 HTTP 请求会话的函数。它的主要作用是:

  • 检查当前请求的 URL(通过环境变量 REQUEST_URI 获取)是否与会话管理相关。
  • 返回一个布尔值(truefalse),表示请求是否需要会话检查。

简单来说,这个函数判断“这个请求是不是跟会话管理有关”。如果 URL 是空的,或者以 /sess-bin/ 开头,它返回 true;否则返回 false

也就是说,当url里面不是以/sess-bin/ 开头,那它就是会话无效情况。

3.验证漏洞

先正常登录进去,查看一下功能页面,同时打开burp抓包。

13.png

我们进入到了这样一个功能界面,接着查看抓包内容:

![14.p

试读结束,发布七天后转为公开

公开时间:2025年3月31日 12:56:59

提前解锁全文,需花费 50 积分

登录解锁全文
分享到

参与评论

0 / 200

全部评论 0

暂无人评论
投稿
签到
联系我们
关于我们