admin管理员组文章数量:1630624
一、固件分析
使用AttifyOS 3.0下载(固件提取)物联网评估测试工具集成系统这个是集成了相关的工具,刚下载的话需要更新一下,root
密码是attify
,那么直接开始了,根据提供的信息,这段描述了TP-Link固件的头部信息以及固件中的几个重要部分。固件文件已经资源绑定了,没VIP可以在前往这个地址进行下载:https://github/dioos886/TP-LinkWR740
- 第一行描述了固件的版本信息、产品ID和产品版本等。
- 第二行描述了在偏移量为512的位置,存在一个gzip压缩的文件,文件名为"vmlinux.bin"。
- 第三行描述了在偏移量为1048576的位置,存在一个Squashfs文件系统,该文件系统是大端序的,使用lzma签名,版本为3.1,大小为2059306字节,包含431个索引节点,块大小为65536字节,创建日期为2010年9月13日03:29:45。
iot@attifyos ~/tools> binwalk wr740nv1_en_3_12_4_up.bin
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
0 0x0 TP-Link firmware header, firmware version: 0.0.0, image version: "", product ID: 0x0, product version: 121634817, kernel load address: 0x0, kernel entry point: 0x80002000, kernel offset: 3932160, kernel length: 512, rootfs offset: 818284, rootfs length: 1048576, bootloader offset: 2883584, bootloader length: 0
512 0x200 gzip compressed data, has original file name: "vmlinux.bin", from Unix, last modified: 2010-09-03 04:31:13
1048576 0x100000 Squashfs filesystem, big endian, lzma signature, version 3.1, size: 2059306 bytes, 431 inodes, blocksize: 65536 bytes, created: 2010-09-13 03:29:45
下载固件包:wr740nv1_en_3_12_4_up.bin,binwalk工具进行固件解包,如果没有的话需要额外安装这款工具,我还是建议直接使用这款AttifyOS 3.0集成系统,我尝试过自己装,当然整个过程不止这一款工具的,反正那时我运行工具报错到怀疑人生。
iot@attifyos ~/tools> binwalk -Me wr740nv1_en_3_12_4_up.bin
Scan Time: 2023-07-18 19:32:28
Target File: /home/iot/tools/wr740nv1_en_3_12_4_up.bin
MD5 Checksum: b45740faa17d6a5fee080e368092a05e
Signatures: 396
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
0 0x0 TP-Link firmware header, firmware version: 0.0.0, image version: "", product ID: 0x0, product version: 121634817, kernel load address: 0x0, kernel entry point: 0x80002000, kernel offset: 3932160, kernel length: 512, rootfs offset: 818284, rootfs length: 1048576, bootloader offset: 2883584, bootloader length: 0
512 0x200 gzip compressed data, has original file name: "vmlinux.bin", from Unix, last modified: 2010-09-03 04:31:13
1048576 0x100000 Squashfs filesystem, big endian, lzma signature, version 3.1, size: 2059306 bytes, 431 inodes, blocksize: 65536 bytes, created: 2010-09-13 03:29:45
Scan Time: 2023-07-18 19:32:30
Target File: /home/iot/tools/_wr740nv1_en_3_12_4_up.bin.extracted/vmlinux.bin
MD5 Checksum: 4ac922375a7a7b67d76d8bed30999f21
Signatures: 396
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
756492 0xB8B0C Certificate in DER format (x509 v3), header length: 4, sequence length: 64
1184448 0x1212C0 Certificate in DER format (x509 v3), header length: 4, sequence length: 130
1413744 0x159270 Linux kernel version 2.6.15
1421135 0x15AF4F Copyright string: "Copyright 1995-1998 Mark Adler "
1447760 0x161750 Unix path: /usr/gnemul/irix/
1449140 0x161CB4 Unix path: /usr/lib/libc.so.1
1488227 0x16B563 Neighborly text, "neighbor %.2x%.2x.%.2x:%.2x:%.2x:%.2x:%.2x:%.2x lost on port %d(%s)(%s)"
1839104 0x1C1000 gzip compressed data, maximum compression, from Unix, last modified: 2010-09-03 04:28:32
Scan Time: 2023-07-18 19:32:30
Target File: /home/iot/tools/_wr740nv1_en_3_12_4_up.bin.extracted/_vmlinux.bin.extracted/1C1000
MD5 Checksum: c2fe5065e20f09d7a745c65a43e44ab3
Signatures: 396
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
0 0x0 ASCII cpio archive (SVR4 with no CRC), file name: "/dev", file name length: "0x00000005", file size: "0x00000000"
116 0x74 ASCII cpio archive (SVR4 with no CRC), file name: "/dev/console", file name length: "0x0000000D", file size: "0x00000000"
240 0xF0 ASCII cpio archive (SVR4 with no CRC), file name: "/root", file name length: "0x00000006", file size: "0x00000000"
356 0x164 ASCII cpio archive (SVR4 with no CRC), file name: "TRAILER!!!", file name length: "0x0000000B", file size: "0x00000000"
解包内容-第一部分
以上是通过binwalk工具解包的内容,我们先看第一部分内容
- 偏移量0(十六进制0x0)处是TP-Link固件头部信息。其中包括固件版本为0.0.0,图像版本为空字符串,产品ID为0x0,产品版本为121634817。此外还包括内核加载地址为0x0,内核入口点为0x80002000,内核偏移量为3932160,内核长度为512,RootFS偏移量为818284,RootFS长度为1048576,引导程序偏移量为2883584,引导程序长度为0。
- 偏移量512(十六进制0x200)处是一个gzip压缩的文件,原始文件名为"vmlinux.bin",来源于Unix系统,最后修改时间为2010年9月3日
04:31:13。 - 偏移量1048576(十六进制0x100000)处是一个Squashfs文件系统,它使用大端序字节顺序,具有lzma签名,版本为3.1。该文件系统的大小为2059306字节,包含431个索引节点,块大小为65536字节,创建日期为2010年9月13日
03:29:45。
解包内容-第二部分
- 偏移量756492(十六进制0xB8B0C)处是一个使用DER格式的证书,版本为x509 v3。证书头部长度为4字节,序列长度为64字节。
- 偏移量1184448(十六进制0x1212C0)处是另一个使用DER格式的证书,版本为x509
v3。证书头部长度为4字节,序列长度为130字节。 - 偏移量1413744(十六进制0x159270)处是Linux内核版本号为2.6.15。
- 偏移量1421135(十六进制0x15AF4F)处是版权声明字符串,内容为"Copyright 1995-1998 Mark Adler
"。 - 偏移量1447760(十六进制0x161750)和偏移量1449140(十六进制0x161CB4)处是Unix路径字符串。分别表示路径"/usr/gnemul/irix/“和”/usr/lib/libc.so.1"。
- 偏移量1488227(十六进制0x16B563)处是文本信息,内容为"neighbor
%.2x%.2x.%.2x:%.2x:%.2x:%.2x:%.2x:%.2x lost on port %d(%s)(%s)"。 - 偏移量1839104(十六进制0x1C1000)处是一个gzip压缩的文件,采用最大压缩级别,来源于Unix系统,最后修改时间为2010年9月3日
04:28:32。
解包内容-第三部分
- 偏移量0(十六进制0x0)处是一个ASCII格式的cpio归档文件。它的文件名为"/dev",文件名长度为5字节,文件大小为0字节。
- 偏移量116(十六进制0x74)处是另一个ASCII格式的cpio归档文件。它的文件名为"/dev/console",文件名长度为13字节,文件大小为0字节。
- 偏移量240(十六进制0xF0)处是另一个ASCII格式的cpio归档文件。它的文件名为"/root",文件名长度为6字节,文件大小为0字节。
- 偏移量356(十六进制0x164)处是一个ASCII格式的cpio归档文件。它的文件名为"TRAILER!!!",文件名长度为11字节,文件大小为0字节。
解固件包的文件
firmwalker工具扫描
"firmwalker"是一个简单的bash脚本,用于搜索提取或挂载的固件文件系统。它会在提取或挂载的固件文件系统中搜索感兴趣的内容,例如:
- 搜索etc/shadow和etc/passwd文件
- 列出etc/ssl目录
- 搜索SSL相关文件,如.pem、.crt等
- 搜索配置文件
- 查找脚本文件
- 搜索其他的.bin文件
- 查找包含关键词(如admin、password、remote等)的文件
- 搜索常见的物联网设备上使用的Web服务器
- 搜索常见的二进制文件,如ssh、tftp、dropbear等
- 搜索URL、电子邮件地址和IP地址
- 实验性支持使用Shodan CLI调用Shodan API
下载工具:
iot@attifyos ~/tools> git clone https://github.com/craigz28/firmwalker.git
Cloning into 'firmwalker'...
remote: Enumerating objects: 316, done.
remote: Counting objects: 100% (4/4), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 316 (delta 0), reused 3 (delta 0), pack-reused 312
Receiving objects: 100% (316/316), 145.51 KiB | 337.00 KiB/s, done.
Resolving deltas: 100% (142/142), done.
开始固件扫描./firmwalker.sh + 解包文件的实际目录
iot@attifyos ~/t/firmwalker> chmod +x firmwalker.sh
iot@attifyos ~/t/firmwalker> ./firmwalker.sh '/home/iot/Desktop/tools/_wr740nv1_en_3_12_4_up.bin.extracted/squashfs-root'
以下是一些扫描结果的截图,内容过多不一一放了
由上面的信息可知:
- 路由器Web相关URL的格式为:
/web/userRpm/xxxxx.htm
,这可能是web服务相关的命令规范。 - 含有
passwd
和pwd相关的文件中,可以看到嵌入式web服务httpd
(从左到右看第二至第四张图都带有httpd
),部分htm文件以及其他配置文件。
查看启动项中是否存在后门服务,如telnet服务。嵌入式Linux常用启动项文件位于:etc/rc.d文件夹中。在整个过程中,只有rcS这个文件带有httpd路由启动程序,解刨一下这个文件。
#!/bin/sh
# This script runs when init it run during the boot process.
# Mounts everything in the fstab
mount -a
#mount -o remount +w /重新挂载根文件系统为可写模式。
#
# Mount the RAM filesystem to /tmp 将RAM文件系统挂载到/tmp目录。
#
mount -t ramfs -n none /tmp #将RAM文件系统挂载到/tmp目录
mount -t ramfs -n none /var #将RAM文件系统挂载到/var目录。
export PATH=$PATH:/etc/ath #将/etc/ath添加到环境变量$PATH中
#insmod /lib/modules/2.6.15/net/ag7100_mod.ko
#insmod /lib/modules/2.6.15/net/ag7240_mod.ko
#
# Set lo eth1 up
#
ifconfig lo 127.0.0.1 up #设置回环接口(lo)IP地址为127.0.0.1并启用
#ifconfig eth1 up
#
# insert netfilter/iptables modules
#
/etc/rc.d/rc.modules #执行启动脚本rc.modules,用于加载netfilter/iptables模块
#
# Start Our Router Program
#
/usr/bin/httpd & #启动名为httpd的路由器程序
echo 524288 > /proc/sys/net/ipv4/ipfrag_high_thresh #将524288写入/proc/sys/net/ipv4/ipfrag_high_thresh文件,可能是设置IPv4 IP分片高阈值的操作
跟进/usr/bin/httpd文件,作为启动程序
iot@attifyos ~/t/_/squashfs-root> find . -name 'httpd'
./usr/bin/httpd
二、逆向分析
由file信息可知用IDA32分析,根据firmwalker扫出的敏感信息可知httpd文件中含passwd、password、root、admin、upgrade等字符串。
iot@attifyos ~/t/_/s/u/bin> file httpd
httpd: ELF 32-bit MSB executable, MIPS, MIPS32 version 1 (SYSV), dynamically linked, interpreter /lib/ld-, stripped
使用IDA-32打开httpd文件后在IDA的菜单栏上选择"View"(视图),然后选择"Open Subviews"(打开子视图),再选择"Strings"(字符串)或者直接shift+F12
。打开之后在ctrl+f
搜索passwd
关键字符串
那么或者直接快捷键G
定位点00517188
根据注释的信息,它在代码中与DebugResultRpmHtm+134
位置有数据交叉引用(XREF),跟踪调用
根据跟踪passwd调用的地方,简单查看便可以很多硬编码的敏感字符串,使用F5生成伪C代码
直接F5生成伪代码,发送一段以下代码 , osteam
在我们上面刚开始的时候也看到过了,我先标注一下,这个osteam
和5up
分别账户密码,模拟固件使用后门要账户密码。
|| (v7 = (const char *)httpGetEnv(a1, “usr”), strcmp(v7, “osteam
”))
|| (v8 = (const char *)httpGetEnv(a1, “passwd”), strcmp(v8, “5up
”)) )
根据这个文件的出现,我往后面翻了一下,基本实锤这个文件是关于后门的一些信息。代码通过 httpGetEnv 函数获取环境变量 “cmd” 的值,并将其作为命令执行的输入。这可能导致恶意用户通过设置该变量来执行任意命令,从而构成安全风险。
代码调用 write 函数将命令写入名为 pty 的文件描述符中,以模拟命令的执行。伪终端(pseudo terminal)的使用可能暗示着与终端会话和命令执行相关的功能,这种功能在某些情况下可能被滥用。这段代码的逻辑如下:
- 使用
strlen
函数计算变量v6
的长度,并将结果保存在变量v9
中。 - 调用
write
函数,将v6
中的内容写入pty
文件描述符。 - 在条件语句中,检查
v6
是否包含 “ping
” 或 “cat
” 字符串,以及同时不包含 “&
” 字符。 - 如果满足条件,使用
write
函数向pty
写入一个 “&
” 字符。 - 最后,使用
write
函数向pty
写入一个换行符。
根据代码的片段,可以推测该代码是用于处理用户输入的命令,并将命令发送到 pty
文件描述符,以模拟命令的执行。其中的条件语句可能用于特定命令的处理,例如补充额外的字符或参数。
选中DebugResult
直接双击跟进
来到005171DC
往上滚动一点
来到00516FF8
这个地址,全选双击跟进httpDebugInit+5C↑o
到这后,F5生成伪代码
int httpDebugInit() #httpDebugInit函数 它的功能包括注册信号处理函数、添加一些路径和对应的处理函数,并返回一个结果
{
signal(18, doClosePty); #使用 signal 函数注册一个信号处理函数,该函数在收到信号 18 时调用 doClosePty 函数。
httpRpmConfAdd(2, "/userRpmNatDebugRpm26525557/start_art.html", &ArtRpmHtm); #调用 httpRpmConfAdd 函数,向配置列表中添加一条记录,包括路径 "/userRpmNatDebugRpm26525557/start_art.html" 和与之相关联的处理函数 ArtRpmHtm
httpRpmConfAdd(2, "/userRpmNatDebugRpm26525557/linux_cmdline.html", &CmdRpmHtm);#再次调用 httpRpmConfAdd 函数,添加另一条记录,包括路径 "/userRpmNatDebugRpm26525557/linux_cmdline.html" 和与之相关联的处理函数 CmdRpmHtm。
return httpRpmConfAdd(2, "/userRpm/DebugResultRpm.htm", DebugResultRpmHtm); #最后,调用 httpRpmConfAdd 函数,添加最后一条记录,包括路径 "/userRpm/DebugResultRpm.htm" 和与之相关联的处理函数 DebugResultRpmHtm。
}
根据代码片段以及函数命名的上下文,可以推断出这段代码与 HTTP 请求和路由器管理界面相关。函数的目的可能是初始化特定的 HTTP 路径,并将相应的处理函数与之关联,以便在请求到达时执行相应的处理逻辑。
FirmAE工具下载(这一部分亲自测试有点问题,直接下一步)
FirmAE是一个完全自动化的框架,用于进行仿真和漏洞分析。FirmAE通过五种仲裁技术显著提高了仿真成功率(从Firmadyne的16.28%提高到79.36%)。我们对来自八大主要厂商的1,124个无线路由器和IP摄像头固件镜像进行了FirmAE的测试。
git clone --recursive https://github.com/pr0v3rbs/FirmAE
./download.sh
./install.sh
下载好后,然后运行一下
!执行init.sh初始环境
sudo ./init.sh
!检查是否能模拟 - 注意目录名称
sudo ./run.sh -c tp-link '/home/iot/Desktop/tools/wr740nv1_en_3_12_4_up.bin'
!开始固件模拟 - 注意目录名称
sudo ./run.sh -r tp-link '/home/iot/Desktop/tools/wr740nv1_en_3_12_4_up.bin'
运行sudo ./init.sh
出现问题,没安装postgresql
sudo apt update #更新一下
sudo apt install postgresql #安装postgresql
初始环境
通过我的一系列操作Emmmm…搞不起来,运行sudo ./run.sh -C DIR-859 /root/DIR859_FW102b03.bin
模拟都模拟不起来,擦辣!我就不信,架不起来!
三、固件模拟
最后我换了一个工具firmware-analysis-toolkit
,给模拟起来了,也是这个系统自带的
iot@attifyos ~/t/firmware-analysis-toolkit>
./fat.py '/home/iot/Desktop/tools/firmware-analysis-toolkit'
__ _
/ _| | |
| |_ __ _ | |_
| _| / _` | | __|
| | | (_| | | |_
|_| \__,_| \__|
Welcome to the Firmware Analysis Toolkit - v0.3
Offensive IoT Exploitation Training http://bit.do/offensiveiotexploitation
By Attify - https://attify.com | @attifyme
[+] Firmware: firmware-analysis-toolkit
[+] Extracting the firmware...
[+] Image ID: 1
[+] Identifying architecture...
[+] Architecture: mipseb
[+] Building QEMU disk image...
[+] Setting up the network connection, please standby...
[+] Network interfaces: [('br0', '192.168.1.1')]
[+] All set! Press ENTER to run the firmware...
[+] When running, press Ctrl + A X to terminate qemu
[+] Command line: /home/iot/tools/firmware-analysis-toolkit/firmadyne/scratch/1/run.sh
[sudo] password for iot:
Creating TAP device tap1_0...
出现以下情况不出运行,直接用力按一下回车键
[+] Network interfaces: [('br0', '192.168.1.1')]
[+] All set! Press ENTER to run the firmware...
[+] When running, press Ctrl + A X to terminate qemu
admin admin
然后直接奔那个逆向的结果去
/userRpmNatDebugRpm26525557/linux_cmdline.htm
l 还挺别致这个后门
好了,暂时就先这样,有时间在把那个 FirmAE工具整整,看看什么情况!
版权声明:本文标题:TP-Link WR740后门分析 - 练习 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dianzi/1729025453a1183283.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论