반응형

pwnable 29

[IJCTF] Input Checker - 포너블 / 버퍼오버플로우 / IDA / Peda / Pwntool

조금 헷갈렸던 포너블 문제 포너블은 항상 어려운것 같다. 문제설명에서 best input 을 찾으라고 한다. 문제파일로 input 이라는 이름의 바이너리 파일이 하나 주어진다. file 명령어로 확인해보면 ELF 64-bit 파일인것을 확인할 수 있다. ELF 은 리눅스에서 실행가능한 파일이다. 파일을 실행시켜보면 Input : 이라는 문구가 출력되면서 사용자 입력을 기다린다. hello 라고 입력해봤는데, 프로그램이 종료되거나 하지 않고 계속 대기중이었다. IDA 라는 디스어셈블러를 이용해 input 파일을 열어보았다. main 함수를 먼저 살펴봤는데 Input : 이라는 출력이 나온 뒤에 getchar() 함수를 이용해 사용자의 입력을 받고 있다. 반복문이 0에서 1089 까지 돌아가면서 사용자의 입..

CTF/포너블 2022.09.01

[SharkyCTF] Give Away 1 - 포너블 / RTL / IDA / Peda / Pwntool

이전에 포스팅 했던 GIVE AWAY 0 보다 한단계 어려워진 문제이다. (https://hackingstudypad.tistory.com/237) 이전 문제와 차이점은 주어지는 파일을 보면 직관적으로 알 수 있는데 지난번에는 0_give_away 라는 바이너르 파일 하나만 제공되었으나 이번에는 give_away_1 바이너리 파일과, libc-2.27.so 파일이 같이 제공되는것을 볼 수 있다. 여기서 사용되는 기법은 RTL (Return To Libc) 라는 기법으로 ret 부분에 적힌 주소를 libc 영역으로 바꿔 libc 에 들어있는 함수를 불러와 실행하는 것이다. 이전 문제는 win_func 라는 shell을 실행시킬 수 있는 함수가 프로그램 내에 내장되어 있었다면, 이번 문제는 그런 함수가 없이..

CTF/포너블 2022.08.24

[SharkyCTF] GIVE AWAY 0 - 포너블 / 버퍼오버플로우 / PEDA / IDA / Pwntool

오랜만에 풀이해보는 포너블 문제 포너블은 참.. 할수록 어려운것 같다. 문제에서 주어지는것은 0_give_away 바이너리 파일이다. 리눅스에서 file 명령어로 해당 파일을 확인해보면 64비트 ELF 파일인것을 확인할 수 있다. ELF는 리눅스에서 실행가능한 실행파일이다. 한번 프로그램을 실행시켜봤다. ./0_give_away 라고 입력하면 실행이 된다. 실행하면 아무 출력없이 사용자의 입력을 기다리고 있는다. hello 라고 입력해봤더니 그냥 프로그램이 종료되었다. 이번에는 무작정 a 를 많이 입력해봤다. 그랬더니 segmentation fault 가 떴다. 버퍼 오버플로우 공격이 가능할 것 같다. IDA 라는 디스어셈블러를 이용해 바이너리 파일을 살펴보았다. main 함수부터 봤는데 main 함수에..

CTF/포너블 2022.08.19

[ImaginaryCTF] ret2win - 포너블 / 버퍼오버플로우

오랜만에 써보는 포너블 문제 포너블은 왠지 모르게 손이 잘 안가는거 같다.. 어려워서 그런가.. 이번 문제는 간단해서 쉽게 풀었다. 문제파일로 바이너리 파일인 vuln과 소스코드인 vuln.c 파일이 주어진다. 그리고 실제 접속해서 문제를 풀어야 하는 문제서버 주소(ret2win.chal.imaginaryctf.org 1337) 도 같이 주어진다. 우선 어떤 프로그램인지 테스트 해보기 위해 문제 서버에 한번 접속해봤다. 접속하면 Can you overwrite the return address? 라고 하면서 사용자의 입력을 받는다. aaaa 라고 시험삼아 입력해봤는데, 별다른 반응없이 retrun 주소를 출력하면서 프로그램이 종료된다. #include #include int win() { FILE *fp..

CTF/포너블 2022.07.22

[DwagCTF] bof to the top - 포너블 / 버퍼오버플로우 / Pwntool / gdb

대회가 끝나고 나서 풀어본 버퍼오버플로우 문제 쪼금 생각해야하는 부분이 있어서 마냥 간단하지만은 않았다. bof 라는 이름의 바이너리 파일과 이 파일의 소스코드가 주어진다. 해당 파일은 ELF 파일로 리눅스에서 실행 가능한 프로그램이다. 리눅스의 EXE 파일이라고 생각하면 된다. 프로그램을 실행시켜보면 사용자의 입력을 두번 받는다. 맨 처음 이름을 물어보고, 어떤 노래를 부를건지 물어보는데 각각 hello, world 라도 입력해봤다. 입력했더니 프로그램은 아무런 출력도 없이 종료된다. #include "stdio.h" #include "string.h" #include "stdlib.h" // gcc -m32 -fno-stack-protector -no-pie bof.c -o bof void audit..

CTF/포너블 2022.04.17

[DwagCTF] Tom Nook the Capitalist Racoon - 포너블 / Pwntool

포너블 문제 대회가 끝나고 풀어서 캡쳐가 조금 미흡하다. 해당 문제가 포너블로 분류되어있긴 했는데, 포너블이라고 보기엔 좀.. 이 문제는 동물의 숲 게임을 모티브로 해서 만들어진 문제이다. 참고로 문제 제목에 나오는 Tom Nook은 동숲에서 대출해주는 너굴이다. animal_crossing 이라는 ELF 파일이 하나 주어진다. ELF파일은 리눅스에서 실행가능한 파일로 리눅스의 EXE파일이라고 생각하면 된다. 해당 파일을 실행시키면 이런 문자들이 출력된다. 동물의 숲을 간단하게 커맨드 라인으로 구성한 프로그램인듯 하다. 1, 2, 3을 입력해서 각 메뉴를 선택할 수 있다. 1을 입력해서 물건 팔기로 들어가본다. 그럼 내가 가지고있는 물건들을 팔 수 있다. 하나 팔면 800 ~ 900 벨 정도를 벌 수있나..

CTF/포너블 2022.04.16

[TGHACK] Boofy - 포너블 / 버퍼오버플로우

이번 문제는 대회 끝나고 풀어서 제대로 된 캡쳐를 하지 못했다. 간단한 포너블 문제이다. boofy 라는 바이너리 파일과 해당 파일의 소스코드가 주어진다. boofy는 ELF파일로 리눅스에서 실행가능한 프로그램이다. 리눅스의 EXE파일이라고 생각하면 된다. 프로그램을 먼저 실행시켜 보자. 프로그램을 실행시키면 Please enter the password? 라고하면서 비밀번호를 물어본다. abcd 라고 입력해봤는데, 당연히 올바른 비밀번호가 아니기 때문에 Sorry, but that's not the right password... 라는 문구가 출력된다. #include #include #include void get_flag() { printf("TG20{the real flag is on the se..

CTF/포너블 2022.04.15

[Space Heroes CTF] Guardians of the Galaxy - 포너블 / 포맷스트링

이번 대회에서 중급 난이도로 분류되었던 포너블 문제이다. 가디언즈 오브 갤럭시 컨셉의 문제였다. 문제 설명에서 Can Starlord find a successful distraction format? 이라고 언급하면서 이 문제가 Format String 취약점을 이용해서 푸는 문제라는걸 암시하고 있다. 문제를 직접적으로 풀어볼 수 있는 주소(0.cloud.chals.io) 와 포트(12690)이 주어지고, 로컬에서 테스트해 볼 수 있도록 guardians 라는 바이너리 파일도 같이 주어진다. 일단 먼저 문제 서버에 접속해본다. nc(netcat) 명령어를 이용해서 위와 같이 접속할 수 있다. netcat은 네트워크를 연결해서 데이터를 읽고쓸수 있게 해주는 도구이다. nc 0.cloud.chals.io ..

CTF/포너블 2022.04.08

[angstromCTF] No canary - 포너블 / 버퍼오버플로우

No canary 문제는 이번 대회에서 나온 가장 쉬운 포너블(pwnable) 문제였다. 대회가 끝나고 풀어서 문제 설명은 캡쳐를 못했다..ㅎ pwnable 이란 시스템 해킹 분야를 말한다. 어떤 프로그램의 취약점을 통해 운영체제의 권한까지 획득하는 그런 종류의 분야이다. 문제 이름이 No canary 인것도 포너블과 관계가 있다. 포너블에 자주 등장하는것이 '버퍼 오버플로우' 라고하는 취약점인데, 프로그램에서 사용자 입력값의 길이를 검증하지 않아서 발생하는 취약점이다. 버퍼 오버플로우를 설명할 때 가장 많이 쓰는 그림이다. 프로그램에서 사용자의 입력값을 받으면 buffer 라는 영역에 저장된다. 당연히 buffer 영역을 넘어가면 저장이 되지 않도록 입력값의 길이를 검증해야하는데, 버퍼오버플로우는 길이..

CTF/포너블 2022.03.19
반응형