#binary #elf #elf-binary #init #exploit #pwn

bin+lib pwninit

自动化启动二进制漏洞挑战

18 个稳定版本

3.3.1 2023 年 12 月 30 日
3.3.0 2022 年 12 月 12 日
3.2.0 2022 年 2 月 15 日
3.0.2 2021 年 8 月 15 日
1.2.1 2019 年 11 月 17 日

#311 in 开发工具

Download history 122/week @ 2024-03-11 66/week @ 2024-03-18 44/week @ 2024-03-25 137/week @ 2024-04-01 92/week @ 2024-04-08 70/week @ 2024-04-15 62/week @ 2024-04-22 80/week @ 2024-04-29 53/week @ 2024-05-06 80/week @ 2024-05-13 120/week @ 2024-05-20 68/week @ 2024-05-27 105/week @ 2024-06-03 66/week @ 2024-06-10 47/week @ 2024-06-17 28/week @ 2024-06-24

每月下载量 254

MIT 许可证

40KB
899

Checks Status Deploy Status

pwninit

自动化启动二进制漏洞挑战的工具

功能

  • 设置挑战二进制文件为可执行
  • 下载一个可以无segfault加载提供的libc的链接器(ld-linux.so.*
  • 下载调试符号并去除libc的strip
  • 使用 patchelf 修复二进制文件以使用正确的RPATH和解释器
  • 填写pwntools solve脚本模板

用法

简短版本

运行 pwninit

详细版本

在包含相关文件的目录中运行 pwninit,它将检测哪些是二进制文件、libc和链接器。如果检测错误,可以使用 --bin--libc--ld 指定位置。

自定义 solve.py 模板

如果您不喜欢默认模板,可以使用自己的。只需指定 --template-path <path>。有关模板格式,请参阅 template.py。可以使用 --template-bin-name--template-libc-name--template-ld-name 自定义 exelibcld 绑定名称。

持久化自定义 solve.py

您可以通过在 ~/.bashrc 中添加别名来使 pwninit 自动加载您的自定义模板。

示例
alias pwninit='pwninit --template-path ~/.config/pwninit-template.py --template-bin-name e'

安装

Arch Linux

从 AUR 安装 pwninitpwninit-bin

下载

您可以从musl发布页面下载静态链接的二进制文件。

使用cargo

运行

cargo install pwninit

这会将二进制文件放置在~/.cargo/bin

请注意,构建需要opensslliblzmapkg-config

示例

$ ls
hunter  libc.so.6  readme

$ pwninit
bin: ./hunter
libc: ./libc.so.6

setting ./hunter executable
fetching linker
https://launchpad.net/ubuntu/+archive/primary/+files//libc6_2.23-0ubuntu10_i386.deb
unstripping libc
https://launchpad.net/ubuntu/+archive/primary/+files//libc6-dbg_2.23-0ubuntu10_i386.deb
setting ./ld-2.23.so executable
copying ./hunter to ./hunter_patched
running patchelf on ./hunter_patched
writing solve.py stub

$ ls
hunter	hunter_patched	ld-2.23.so  libc.so.6  readme  solve.py

solve.py:

#!/usr/bin/env python3

from pwn import *

exe = ELF("./hunter_patched")
libc = ELF("./libc.so.6")
ld = ELF("./ld-2.23.so")

context.binary = exe


def conn():
    if args.LOCAL:
        r = process([exe.path])
        if args.DEBUG:
            gdb.attach(r)
    else:
        r = remote("addr", 1337)

    return r


def main():
    r = conn()

    # good luck pwning :)

    r.interactive()


if __name__ == "__main__":
    main()

依赖项

~11–25MB
~404K SLoC