pwninit 소개

Linuxtool
avatar
2025.06.16
·
3 min read

pwninit

pwninit 명령어를 문제 바이너리가 있는 디렉토리에서 실행하면 미리 템플릿으로 만들어놓은 익스플로잇 코드를 기반으로 파이썬 파일이 만들어지고 만약 libc 파일이 있다면 해당 파일을 기반으로 ld 파일까지 찾아 patch 까지 해주는 툴이다.

GitHub - io12/pwninit: pwninit - automate starting binary exploit challenges
pwninit - automate starting binary exploit challenges - io12/pwninit
https://github.com/io12/pwninit
GitHub - io12/pwninit: pwninit - automate starting binary exploit challenges

Install

required package

해당 툴을 설치 및 사용하기 위해선 몇가지 패키지를 설치해줘야한다.

sudo apt install -y liblzma-dev pkg-config patchelf

install

설치는 해당 레포 Releases 페이지에서 파일을 받은 후 /bin에 넣어주거나, cargo install pwninit으로 설치할 수 있다.

만약 파일을 직접 /bin에 넣었을 경우에는 아래 코드를 사용하고 있는 셸 설정파일(ex: ~/.zshrc, ~/.bashrc)에 추가해주면 된다.

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

Usage

$ 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

위 처럼 해당 디렉토리에서 pwninit명령어를 사용해주면 만약 libc파일이 있으면 ld 파일을 다운 받아서 patch까지 해준다. 만약 바이너리만 있으면 solve.py 파일만 만들어 줍니다. 때문에 ~/.config 디렉토리를 만들고 해당 파일을 만들 템플릿 파일을 만들어줘야한다.

파일 이름은 pwninit-template.py로 해야함.

내가 사용중인 템플릿 코드다.

#!/usr/bin/env python3

from pwn import *

{bindings}

context.binary = {bin_name}
r = ROP({bin_name})
lr = ROP(libc)

def conn():
    global p
    if args.connect:HOST,PORT=args.connect.split(':');p=remote(HOST,int(PORT))
    else:p=process([e.path])
    if args.debug:context.log_level='debug'
    return p



def main():
    p = conn()

    # good luck pwning :)

    p.interactive()


if __name__=='__main__':global args;from argparse import ArgumentParser;parser=ArgumentParser();parser.add_argument('-c','--connect',type=str);parser.add_argument('-d','--debug',action='store_true',default=False);args=parser.parse_args();main()






- 컬렉션 아티클