분류 전체보기

최근 rop 공격을 공부하면서 난항을 겪었다. #include int main(void) { char buf[32] = {}; puts("Hello World!"); puts("Hello ASLR!"); scanf("%s", buf); return 0; } gcc -o example4 example4.c -fno-stack-protector -mpreferred-stack-boundary=2 -m32 -no-pie rop 공격을 테스트하기 위해, 위 c언어 소스 코드를 아래 gcc 명령어를 이용해 실습에 방해되는 보호 기법을 해제해준 상태로 빌드를 했다. 빌드 후 gdb로 파일을 열어 scanf 함수의 plt 코드를 확인해보면 정상적인 plt 코드가 아니라, endbr32 같은 이상한 명령어들이 보이는 ..
이번에 풀이할 문제는 HackCTF의 BOF_PIE 문제다. 문제 명만 봤을 때는 pie 보호 기법이 걸린 상태로 bof 공격을 해야 할 것 같다. 마찬가지로 bof_pie라는 이름의 elf 파일이 주어져 있으니, 동작 확인 -> 보호 기법 확인 -> 코드 확인 순서로 풀이를 진행하겠다. 문제 파일을 실행하면 "Hello, Do you know j0n9hyun?"과 "j0n9hyun is 0x56555909"라는 알 수 없는 16진수 값이 출력된 후 입력을 받는다. 입력 값으로 1을 주니 "Nah ..."가 출력됐다. 보호 기법을 확인해보니 NX bit와 문제 이름처럼 PIE 보호 기법이 걸려 있는 것을 볼 수 있다. main 함수는 welcome 함수를 호출한 뒤 "Nah..."를 출력해준 뒤 종료된다..
이번에 풀이할 문제는 HackCTF의 Offset 문제다. 개인적으로 이번 문제는 푸는 방법이 좀 참신하게 느껴졌다. 파일은 offset이라는 elf 파일이 주어져 있다. 실행을 해 동작을 먼저 확인한 후, 보호 기법, 코드를 확인하겠다. 문제 파일을 실행하면 "Which function would you like to call?"이라는 문구가 출력된 후 입력을 받는데, 1을 입력하니 프로그램이 그대로 종료됐다. 보호 기법은 canary 빼고는 모두 걸려 있는 것을 볼 수 있다. ghidra로 main 코드를 확인해보면 위와 같다. gets 함수가 눈에 띄는데, 이 gets 함수를 통해 오버플로우를 일으킬 수도 있을 것 같다. gets 다음에 호출되는 select_func 함수도 확인해봤다. 입력 값이 ..
이번에 풀이할 문제는 HackCTF의 Simple_Overflow_ver_2 문제다. 문제 이름을 봤을 때 bof 관련 문제로 추정된다. 파일은 Simple_overflow_ver_2라는 이름의 elf 파일이 주어져 있다. 일단 어떤 동작을 하는지 실행해서 확인해보겠다. 실행을 하면 "Data : " 문구가 출력되면서 입력을 받는데, 입력을 하면 입력 값이 저장된 주소로 추정되는 16진수 값과 입력 값을 같이 출력해준다. 그 후 Again (y/n) 문구가 출력되며 입력을 받는데, y를 입력하면 이 과정을 다시 수행할 수 있고, n을 입력하면 프로그램을 종료한다. 동작은 확인했으니 보호 기법 및 코드를 확인해보겠다. RELRO 빼고는 보호 기법이 걸려지 않은 것을 볼 수 있다. ghidra를 통해 메인 ..
· Wargame/FTZ
level 8에서 얻은 패스워드를 사용해 level 9 계정으로 로그인해보면 hint 파일만 존재하는 것을 볼 수 있다. cat 명령어로 hint 파일을 읽어보면 /usr/bin/bof 프로그램의 소스 코드가 출력되고 이를 이용해 level10의 권한을 얻으라는 문구가 출력된다. /usr/bin/bof 파일을 ls -al 명령어로 확인해보면 level10 권한으로 setuid가 걸려있는 것을 볼 수 있다. 이 프로그램의 취약점을 찾아 level10 권한으로 쉘을 얻는다면 level10 계정의 패스워드를 얻을 수 있을 것이다. 먼저 소스코드를 살펴보겠다. #include #include #include main(){ char buf2[10]; char buf[10]; printf("It can be ove..
· CTF
DawgCTF 2021의 Bofit 문제다. elf 파일인 bofit과 c언어 소스 코드인 bofit.c가 주어져있다. bofit 파일을 우분투에서 실행해보면 다음과 같은 문구가 나온다. 문구를 읽어보면 "BOF it!"이 출력될 시 'B'를 입력, "Pull it!"이 출력될 시 'P'를 입력, "Twist it!"이 출력될 시 'T'를 입력, 'Shout it!"이 출력될 시 최소 10글자를 입력하라고 한다. 보호기법을 확인해본 후 소스 코드를 보면서 취약점을 찾아보겠다. 보호기법은 Partial RELRO만 걸려있는 것을 볼 수 있다. #include #include #include #include #include #include void win_game(){ char buf[100]; FILE* ..
· CTF
DawgCTF 2021의 Two Truths and a Fib 문제다. "fibber를 잡을 수 있겠나?"라고 적혀 있다. 문제 이름을 직역한다면 2개의 진실과 한 fib(피보나치 수를 의미한다)다. 주어진 서버로 접속하면 위 사진과 같은 문구들이 출력된다. 해석해보면 3개의 정수가 주어지는데, 이 수들 중 피보나치 수를 찾아서 입력하는 것이다. 예제로 12, 8, 4가 주어졌는데, 실전에 주어지는 수들을 보면 길이가 장난 아니다.... 게다가 시간 제한까지 있어서 확실한건 손으로는 절대 못풀것 같다. 따라서 pwntools를 이용해서 자동화해 피보나치를 구별하고 입력을 준다면 flag를 얻을 수 있을 것이다.(취약점을 이용한 exploit이 아닌 이상..) 자동화 과정은 다음과 같다. 1. [, , ]..
· CTF
DawgCTF Discord 문제다. DawgCTF의 Discord 서버에 접속한 후 General - flag 채널에 간다면 flag를 얻을 수 있다.
보호되어 있는 글입니다.
보호되어 있는 글입니다.
dyp4r
'분류 전체보기' 카테고리의 글 목록 (8 Page)