CTF write_up
-
[Pwn] PoetCTF write_up/Hack CTF 2019. 9. 24. 00:30
실행을 한뒤 checksec으로 보호기법 까지 확인해 보겠습니다. 64비트 파일에 보호기법은 딱히 고려하지 않아도 될것 같습니다. 일단 문제를 보면.. point를 모으는 문제네요 이런 문제는 거의 대부분 point 쌓이는 변수에 다가 덮어 씌우는 형식의 문제가 자주 나오는데 과연! IDA 64bit으로 열어서 디컴파일 코드를 분석해 보겠습니다. 일단 함수가 총 3개가 있는것 같습니다. 아래에 dword_6024E0이 point 변수인것 같습니다. bss 영역에 있는 변수라고 되어 있습니다. bss란? Block Started by Symbol의 약자로 초기에 오직 0의 값으로 표시된 정적으로 할당 된 변수가 포함된 데이터 세그먼트의 일부로 컴파일러나 링커에 의해서 사용된다. 는 너무 긴거 같고, 간단히..
-
[Pwn] g++ pwnCTF write_up/Hack CTF 2019. 9. 24. 00:29
파일을 실행해 보겠습니다. checksec 명령어로 보호기법 및 파일의 비트를 확인하겠습니다. 32bit 이면서 딱히 보호기법을 인지 할 필요는 없는것 같습니다. IDA 32bit으로 열어보겠습니다. vuln함수의 디컴파일 코드인데, 특별히 보이는 문자열및 함수를 체크해 봤습니다. s변수의 크기는 아래와 같이 0x3C입니다. 0x3C == 60 변수의 크기는 60인데 입력은 32 만 받기 때문에 일반적인 방법으로는 RET 를 덮지 못할 것 같습니다. replace 변수가 있는데 "I" 를 "you"로 변환 시킵니다. 그러면 I를 21개 넣고 A 한개를 넣으면 s[60]+SFP[4] 인 64를 가뿐히 덮을 수 있습니다. 그리고 함수를 보시면 get_flag 라는 함수가 있어서 ret에 주소를 넣으면 될 것..
-
[Pwn] BOF_PIECTF write_up/Hack CTF 2019. 9. 24. 00:28
문제를 해결하기 위해서 실행을 해보겠습니다. 문제 제목에서도 BOF_PIE 인것 으로 보아 PIE를 이용해야 할 것 같습니다. checksec 명령어로 확인해 보겠습니다. PIE : PIE enabled 라고 되어 있습니다. PIE 보호 기법 때문에 주소가 바뀌기 때문에 base주소를 알아야 합니다. 이점을 유의해서 문제를 풀어 보겠습니다. IDA 32bit 로 열어보겠습니다. welcome 함수로 넘어갑니다. v1이라는 변수에 입력을 받고 main으로 넘어가 프로그램이 종료 됩니다. 함수를 살펴 보던중 다음과 같은 함수를 발견했습니다. 어딘가에 해당 함수 주소로 변조하면 될 것 같습니다. PIE는 주소값이 전부 상대적으로 표시 되어 있기 때문에 실행시 입력되어 지는 값을 가지고 실제 주소를 찾아야 합니..
-
[Pwn] OffsetCTF write_up/Hack CTF 2019. 9. 24. 00:27
해당 문제를 한번 실행해 보겠습니다. checksec 명령어를 한번 입력해 보겠습니다. IDA 32bit를 이용해서 열어보겠습니다. gets 함수가 보이므로 bof 문제네요! select_func함수로 입력한 변수 s의인자를 같이 전달 합니다. 전달받은 값을 dest 변수에 넣고 그 값이 one 이면 v3의 값을 one 함수로 보내는 기능을 하는 코드 입니다. select_func함수의 변수 stack 모형을 한번 그려 보겠습니다. |----------------| | dest [ebp-2A] | == src |----------------| | v3 [ebp-C] | |----------------| | SFP [ebp-0] | |----------------| | RET [ebp+4] | |-----..
-
[Pwn] x64 Simple_size_BOFCTF write_up/Hack CTF 2019. 9. 24. 00:25
문제를 해결하기 위해서 ida 64bit로 열어보겠습니다. main 하나만 있는 문제인것 같습니다. 취약한 부분은 gets함수 부분이고, v4의 포인터 값을 출력해 주는 것으로 보아 stack의 시작 주소를 주는것 같습니다. 페이로드는 다음과 같이 짜면 될 것 같습니다. 쉘코드 + dummy값 + RET에 buf 시작 주소 buf의 크기를 한번 보겠습니다. 0x6D30... 좀 크네요! => 27,952 입니다. 이 내용을 토대로 Exploit code를 작성해 보겠습니다. Flag : HackCTF{s000000_5m4ll_4nd_5m4ll_51z3_b0f}
-
[Binary Exploitation] Format #1CTF write_up/NACTF 2019. 9. 24. 00:23
일단 c코드를 확인해 보겠습니다. vuln함수의 FSB 취약점을 이용해서 num의 값을 42로 맞춰주면 Clear 되는 것 같습니다. 파일을 실행해 보면 다음과 같은 문자열이 출력됩니다. 앞전 format-0문제와 똑같이 4번 오프셋에 값이 들어 갑니다. %n이란? 앞에 나온 문자열의 공간의 개수 만큼을 다음 주소에 넣어 주는 것 입니다. 이러한 코드가 있을때 num의 값은 4라는 값이 들어가게 됩니다. 123\0 => 4개의 공간을 차지하기 때문입니다. 그렇다면 일단 num 인자가 어디에 있는지 확인해 보겠습니다. vuln+77에 break를 걸고 확인해 보겠습니다. buf 변수의 ret에는 main으로 나가는 주소값이 있을 것이므로 미리 확인해 가겠습니다. RET의 주소는 0x080492a9입니다. ..
-
[Binary Exploitation] Format #0CTF write_up/NACTF 2019. 9. 24. 00:21
문제를 해결하기 위해서 한번 .c 코드를 확인해 보겠습니다. 일단 인자로 flag 라는 변수를 넘겨 줍니다. 그렇다면 스택 구조를 잠시 예상해 보자면 buf[64] + SFP + RET(main으로 돌아가는 주소) + 인자값 주소 의 형식을 것 으로 예상합니다. 일단 gdb로 열어보겠습니다. 여기다가 break를 걸고 실행해서 $esp를 확인해보겠습니다. flag.txt 가 필요하다고 하네요! flag.txt를 임의적으로 만들어 보겠습니다. $esp 값을 확인해 보겠습니다. $esp-12로 한이유는 입력을 받으면 다음과 같이 나오기 때문에 똑같이 맞춰주기 위해서 한것입니다. 61616161이 들어간 4번 오프셋을 기준으로 한번 인자값 부분을 찾아보겠습니다. buf[64] + SFP[4] + RET[4] ..
-
[Binary Exploitation] BufferOverflow #2CTF write_up/NACTF 2019. 9. 24. 00:20
이문제를 풀때 pwn 공부한지 얼마 되지 않았고 실전 CTF 문제풀이는 이번 대회가 처음이였어서 좀 애를 먹은 문제 입니다. .c 코드를 확인해 보겠습니다. 이전 문제들과 다른점은 win함수에 인자값이 추가 됬다는 점입니다. IDA 32bit로 한번 확인해 보겠습니다. 일단 입력 하게 되는 vuln의 입력 변수인 s의 크기를 알아보겠습니다. 0x18 = 24입니다. SFP와 RET를 알아보겠습니다. SFP : 4 // RET : 4 필수로 필요한 win함수의 주소를 알아보겠습니다. 0x080491C2 입니다. 이게 익스 코드를 작성 할것인데.. 인자값을 넘겨줘야 합니다. 아래와 같이 페이로드를 쓰면 될것 같습니다. s[dummy 24] + SFP[dummy 4] + RET[win주소 4] + dummy[..