CTF/CTF_Configuration 13

ModuleNotFoundError: No module named 'elftools.common.py3compat' 오류해결

문제점 pwntools 파이썬 라이브러리를 사용해서 익스코드를 열심히 짜보았으나 아래와 같은 오류가 발생했다. (2023.9 기준) pwntools 라이브러리에서 사용하는 elftools라는 라이브러리의 버전이 맞지않아 이를 찾을 수 없어 발생하는문제로 추측된다. ubuntu@ubuntu-2204:~/jun/hacktheworld/pwn$ python3 basic_bof.py Traceback (most recent call last): File "/home/ubuntu/jun/hacktheworld/pwn/basic_bof.py", line 1, in from pwn import * File "/usr/local/lib/python3.10/dist-packages/pwn/__init__.py", lin..

Pwnable 문제를 풀기위한 CTF configuration 총정리

CTF에 출전하여 Pwnable 문제를 풀기위해서 반드시 필요한 도구들이 있다. 모든 도구들의 세팅방법들을 차근차근 정리해보려고 한다. 1. Pwntools & Pwndbg pwntools -> 익스플로잇 코드 개발을 위한 파이썬 라이브러리 pwndbg -> 리눅스 바이너리 분석을 위한 디버거 위 두개의 프로그램이 없으면 문제를 풀 수 없다. 시험을 보는데 펜이 없는 셈이다. 반드시 필요한 프로그램이므로 꼭 설치해주자. 아래 링크의 setup.sh을 통해 설치할 수 있다. https://github.com/junfuture1103/pwnable_conf/tree/main/Basic_configuration GitHub - junfuture1103/pwnable_conf: Configuration for ..

CTF 문제 풀기 시작할때 해야하는 것들 정리

1. file 1. 파일 유형 64 / 32 비트 확인 2. 아키텍처(ISA)확인 x86-64 / ARM 3. stripped 여부 확인 => 디버깅 심볼 여부 => main 내가 찾음? 안찾아도 ㄱㅊ? 2. checksec 보호기법확인 3. chmod +x 실행권한없으면 디버깅도 안됨 당연히 permission denied 4. vmmap으로 메모리 영역 권한보기 5. main 찾기 debugging 심볼 없을때 => IDA에서 libc_start_main 따라가며 메인함수주소 찾기 debugging 심볼 있을때 => gdb에서 start

CTF pwnable 환경구성을 위한 쉘코드 (pwnable_conf.sh)

https://github.com/junfuture1103/pwnable_conf GitHub - junfuture1103/pwnable_conf: Configuration for Pwnable Configuration for Pwnable. Contribute to junfuture1103/pwnable_conf development by creating an account on GitHub. github.com 도커 등을 이용해 새로운 환경(OS) 를 설치하고, pwntools와 pwndbg등 필요한 도구들을 일일히 설치하는 것 만큼 귀찮은게 없다. 그래서 만들었다. vim / pwntools / pwndbg를 알아서 설치해주는 쉘 스크립트이다. 사용법은 아래 .sh 코드를 복붙해준 뒤 (이름 뒤에 ..

Dockerfile 주어졌을때 CTF Configuration 정리 & ARM Cross Compile 및 ARM 바이너리 gdb 디버깅 하는법

CTF문제에서 다음과 같이 Dockerfile을 제공해주는 경우가 있다. 이때 만약 문제서버와 동일한 환경에서 바이너리를 실행시키며 디버깅을 하고싶을땐 어떻게 해야할까? 그래서 준비해봤다. 1. docker 파일 이용해서 해당 환경 OS 실행 (docker image생성 -> 컨테이너 생성 -> 컨테이너 접속) 2. 관련 프로그램 설치 (gdb, pwntools) 3. 바이너리가 다른 아키텍쳐(i386가 아닌)에서 컴파일 된 경우, 크로스 컴파일 (처음 실행) 도커 빌드 및 컨테이너 실행 #dockerfile 이용해 image 생성 sudo docker build -t codegatearvm:cgarvm ./ #image 이용해 컨테이너 실행 sudo docker run -i -t -d -p 9080:8..

바이너리에 ld와 libc 새로 링킹하기 (D_PRELOAD=./libc.so.6 segfault 뜰때 해결하기)

CTF문제에서 libc파일을 제공해줬을때, 이와 같은 명령어로 바이너리를 실행시킬때 내가 원하는 라이브러리가 로드되게 할 수 있다. (LD_PRELOAD는 변수로 설정된 라이브러리를 먼저 로딩시켜주는 환경변수이다.) LD_PRELOAD=./libc.so.6 ./bypass_valid_vtable 이때 이 명령어가 segfault가 뜨는 경우가 있는데, 이걸 해결하는 방법을 적어보고자한다. 문제는 원하는 라이브러리가 로딩은 되었으나, 바이너리 내부에 연결(링킹)되어 있는 libc와 ld는 이와 다르기 때문에 발생한다. 이에 바이너리에 링킹된 libc와 ld도 우리가 원하는 버전으로 맞춰줘야한다. https://github.com/NixOS/patchelf GitHub - NixOS/patchelf: A s..

CTF-pwnable용 Docker 설치 및 사용법

https://spark.kro.kr/110 [Docker] CTF-Pwnable 환경 구축하기 Pwnable 환경 구축하기 macOS를 사용하고 있어서 Pwnable을 할때 VMware에 Ubuntu를 설치해서 사용해왔습니다. 하지만, 저는 128GB를 사용하고 있어서 용량이 늘 부족합니다. 그래서 생각한 것이 docker를 이 spark.kro.kr 이 자료를 참고하였다!! CTF 도커 설치하는법 요 링크에서 Dockerfile을 다운받은 뒤에, 이걸로 도커 컨테이너 컴파일을 진행하면된다. Dockerfile안에 컨테이너 안에 설치할 pwnable 관련 여러 도구들을 자동으로 설치해주는 내용이 다들어가 있어서 설치가 매우 간편하다. https://gist.github.com/LiveOverflow/b..

main_arena offset 구하기

main_arena는 heap영역에서 해제된 청크가 Unsorted bin에 처음 등록될때 FD와 BK가 가리키고 있는 영역이다. Use After Free와 같은 취약점을 이용해서 일부러 해제시킨 청크를 그대로 다시 할당하면 FD와 BK가 적힌채로 돌아오는데, 이때 FD와 BK가 main_arena+xx 위치를 가리키고있다. 이때 main_arena의 offset을 이용해 libc_base 주소를 구할 수 있다. 그럼 main_arena의 offset을 편하게 구해주는 도구를 알아보자. 설치 git clone https://github.com/bash-c/main_arena_offset 사용법 #main_arena 폴더 들어간 후 ./main_arena [libc 파일경로] ./main_arena ....

One_gadget Constraints (원가젯 제약조건) 해석하기

one_gadget 툴을 사용하다보면 출력되는 제약조건이 어떤 뜻인지 헷갈릴때가 있다. 아래와 같은 경우 libc-2.31.so 에 존재하는 constraints를 출력시켜보았는데, jun@ubuntu:~/jun/CTF_CONFIG/libc-database$ one_gadget /lib/x86_64-linux-gnu/libc-2.31.so 0xe6c7e execve("/bin/sh", r15, r12) constraints: [r15] == NULL || r15 == NULL [r12] == NULL || r12 == NULL 0xe6c81 execve("/bin/sh", r15, rdx) constraints: [r15] == NULL || r15 == NULL [rdx] == NULL || rdx =..

728x90