debug router
This commit is contained in:
parent
4c83566dbd
commit
2f3aa24e08
@ -10,17 +10,15 @@ categories:
|
|||||||
---
|
---
|
||||||
|
|
||||||
# 0x00 背景与简介
|
# 0x00 背景与简介
|
||||||
--------------
|
|
||||||
在分析嵌入式设备的固件时,只采用静态分析方式通常是不够的,你需要实际执行你的分析目标来观察它的行为。在嵌入式Linux设备的世界里,很容易把一个调试器放在目标硬件上进行调试。如果你能在自己的系统上运行二进制文件,而不是拖着硬件做分析, 将会方便很多,这就需要用QEMU进行仿真。
|
在分析嵌入式设备的固件时,只采用静态分析方式通常是不够的,你需要实际执行你的分析目标来观察它的行为。在嵌入式Linux设备的世界里,很容易把一个调试器放在目标硬件上进行调试。如果你能在自己的系统上运行二进制文件,而不是拖着硬件做分析, 将会方便很多,这就需要用QEMU进行仿真。
|
||||||
虽然QEMU在模拟核心芯片组包括CPU上都做的很不错,但是QEMU往往不能提供你想运行的二进制程序需要的硬件。最常见问题是在运行系统服务,如Web服务器或UPnP守护进程时,缺乏NVRAM。解决方法是使用nvram-faker库拦截由libnvram.so提供的nvram_get()调用。即使解决了NVRAM问题,该程序还可能会假设某些硬件是存在的,如果硬件不存在,该程序可能无法运行,或者即便它运行了,行为可能也与在其目标硬件上运行时有所不同。针对这种情况下,我认为有三种解决方法:
|
虽然QEMU在模拟核心芯片组包括CPU上都做的很不错,但是QEMU往往不能提供你想运行的二进制程序需要的硬件。最常见问题是在运行系统服务,如Web服务器或UPnP守护进程时,缺乏NVRAM。解决方法是使用nvram-faker库拦截由libnvram.so提供的nvram_get()调用。即使解决了NVRAM问题,该程序还可能会假设某些硬件是存在的,如果硬件不存在,该程序可能无法运行,或者即便它运行了,行为可能也与在其目标硬件上运行时有所不同。针对这种情况下,我认为有三种解决方法:
|
||||||
1. 修补二进制文件。这取决于期望什么硬件,以及它不存在时的行为是什么。
|
1. 修补二进制文件。这取决于期望什么硬件,以及它不存在时的行为是什么。
|
||||||
2. 把复杂的依赖于硬件的系统服务拆分成小的二级制文件。如跳过运行Web服务器,仅仅从shell脚本运行cgi二进制文件。因为大多数cgi二进制文件将来自Web服务器的输入作为标准输入和环境变量的组合,并通过标准输出将响应发送到Web服务器。
|
2. 把复杂的依赖于硬件的系统服务拆分成小的二级制文件。如跳过运行Web服务器,仅仅从shell脚本运行cgi二进制文件。因为大多数cgi二进制文件将来自Web服务器的输入作为标准输入和环境变量的组合,并通过标准输出将响应发送到Web服务器。
|
||||||
3. 拿到设备的shell,直接在真机上进行调试,这是最接近真实状况的方法。
|
3. 拿到设备的shell,直接在真机上进行调试,这是最接近真实状况的方法。
|
||||||
|
|
||||||
|
--------------
|
||||||
|
|
||||||
# REF
|
# REF
|
||||||
------------
|
|
||||||
**综合:**
|
**综合:**
|
||||||
[国外大神的博客](https://shadow-file.blogspot.com/2015/01/dynamically-analyzing-wifi-routers-upnp.html)
|
[国外大神的博客](https://shadow-file.blogspot.com/2015/01/dynamically-analyzing-wifi-routers-upnp.html)
|
||||||
[通过QEMU和IDAPro远程调试设备固件](https://wooyun.js.org/drops/%E9%80%9A%E8%BF%87QEMU%20%E5%92%8C%20IDA%20Pro%E8%BF%9C%E7%A8%8B%E8%B0%83%E8%AF%95%E8%AE%BE%E5%A4%87%E5%9B%BA%E4%BB%B6.html)
|
[通过QEMU和IDAPro远程调试设备固件](https://wooyun.js.org/drops/%E9%80%9A%E8%BF%87QEMU%20%E5%92%8C%20IDA%20Pro%E8%BF%9C%E7%A8%8B%E8%B0%83%E8%AF%95%E8%AE%BE%E5%A4%87%E5%9B%BA%E4%BB%B6.html)
|
||||||
@ -45,10 +43,9 @@ categories:
|
|||||||
[《家用路由器0day漏洞挖掘》部分案例](https://ray-cp.github.io/archivers/router_vuln_book_note)
|
[《家用路由器0day漏洞挖掘》部分案例](https://ray-cp.github.io/archivers/router_vuln_book_note)
|
||||||
[TP-LINK WR941N路由器研究](https://paper.seebug.org/448/)
|
[TP-LINK WR941N路由器研究](https://paper.seebug.org/448/)
|
||||||
|
|
||||||
|
------------
|
||||||
|
|
||||||
# 0x01 基础条件
|
# 0x01 基础条件
|
||||||
----------
|
|
||||||
- 一系列的工具,包括:
|
- 一系列的工具,包括:
|
||||||
**binwalk** 帮助你解包固件
|
**binwalk** 帮助你解包固件
|
||||||
**buildroot** mips交叉编译环境帮助你在x86平台下编译mips架构的目标程序 https://xz.aliyun.com/t/2505#toc-6
|
**buildroot** mips交叉编译环境帮助你在x86平台下编译mips架构的目标程序 https://xz.aliyun.com/t/2505#toc-6
|
||||||
@ -62,10 +59,9 @@ categories:
|
|||||||
在qemu系统模式下,需要模拟整个计算机系统
|
在qemu系统模式下,需要模拟整个计算机系统
|
||||||
|
|
||||||
|
|
||||||
|
----------
|
||||||
|
|
||||||
# 0x02 qemu-用户模式
|
# 0x02 qemu-用户模式
|
||||||
----------
|
|
||||||
在user mode下使用qemu执行程序有两种情况,一是目标程序为**静态链接**,那么可以直接使用qemu。另一种是目标程序依赖于**动态链接**库,这时候就需要我们来**指明库的位置**,否则目标程序回到系统`/lib`文件下寻找共享库文件。
|
在user mode下使用qemu执行程序有两种情况,一是目标程序为**静态链接**,那么可以直接使用qemu。另一种是目标程序依赖于**动态链接**库,这时候就需要我们来**指明库的位置**,否则目标程序回到系统`/lib`文件下寻找共享库文件。
|
||||||
在 *《揭秘家用路由器0day》* 这本书里面,他给出的方法是:
|
在 *《揭秘家用路由器0day》* 这本书里面,他给出的方法是:
|
||||||
```shell
|
```shell
|
||||||
@ -145,10 +141,9 @@ miniupnpd[7687]: iptc_init() failed : iptables who? (do you need to insmod?)
|
|||||||
miniupnpd[7687]: Failed to init redirection engine. EXITING
|
miniupnpd[7687]: Failed to init redirection engine. EXITING
|
||||||
```
|
```
|
||||||
|
|
||||||
|
-----------
|
||||||
|
|
||||||
# 0x03 qemu-系统模式
|
# 0x03 qemu-系统模式
|
||||||
-----------
|
|
||||||
系统模式命令格式:`$qemu system-mips [option][disk_image]`
|
系统模式命令格式:`$qemu system-mips [option][disk_image]`
|
||||||
|
|
||||||
## MIPS系统网络配置
|
## MIPS系统网络配置
|
||||||
@ -203,10 +198,9 @@ $ sudo ifup br0
|
|||||||
|
|
||||||
我自闭了,ubuntu18根本没法联网,于是我用了ubuntu14.0
|
我自闭了,ubuntu18根本没法联网,于是我用了ubuntu14.0
|
||||||
|
|
||||||
|
------------
|
||||||
|
|
||||||
# 0x04 在mips虚拟机中调试
|
# 0x04 在mips虚拟机中调试
|
||||||
------------
|
|
||||||
现在通过上面的配置我得到了这样一台虚拟机,并通过ssh连接上去。
|
现在通过上面的配置我得到了这样一台虚拟机,并通过ssh连接上去。
|
||||||
```shell
|
```shell
|
||||||
root@debian-mipsel:/home/user/mi_wifi_r3_112# ifconfig
|
root@debian-mipsel:/home/user/mi_wifi_r3_112# ifconfig
|
||||||
@ -298,11 +292,10 @@ root@debian-mipsel:/home/user/mi_wifi_r3_112# daemon(): No such file or director
|
|||||||
但是,我们不是可以拿到路由器的shell吗!干嘛还要用qemu模拟再调试,直接上真机!
|
但是,我们不是可以拿到路由器的shell吗!干嘛还要用qemu模拟再调试,直接上真机!
|
||||||
|
|
||||||
|
|
||||||
|
---------------
|
||||||
|
|
||||||
|
|
||||||
# 0x05 设备上调试程序
|
# 0x05 设备上调试程序
|
||||||
---------------
|
|
||||||
> 1、有shell权限
|
> 1、有shell权限
|
||||||
> 2、有静态编译的gdbserver或者gdb
|
> 2、有静态编译的gdbserver或者gdb
|
||||||
>
|
>
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
padding-top: 40px;
|
padding-top: 40px;
|
||||||
}
|
}
|
||||||
|
|
||||||
@media (max-width: 767px) {
|
@media (max-width: 700px) {
|
||||||
.posts-expand {
|
.posts-expand {
|
||||||
margin: 0 20px;
|
margin: 0 20px;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user