Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
asadbg — asadbg 是一个工具框架,用于协助自动化 Cisco ASA 设备的实时调试。 | Kitploit
工具/GitHubGitHub/nccgroup/asadbg
嵌入式系统安全逆向工程脚本与自动化调试器网络安全硬件安全二进制分析固件分析
GitHubnccgroup/asadbg

asadbg

asadbg 是一个工具框架,用于协助自动化 Cisco ASA 设备的实时调试。

查看仓库
7938144年前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

asadbg

初步说明:我们建议你将其作为 asatools 的一部分使用,但它也可以 独立使用。

asadbg 是一个工具框架,用于帮助自动执行 Cisco ASA 设备的实时调试, 以及通过串口/SSH 自动与 Cisco CLI 交互, 以快速执行重复性任务。

asadbg demo

  • 它封装了 gdb
  • 它支持使用 asadbg.cfg 配置文件,以方便调试不同的 版本
  • 它同时支持真实硬件和 GNS3
  • 它可选地使用 ret-sync,以便从 IDA Pro 获得更好的调试体验
  • 它支持在启动时执行额外的 gdb 脚本
  • 它提供了一些库,可用于跨多个固件版本在真实硬件上 自动化测试

主工具是 asadbg.py,它将执行大多数其他辅助脚本。 请注意,你可能需要先使用 asafw 解包固件,以获得最佳 的 asadbg 使用体验。

  • asadbg.py:用于调试 ASA 的主工具
  • asdbg_hunt.py/asadbg_rename.py:与 idahunt 一起使用的 IDA Python 脚本,用于为新目标导入符号

以下内容由 asadbg.py 自动导入,但我们提供一些 关于它们用途的信息:

  • asa_lib*.py:gdb Python 脚本,用于使用 libdlmalloc、 libptmalloc 和 libmempool。
  • asa_sync.py:gdb Python 脚本,用于使用 ret-sync
  • comm.py:一组用于通过串口、SSH、telnet 通信的函数。
  • find_lina_pid.py:使用 SSH 命令查找 lina PID
  • template_gdbinit:gdbinit 模板,由 asadbg.py 针对我们调试的每个目标 打补丁

要求

  • 仅支持 Python3
    • pip3 install pyserial paramiko
  • 已在 Linux 上进行了大量测试(但也可以在 OS X 上运行)
  • 在真实 ASA 设备的闪存或 GNS3 中配置的 ASA 模拟器上 预载固件

你首先需要修改 asadbg/env.sh 以匹配你的环境。它将 允许你定义所有脚本使用的工具路径,以及一些 与你的 ASA 环境匹配的变量。请注意,还有一个类似的 asafw/env.sh,但两个项目只需使用其中一个。我们 建议你将它添加到你的 ~/.bashrc 中:``` source /path/to/asadbg/env.sh

# 自动化调试

使用 asadbg 的主要好处之一是,你可以自动化使用模拟(GNS3)和真实 Cisco ASA 设备的操作。这可以包括一般性地自动化启动和运行各种固件与配置,也可以专门使用 gdb 自动化 `lina` 的调试过程。这主要通过 `asadbg.py` 脚本完成。其核心思路是预先在 ASA 设备的 flash 上装载你想要使用的固件和配置文件。对于每个你想要调试的固件,你可以使用类似 `asafw` 的工具来挖掘不同的符号,然后利用这些符号自动生成 gdbinit 文件。默认情况下,`asadbg.py` 会使用一个名为 `template_gdbinit` 的文件,在运行时根据数据库中存在的符号自动构建特定于版本的 gdbinit 文件。

## 快速启动真实设备(不进行调试)

你可以通过指定固件和配置文件来快速启动某个特定版本,这些文件必须已经存在于 CF 卡上。```
asadbg$ ./asadbg.py --firmware-type normal --serial-port /dev/ttyUSB0 --firmware asa802-k8.bin --config config-802

使用配置文件调试 GNS3 设备

以下示例展示了如何设置配置文件来调试 GNS3 设备。首先我们定义一个类似下方的 asadbg.cfg 配置文件。它包含从 GNS3 自身获取的、已配置防火墙的 GNS3 IP/端口。```ini [GLOBAL] gns3_host=192.168.5.1 asadb_file=asadb.json

[asav941200] version=941200 arch=gns3 rootfs_path= /home/user/_asav941-200.qcow2.extracted/rootfs gns3_port=12005 attach_gdb=yes

它还指向ASA数据库文件`asadb.json`,其中包含所需的地址。这里重要的是,`asadbg.cfg`中指定的`version=941200`和`arch=gns3`能够匹配下面`asadb.json`中的固件。同时我们指明要附加gdb。```json
{
    "ASLR": false,
    "addresses": {
        "clock_interval": 59514112,
        "socks_proxy_server_start": 22139744,
        "aaa_admin_authenticate": 418288
    },
    "fw": "asav941-200.qcow2",
    "lina_imagebase": 4194304,
    "version": "9.4.1.200",
    "arch": 64
}

现在我们开始调试,clock_interval 将被自动修补:``` asadbg$ ./asadbg.py --name asav941200 --asadbg-config asadbg.cfg [asadbg] Using config file: asadbg.cfg [asadbg] Found section: 'asav941200' in config [asadbg] Using gdb: '/usr/bin/gdb' [asadbg] Using architecture: gns3 [asadbg] Trying lina: /home/user/_asav941-200.qcow2.extracted/rootfs/asa/bin/lina [asadbg] Going to debug... [asadbg] Using GNS3 emulator 192.168.5.1:12005 [asadbg] Starting gdb now... [gdbinit_941200] Configuring paths... [gdbinit_941200] Disabling pagination... [gdbinit_941200] Connecting over TCP/IP... 0x0000003655201190 in ?? () from /home/user/_asav941-200.qcow2.extracted/rootfs/lib64/ld-linux-x86-64.so.2 [gdbinit_941200] Connected. [gdbinit_941200] Watchdog disabled [gdbinit_941200] heap debugging plugins loaded [gdbinit_941200] Additional gdb scripts loaded [gdbinit_941200] Done. (gdb) c Continuing.

## 使用配置文件调试真实设备

以下示例展示了如何设置配置文件,以通过串行控制台调试
真实的 Cisco ASA 设备。```ini
[GLOBAL]
serial_port=/dev/ttyUSB0
asadb_file=asadb.json

[asa924-gdb]
version=924
arch=32
rootfs_path=/home/user/_asa924-k8.bin.extracted/rootfs
firmware=asa924-k8-debugshell-gdbserver.bin
config=config-924
firmware_type=gdb
attach_gdb=yes

另请注意,我们需要指定一个 firmware_type,它指示固件是否 未修改、已 root、启用了串行 shell,还是已在启动时 启用了 gdb。这是因为我们将根据格式在启动时执行不同的操作。 这里我们可以看到,我们使用了一个修改过的固件 asa924-k8-debugshell-gdbserver.bin,它已在启动时启用了 gdbserver 并包含一个调试 shell。 我们在下面可以看到,当 bootrom 启动时,asadbg 会自动 中断该序列,以便加载固件和配置文件,这些文件 已在 CF 卡上。``` asadbg$ ./asadbg.py --name asa924-gdb --asadbg-config asadbg.cfg [asadbg] Using config file: asadbg.cfg [asadbg] Found section: 'asa924-gdb' in config [asadbg] Using gdb: '/usr/bin/gdb' [asadbg] Using architecture: 32 [asadbg] Trying lina: /home/user/_asa924-k8.bin.extracted/rootfs/asa/bin/lina [asadbg] Going to debug... [asadbg] Using serial port: /dev/ttyUSB0 [asadbg] Loading 'asa924-k8-debugshell-gdbserver.bin' with 'config-924'... [comm] Waiting boot... [SNIP] Platform ASA5505

Use BREAK or ESC to interrupt boot. Use SPACE to begin boot immediately. Boot interrupted.

[SNIP] rommon #0> boot asa924-k8-debugshell-gdbserver.bin cfg=config-924 Launching BootLoader... Boot configuration file contains 1 entry.

Loading asa924-k8-debugshell-gdbserver.bin........ Booting... Platform ASA5505 [SNIP] SMFW PID: 514, Starting /asa/bin/lina under gdbserver /dev/ttyS0 SMFW PID: 512, started gdbserver on member: 514//asa/bin/lina SMFW PID: 512, created member ASA BLOB, PID=514 Process /asa/bin/lina created; pid = 517 Remote debugging using /dev/ttyS0 [comm] gdb detected - boot finished. [comm] Boot should be finished now? [asadbg] Starting gdb now... [gdbinit_924] Configuring paths... [gdbinit_924] Disabling pagination... [gdbinit_924] Connecting over USB... 0xdc7e2820 in ?? () from /home/user/_asa924-k8.bin.extracted/rootfs/lib/ld-linux.so.2 [gdbinit_924] Connected. [gdbinit_924] Watchdog disabled [gdbinit_924] heap debugging plugins loaded [gdbinit_924] Additional gdb scripts loaded [gdbinit_924] Done. (gdb) c Continuing.

# 导入附加符号

asadbg 的许多部分依赖于一个数据库 `asadbg/asadb.json`,其中包含各种固件版本的符号。我们提供了一小部分现有符号,但您可以手动添加其他符号,或使用
[idahunt](https://github.com/nccgroup/idahunt)
自动添加新目标。本节将介绍具体操作方法。

## 要求

asadbg 中的 IDA Python 脚本假定 `filelock.py/ida_helper.py` 可用。由于它们直接从 IDA Python 执行,我们目前的做法是在 `asadbg/` 中创建符号链接。我们无法在仓库中真正创建它们,因为 Windows 上的符号链接与 Linux 上的不同。因此需要手动完成。

在 Linux 上:```
asadbg$ ln -s ../idahunt/ida_helper.py ida_helper.py
asadbg$ ln -s ../idahunt/filelock.py filelock.py

在 Windows 上,使用管理员权限:``` C:\asadbg> mklink filelock.py ..\idahunt\filelock.py C:\asadbg> mklink ida_helper.py ..\idahunt\ida_helper.py

我们还需要设置数据库的路径(由 `env.sh` 自动完成):```
C:\idahunt>set ASADBG_DB=C:\asadbg\asadb.json

初步分析与重命名

我们假设您已经使用例如 asafw 将所有固件提取到一个目录中,或者您只提取了 lina 文件并将它们放入一个能表明其来自哪个固件的目录结构中:``` C:\temp>tree /F Folder PATH listing Volume serial number is XXXX-XXX C:. ├───asa924-k8.bin │ lina │ ├───asa924-smp-k8.bin │ lina │ └───asav941-200.qcow2 lina

首先,你需要在 IDA 中进行初始分析。我们可以将 `--list-only` 与
任何命令一起使用,以检查该命令会得到什么结果。

注意,我们筛选了特定的 ASA 版本(9.2.4)和架构(32 位):```
C:\idahunt>idahunt.py --verbose --inputdir "C:\temp" --analyse --scripts C:\asadbg\asadbg_rename.py --filter "filters\ciscoasa.py -m 924 -M 924 -v -a 32"
[idahunt] IDA32 = C:\Program Files (x86)\IDA 6.95\idaq.exe
[idahunt] IDA64 = C:\Program Files (x86)\IDA 6.95\idaq64.exe
[idahunt] ANALYSING FILES
[idahunt] Analysing C:\temp\asa924-k8.bin\lina
[idahunt] C:\Program Files (x86)\IDA 6.95\idaq.exe -B -LC:\temp\asa924-k8.bin\lina.log C:\temp\asa924-k8.bin\lina
[ciscoasa] Skipping non 32-bit: C:\temp\asa924-smp-k8.bin\lina
[ciscoasa] Skipping version too high: C:\temp\asav941-200.qcow2\lina
[idahunt] Waiting on remaining 1 IDA instances
下载工具