manop55555/abcpwn

GitHub: manop55555/abcpwn

一个原生 C++ 二进制漏洞利用工具包,提供离线的静态分析、ROP 搜索、shellcode 和格式化字符串 payload 生成等漏洞利用原语构建能力。

Stars: 2 | Forks: 0

# abcpwn ``` P W ┌─┐┌┐ ┌─┐┌─┐┬ ┬┌┐┌ N ├─┤├┴┐│ ├─┘│││││││ ___|___ ┴ ┴└─┘└─┘┴ └┴┘┘└┘ |A| |B| binary exploitation toolkit · v0.1.0 |C| |0| static analysis, ROP gadget search, shellcode, |1| format-string primitives, glibc heap helpers, |1| seccomp BPF analysis, libc fingerprinting, GOT/PLT |0| inspection - one native C++ binary, offline by \ / default. no telemetry. no auto-update. ' ``` [![CI](https://static.pigsec.cn/wp-content/uploads/repos/cas/ad/ad5834178f7599af9fdda11629d49cae07f2997beec49821b2920eff5bfd50e7.svg)](https://github.com/manop55555/abcpwn/actions/workflows/ci.yml) [![CodeQL](https://static.pigsec.cn/wp-content/uploads/repos/cas/53/539e9a6bf48ad24469a4363bff3aa68124154549e26592783d3d8577f2acbbfc.svg)](https://github.com/manop55555/abcpwn/actions/workflows/codeql.yml) [![Sanitizers](https://static.pigsec.cn/wp-content/uploads/repos/cas/a0/a03da652f279f521df6feb043d0dae64e168694c5dc6a4a05b9d1e49785c427b.svg)](https://github.com/manop55555/abcpwn/actions/workflows/sanitizers.yml) [![License: Apache 2.0](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](LICENSE) [![C++20](https://img.shields.io/badge/C%2B%2B-20-blue.svg)](https://en.cppreference.com/w/cpp/20) [![Release](https://img.shields.io/badge/release-v0.1.0-blue.svg)](https://github.com/manop55555/abcpwn/releases) ## 概述 abcpwn 是一个用于二进制漏洞利用的本地 C++ 命令行工具包。它 提供了离线分析和漏洞利用原语生成 —— 包括 ELF/PE/Mach-O 检查、ROP gadget 搜索、格式化字符串 payload、shellcode、glibc heap 以及 seccomp 辅助工具 —— 所有这些都包含在单个静态自包含二进制文件中。它 仅动态链接系统 libc/libm;第三方库 (LIEF、Capstone、CLI11、nlohmann/json、spdlog、PicoSHA2)均被静态 打包。默认情况下,它不进行任何网络调用,不收集任何遥测数据,并且 绝不执行其分析的二进制文件。 ## 目录 - [安装](#installation) - [快速开始](#quick-start) - [命令](#commands) - [使用示例](#usage-examples) - [Process-driver 集成](#process-driver-integration) - [支持的平台](#supported-platforms) - [授权使用](#authorized-use) - [安全性](#security) - [文档](#documentation) - [贡献](#contributing) - [许可证](#license) ## 安装 Linux x86_64 的预编译二进制文件: ``` curl -LO https://github.com/manop55555/abcpwn/releases/latest/download/abcpwn-linux-x86_64.tar.gz curl -LO https://github.com/manop55555/abcpwn/releases/latest/download/SHA256SUMS-linux-x86_64 sha256sum -c SHA256SUMS-linux-x86_64 --ignore-missing tar -xzf abcpwn-linux-x86_64.tar.gz cd abcpwn-linux-x86_64 sudo install -m 755 abcpwn /usr/local/bin/abcpwn ``` 该压缩包还附带了 man page 和 shell 自动补全。有关完整的 安装布局和从源码构建的信息,请参阅 [BUILDING.md](BUILDING.md)。 每个版本都通过 cosign 进行无密钥签名,并包含 CycloneDX SBOM 和 SLSA 构建来源证明;在安装之前请验证它们 (参见 [安全性](#security))。 ## 快速开始 每个命令都针对本地文件离线运行。请将 `./target` 替换为 正在分析的二进制文件。 ``` abcpwn info ./target # mitigations report (PIE/RELRO/NX/canary) abcpwn syms ./target --filter main # symbols with addresses abcpwn cyclic 200 # de Bruijn pattern abcpwn cyclic --find laaa # offset of a faulting value abcpwn pack 0xdeadbeef # little-endian packing abcpwn gadget ./target --depth 4 # ROP gadget search abcpwn fmt --write 0x404018=0xdeadbeef --arg-position 6 # format-string payload abcpwn --format json info ./target | jq .findings # machine-readable output ``` ## 命令 abcpwn 将其子命令按功能分组展示。默认使用美观的输出; `--format json` 会输出用于脚本的结构化封装。 | 分组 | 命令 | |-----------------|---------------------------------------------------------------------| | 信息侦察 | `info`, `syms`, `strings`, `search`, `hash` | | 编码 | `pack`, `unpack`, `hex`, `unhex`, `b64`, `xor`, `errno`, `signal`, `constgrep` | | 反汇编 | `disasm`, `phd` | | 模式生成 | `cyclic` | | ROP | `gadget`, `rop`, `one-gadget` | | 专项利用 | `srop`, `ret2dl`, `dynelf`, `aslr-bypass` | | Shellcode | `shellcode` | | 格式化字符串 | `fmt` | | GOT / PLT | `got` | | 堆 | `heap`, `safe-link` | | 文件 / C++ | `iofile`, `vtable` | | 沙箱 | `seccomp` | | 工作流 | `pwninit`, `template`, `diff`, `patch` | 汇编:`asm` 需要 Keystone 构建变体;Apache-2.0 二进制文件 会返回 `FeatureDisabled`(exit 4)。反汇编(`disasm`)始终 可用。 完整的参考文档位于 [docs/COMMANDS.md](docs/COMMANDS.md)。 ## 使用示例 ### 信息侦察 ``` abcpwn info ./target # format, arch, and mitigations abcpwn syms ./target --filter main # .dynsym + .symtab symbols with addresses abcpwn search ./target '/bin/sh' # locate bytes; reports file offset, vaddr, section ``` ### 编码 ``` abcpwn pack 0xcafebabe --width 4 --be # pack an integer to raw bytes abcpwn errno 13 # EACCES -> name and description abcpwn xor deadbeef --key 41 # XOR a hex buffer with a key ``` ### 反汇编 ``` abcpwn disasm 4831ff48c7c03c0000000f05 --arch x86_64 # decode hex bytes abcpwn phd ./target --length 64 # hex dump with offsets ``` ### 模式生成 ``` abcpwn cyclic 200 # generate a de Bruijn pattern abcpwn cyclic --find laaa # report the offset of a 4-byte subsequence ``` ### ROP ``` abcpwn gadget ./target --depth 4 --max-results 200 # search gadgets abcpwn rop ./target --syscall 59 \ --syscall-arg 0x404020 --syscall-arg 0 --syscall-arg 0 # execve syscall chain abcpwn one-gadget ./libc.so.6 # locate /bin/sh offsets ``` ### 专项利用 ``` abcpwn srop --arch x86_64 --rip 0x4011aa --rsp 0x404300 # build an SROP frame abcpwn aslr-bypass --brute-force --entropy-bits 28 # brute-force estimate ``` ### Shellcode ``` abcpwn shellcode --preset sh --arch x86_64 # /bin/sh shellcode abcpwn shellcode --preset sh --arch x86_64 --bad-chars 000a # avoid bad bytes ``` ### 格式化字符串 ``` abcpwn fmt --find-offset 'AAAA%x.%x.%x.%x' # find the arg index abcpwn fmt --write 0x404020=0x4011aa --arg-position 6 # build a %hn payload ``` ### GOT / PLT ``` abcpwn got ./target --symbol puts # GOT slot and PLT stub address ``` ### 堆 ``` abcpwn heap tcache-poison --libc-version 2.34 # describe the primitive abcpwn safe-link 0x404300 0x55aabbcc # safe-linking encode ``` ### 文件 / C++ ``` abcpwn iofile fsop-exec --libc-version 2.34 # FSOP layout abcpwn vtable ./target --list # list C++ vtables ``` ### 沙箱 ``` abcpwn seccomp dump ./target # locate and disassemble an embedded BPF filter ``` ### 工作流 ``` abcpwn template ret2libc ./target -o solve.py # emit a solve skeleton abcpwn diff ./before ./after # byte diff with section context abcpwn pwninit ./target # stage a challenge workspace ``` ## Process-driver 集成 abcpwn 生成确定性的离线产物 —— 模式、偏移量、 gadget、打包数据、格式化字符串 payload。连接并驱动 目标是诸如 pwntools 之类的 process driver 的工作;abcpwn 的输出 可以直接输入到其中: ``` import subprocess from pwn import process, p64 offset = int(subprocess.check_output(["abcpwn", "cyclic", "--find", "laaa"])) io = process("./target") io.sendline(b"A" * offset + p64(0x401234)) io.interactive() ``` ## 支持的平台 | OS | 架构 | 状态 | |-------|--------|--------------------------------| | Linux | x86_64 | 一级支持(预编译二进制文件) | | WSL2 | x86_64 | 一级支持(使用 Linux 二进制文件)| Linux aarch64 和 macOS (arm64/x86_64) 从源码构建;请参阅 [BUILDING.md](BUILDING.md)。不支持原生 Windows(请使用 WSL2), 但可以从 Linux 检查 Windows PE 二进制文件。 ## 授权使用 abcpwn 旨在用于授权的安全工作:二进制漏洞利用 研究、夺旗赛(CTF)、教学,以及您已获得 明确许可的渗透测试。它离线分析二进制文件并构建 漏洞利用原语;它不会攻击远程系统,也不会 执行它所检查的目标。 您应对自己的使用方式负责。将这些技术应用于 您不拥有或未获授权测试的系统可能是违法的。 用于未经授权访问的工具受法律管辖,例如德国的 StGB 第 202c 条、英国 1990 年的《计算机滥用法》以及 美国的《计算机欺诈和滥用法》。使用前请查阅您所在 司法管辖区的法律。 abcpwn 在 Apache License 2.0 下“按原样”提供,不提供任何形式的保证 (参见 [LICENSE](LICENSE)。作者对 因其使用而产生的任何损害或法律后果不承担责任。 ## 安全性 每个版本都提供一个 `SHA256SUMS-linux-x86_64` 校验和文件、一个 cosign 无密钥签名(`.sig` 和 `.pem`)、一个 CycloneDX SBOM,以及一个 SLSA 构建来源证明。在安装之前请验证归档文件: ``` cosign verify-blob \ --certificate abcpwn-linux-x86_64.tar.gz.pem \ --signature abcpwn-linux-x86_64.tar.gz.sig \ --certificate-identity-regexp '^https://github.com/manop55555/abcpwn/' \ --certificate-oidc-issuer 'https://token.actions.githubusercontent.com' \ abcpwn-linux-x86_64.tar.gz gh attestation verify abcpwn-linux-x86_64.tar.gz --repo manop55555/abcpwn ``` 保障属性: | 属性 | 状态 | |----------------------|-----------------------------------------------------------| | 发行版签名 | cosign 无密钥签名 (Fulcio + Rekor) | | 软件物料清单 | 每个版本附带 CycloneDX SBOM | | 构建来源 | 每个版本附带 SLSA 证明 | | 二进制加固 | PIE, full RELRO, NX, stack canary, FORTIFY | | 内存 / UB / 竞态 | 每次更改均运行 ASan, UBSan, TSan | | 静态分析 | 每次更改均运行 CodeQL | | 解析器模糊测试 | 在面向解析器的接口上使用 libFuzzer harnesses | 加固验证命令位于 [SECURITY.md](SECURITY.md) 中。 abcpwn 解析的是攻击者可控的二进制文件,因此解析器错误是一个安全 问题:请通过 [GitHub Security Advisories](https://github.com/manop55555/abcpwn/security/advisories/new) 私下报告, 而不是作为公开 issue。威胁模型位于 [docs/SECURITY-MODEL.md](docs/SECURITY-MODEL.md) 中。 ## 文档 - [docs/COMMANDS.md](docs/COMMANDS.md) - 每个子命令的详细信息 - [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md) - 内部设计 - [docs/SECURITY-MODEL.md](docs/SECURITY-MODEL.md) - 威胁模型、缓解措施、模糊测试 - [docs/TUTORIALS.md](docs/TUTORIALS.md) - 端到端演练 - [docs/FAQ.md](docs/FAQ.md) - 常见问题 - [docs/ERROR_CODES.md](docs/ERROR_CODES.md) - 退出代码和补救措施 - [docs/PERFORMANCE.md](docs/PERFORMANCE.md) - 性能方法论和指标 - [docs/SUPPORT.md](docs/SUPPORT.md) - 支持的版本 - [docs/CI.md](docs/CI.md) - 持续集成:触发器和门禁 - [BUILDING.md](BUILDING.md) - 从源码构建、故障排除、性能分析 - [CHANGELOG.md](CHANGELOG.md) - 版本历史 ## 许可证 Apache-2.0。静态链接 Keystone 汇编引擎的可选 `release-with-keystone` 构建是 GPL-2 下的组合作品;它不 作为发行版工件分发,必须从源码构建。请参阅 [LICENSE](LICENSE) 和 [LICENSE-THIRD-PARTY.md](LICENSE-THIRD-PARTY.md)。 ## 维护者 [manop55555](https://github.com/manop55555).
标签:C++, Findomain, Go语言工具, ROP, Shellcode, Web报告查看器, 二进制漏洞利用, 云安全监控, 云资产清单, 技术调研, 数据擦除, 逆向工程, 静态分析