CTF 32

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

[2022 CODEGATE] ARVM Write-Up (Pwnable)

2022 CODEGATE 예선전이 2월 26일 오후 7시 - 27일 오후 7시 진행되었다. 처음으로 참여해본 CODEGATE였는데, 팀원들과 나름 준수한 성적을 낸거 같아 개인적으로 참 뿌듯하다. 한 문제라도 잡고 확실하게 풀어보자라는 생각으로 임했는데, 다행히도 한문제는 풀었다. 그렇게 처음보자마자 쭉 붙잡고있었던 문제가 바로 arvm 문제이다. Points : 793 (25 solves) 로 마감했고, 나는 26일 오후 7시부터 바로 시작해 27일 오전 4시~5시경에 풀었던 걸로 기억한다. Welcome! Here is my Emulator. It can use only human. Always SMiLEY :) 우선 arvm 문제의 Description을 보면 다음과 같이 Emulator라고 소개해..

CTF/2022 CODEGATE 2022.03.06

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 ....

728x90