블로그 이전했습니다. https://jeongzero.oopy.io/
윈도우용 pwntools 사용기
본문 바로가기
보안/삽질 노트

윈도우용 pwntools 사용기

728x90

워게임 풀다가 윈도우용 pwntools를 찾아보게되었고 역시 생각하는건 다 있는듯ㅋ

Byzero512/winpwn
for CTF windows pwn and IAT/EAT hook support python2 and python3 support windbg/windbgx/x64dbg/mingw-gdb pip/pip3 install winpwn optional: for debug, copy file .winpwn to windows HOMEDIR, then configure it.
https://github.com/Byzero512/winpwn

경험을 공유하고자 간단히 정리하겠다

  • 우선 python27, python37 둘다 깔기

gdb.attach() 하면 리눅스에선 일반적으로 터미널 창 하나 띄워서 디버깅 조졌음. but 윈도우에선 어떤 디버거를 사용할 지 정해야함. 항목은 아래와 같음

  1. windbg preview
  1. windbg
  1. x64dbg, x32dbg
  1. mingw gdb

1~3번은 python3 버전대에서 해야 에러없이 진행되고 4번은 python2 버전만 호환됨. 1~3은 다해밨는데 4번은 에러떠서 시도 못함. ㅅㅂ

4번 mingw gdb는

저렇게 실제 리눅스 peda 마냥 쓸수 있다고함. 후에 저것도 성공해서 수정하겠음

일단 python3 기준으로 설치법

  • python -m pip install winpwn
  • winpwn 폴더안에 보며 setup.py 있음

    python setup.py install

  • winpwn 폴더들어가보면 .winpwn파일이 있음
    {
        "debugger":{
            "i386": {
                "x64dbg": "E:\\etc\\reversing\\snapshot_2020-08-16_04-47\\release\\x32\\x32dbg.exe", 
                "gdb": "C:\\Users\\wogh8732\\Documents\\gdb-6.8-mingw-3\\bin\\gdb.exe", 
                "windbg": "C:\\Program Files (x86)\\Windows Kits\\10\\Debuggers\\x86\\windbg.exe",
                "windbgx": "C:\\Users\\wogh8732\\AppData\\Local\\Microsoft\\WindowsApps\\Microsoft.WinDbg_8wekyb3d8bbwe\\WinDbgX.exe"
            },
            "amd64": {
                "x64dbg": "E:\\etc\\reversing\\snapshot_2020-08-16_04-47\\release\\x32\\x32dbg.exe", 
                "gdb": "F:\\etc\\x86_64-w64-mingw32-gdb-7.1.90.20100730\\mingw64\\bin\\gdb.exe", 
                "windbg": "C:\\Program Files (x86)\\Windows Kits\\10\\Debuggers\\x64\\windbg.exe", //난 얘는 안씀 무시하셈
                "windbgx": "C:\\Users\\wogh8732\\AppData\\Local\\Microsoft\\WindowsApps\\Microsoft.WinDbg_8wekyb3d8bbwe\\WinDbgX.exe"
            }
        },
        "debugger_init": {
            "i386": {
                "x64dbg": "E:\\etc\\reversing\\snapshot_2020-08-16_04-47\\release\\x32\\x32dbg.exe", 
                "gdb": "C:\\Users\\wogh8732\\Documents\\gdb-6.8-mingw-3\\bin\\gdb.exe", 
                "windbg": ".load E:\\ShareDir\\building\\bywin\\pykd_ext_2.0.0.24\\x86\\pykd.dll;!py -g E:\\ShareDir\\building\\bywin\\byinit.py;", // 난 얘는 안씀 무시하셈
                "windbgx": ".load E:\\etc\\pykd-0.3.3.3-cp27-win32\\pykd\\pykd.pyd;!py -g E:\\etc\\peda-windows-master\\peda-windows-master\\windbg\\bywin\\byinit.py;"
            },
            "amd64": {
                "x64dbg": "E:\\etc\\reversing\\snapshot_2020-08-16_04-47\\release\\x32\\x32dbg.exe", 
                "gdb": ":\\etc\\x86_64-w64-mingw32-gdb-7.1.90.20100730\\mingw64\\bin\\gdb.exe", 
                "windbg": ".load E:\\ShareDir\\building\\bywin\\pykd_ext_2.0.0.24\\x64\\pykd.dll;!py -g E:\\ShareDir\\building\\bywin\\byinit.py;",
                "windbgx": ".load E:\\ShareDir\\building\\bywin\\pykd_ext_2.0.0.24\\x64\\pykd.dll;!py -g E:\\ShareDir\\building\\bywin\\byinit.py;"
            }
        }
    }
    • 바이너리 아키텍처에 따라서 디버거를 붙일 수 있음. debugger 에는 걍 자신 환경에 존재하는 디버거 경로 적어주면됨
    • debugger_init 에서 x64dbg에는 걍 동일하게 디버거 경로적어주고, windbg랑 windbgx에는 windbg에서 파이썬 스크립트 실행을 위해 모듈을 로드해야한다. pkyd.pyd 다운로드했으면 해당 파일 경로 맞춰서 적어주고 ; 뒤에 !py -g "아까 기억하라는 byinit.py 경로 적기"
    • 작대기한 부분은 저거 안써서 수정안했음. 만약 am64로 조질 사람은 위에꺼 보고 적절히 세팅하면 됌

    사용법은 https://github.com/Byzero512/winpwn 여기보면 됨

    예제코드

    from winpwn import *
    context.debugger = "windbgx"
    context.arch = "i386"
    context.log_level = "debug"
    
    p = process("09.exe")
    windbgx.attach(p, script="bp 0xe613f4")
    #p.recv(100)
    p.recvuntil("Username: ")
    p.sendline('123')
    p.recvuntil("Password: ")
    # p.recv(30)
    p.sendline("8921743")
    
    p.interactive()

    저렇게 하고 실행하면 windbg preview 가 실행됨

    이제 g를 누르면 실행되면서 bp에 딱걸림

728x90