PT926G从固件提取到gdbserver调试连接与后门漏洞的发现

固件提取gdb调试后门漏洞
2025-07-25 15:18
18067

固件准备与提取

提取前准备

1.在硬件提取之前,进行一个小的设备准备

1.jpg

FT232模块USB转TTL

TTL电平信号的高电平通常为3.3V或5V

通过进行URAT串口连接进行调试

Uart: 在嵌入式开发中有很广泛的应用,其中之一就是开发板的固件烧录(交互)功能。在常见的一些IOT设备中,它的作用主要是厂商预留的一些调试接口,一般可以通过跳线的方式连接这些uart串口,实现IOT设备的日志输出,固件升级降级等功能,有些还会开放根目录与u-boot的访问权限

TTL电平信号的高电平通常为3.3V或5V(书上内容用异步收发传输器,一般都嵌入在芯片中,为了方便调试,大部分物联网设备都会把URAT引脚引到PCB板上。

如下所示,四个引脚分别是VCC,GND,TX,RX.(大部分情况下,引脚一般不会标注出来)

2.jpg

VCC:供电引脚,一般是3.3V或5V(不接)

GND:接地引脚

RX:接收数据 TX:发送数据

通过FT232进行连接GND接地引脚相互连接,而RX和TX因为一个是接收数据一个是发送数据,所以到转换器上连接的情况是RX-TX TX-RX这样进行连接

标注情况下就是直接在PCB版上直接进行焊接直接连接
未标注情况下
板子上的URAT串口是不进行对GND什么的进行编译,在此种情况下需要使用万用表对串口进行识别

1.首先把万用表档位调到导通档位,这样的情况下检测出GND接口(导通情况下,万用表都会给出反应)

2.然后给该pcb板接通电源,一边接地一边进行电压检测(万用表档位改到20v)当测量到VCC引脚时,电压会稳定在3.3V或5V附近

3.剩下两个口就是rx和tx两个口,当如果设备rx与转换器的rx连接之后

在软件MoBaXterm内参数不会加载

当如果串口与转换器连接正常,搜索编辑系统环境变量

3.png

4.png

5.png
到这里有个com4,接下来打开软件

6.png

7.png

在这里的speed(波特率)一般速度都为115200,也有部分老的设备为9600,57600,在这里我们假设一次给一个错的波特率,在这里有乱码读进来!

8.png
正常状态下是这样使用uboot引导程序加载进来

9.png
在输入光猫背后的用户名名和密码之后直接进入了shell页面ps看一下进程

10.png

我们看到了uhttp,web服务在的文件夹地址,但是此时有个比较特殊的情况,我们真的进来之后发现,该文件并不存在

11.png

使用命令查找一下,发现我们的服务是起在了opt下面的usr下面,所以rootfs才是我们要的这套文件系统

find / -name uhttpd

12.png

通过查找端口使用情况我们发现使用了80,和8080这两个端口,起了两套服务

13.png
本次使用的设备比较特殊,存在有usb插口,此时提取固件可以直接cp走,也可以是把我们要的固件打包成tar.gz格式的文件打包进硬盘

实体设备和模拟的区别思考

我们通常进行的固件模拟,是通过系统级模拟来重建设备运行所需的整体环境,使固件能够在模拟的设备环境中运行。
但如果我们手中有真实的实体设备,就不需要再通过模拟环境来运行固件,因为实体设备本身就具备固件运行所需的完整硬件和系统环境,我们只需直接在其上进行调试即可。

gdbserver连接前置准备

我们要进行远程调试,就需要在虚拟机中使用gdb和在对应的目标设备中存在gdbserver接收调试信息

本身嵌入式设备基本上都没有,这时通过我们提取的固件确定文件busybox的文件信息来匹配所需要的gdbserver给实体设备传输过去。

通过桥接网络,将本地,虚拟机,以及实体设备的网络都配置在一个网段下,通过在虚拟机上起一个http服务,将gdbserver匹配的版本下载进去

14.png

15.png

通过更改虚拟机的网络设置,将三端都设置在一个网段下成功ping通就可以在虚拟上起一个http服务,将需要的gdbserver传到固件里

16.png
通过查看busybox的文件信息发现,适合的为

gdbserver-7.12-mipsel-mips32rel2-v1-sysv

17.png

18.png

通过起一个http服务在固件中利用wget将gdbserver传输进来

python -m  http.server
wget 192.168.1.2:8000/gdbserver-7.12-mips-mips32rel2-v1-sysv

19.png

20.png

实体调试与后门发现

给装载进的gdbserver 增加权限

chmod +x

增加完可执行文件之后进入到web服务所在的目录

查看网卡,使用attch给进程增加个1234端口用于远程调试

21.png

在虚拟机上使用pwndbg 将uhttp起来

pwndbg  uhttpd
set architecture mips
set endian big 
set sysroot lib/
set solb_serach-path lib/
target remote 192.168.1.1:1234

22.png

通过IDA对该二进制文件去进行分析,去搜索password 字符串,发现这里面并没有登录逻辑,只是单纯的起了web服务

通过搜索脚本去对login 和password 字符串搜索,定位到有一个单独的二进制文件login

23.png

第一次看到login还有单独二进制文件的,对这个单独的二进制文件进行分析

进入登录验证逻辑很清晰看到这里有个特殊的条件账户

24.png

这个if函数的逻辑很简单,通过检查是否在/tmp目录下存在debug这个文件,存在并且用户名是diag709394就可以调用下面这个sub_400E94(0, 0, 0)函数
在此时需要通过UART进入shell页面查看是否有这个文件,如果没有就touch一个debug文件去进行验证一下这个逻辑
进入到shell页面下,查看是否tmp目录下是否有这个文件(在这里它确实没有,太可惜了)
微信图片_20250725162144.png

先尝试这个逻辑是否能用,直接login,可以看到下下面此时这个用户名并不能用

47d94c45e49260b5607af12dcf1f1e54_.png

我们尝试在touch一个文件在tmp目录下,然后在尝试使用这个特殊账户,可以在下面很清晰的看到,没有了密码验证,直接进入shell
a2fb05042c743b4b5ee6a6ee86af54a9_.png

进入到条件账户之后可以进入的函数,就可以看到这是一个特殊的调试界面,可以非常肯定这是一个厂家预留的后门调试账户

25.png

分享到

参与评论

0 / 200

全部评论 4

KDEV的头像
这份指南堪称物联网设备逆向分析的典范!从硬件串口识别的万用表实操技巧,到固件提取的文件系统定位,每一步都清晰具体,小白也能轻松上手。gdbserver 调试环节更是干货满满,架构匹配、网络配置、远程连接的细节毫无保留,完美解决了跨平台调试的痛点。最精彩的是后门漏洞分析,从二进制逆向到触发验证逻辑缜密,将厂商预留后门的原理与危害讲得透彻易懂。全程实操🤬拉满,是物联网安全学习者不可多得的实战教材!
2025-08-04 14:16
Aiyflowers的头像
nb呀
2025-07-29 23:51
 meigui的头像
大佬!!!
2025-07-27 15:33
kris的头像
学习了!!!
2025-07-26 00:37
投稿
签到
联系我们
关于我们