CTF write_up/NACTF
-
[Binary Exploitation] loopy #0CTF write_up/NACTF 2019. 9. 24. 22:25
문제를 해결 해 보도록 하겠습니다. NX 보호기법만 존재 합니다. 문제를 실행해 보면 아래와 같습니다. 입력과 동시에 출력이 됩니다. 간단히 .c 파일을 확인해 보면 놀라울 정도로 짧습니다. vuln함수에서 gets함수에서 bof가 일어나면서도 printf 함수에서 FSB, 즉, 포맷스트링 취약점이 일어납니다. FSB 를 이용해서 입력한값이 몇번 오프셋에서 출려되는지 확인해 보겠습니다. 4번 오프셋에 저장이 되네요! 추후 "%4$s"를 사용할것 같습니다. IDA 32bit로 열어서 분석을 해보겠습니다. 메인 함수에는 아무런 특징이 없기 때문에 vuln함수에 들어가 보겠습니다. s변수의 크기는 0x48로 72입니다. 먼저 문제를 해결 하기 위해서는 system 함수와 "/bin/sh"를 이용해야 할것 으로..
-
[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[..
-
[Binary Exploitation] BufferOverflow #1CTF write_up/NACTF 2019. 9. 23. 08:54
문제를 해결 하기 위해 c코드부터 확인해 보겠습니다. 앞전 문제의 코드와 매우 유사합니다. IDA 32bit를 이용해서 열어보겠습니다. vuln함수에 있는 s변수의 크기를 확인해 보겠습니다. 0x18 = 24입니다. SFP와 RET를 구해보겠습니다. SFP : 4 // RET : 4 그리고 가장 중요한 win함수의 주소를 알아 보겠습니다. 0x080491B2 입니다. 이를 이용한 Exploit code는 아래와 같습니다. Flag : nactf{pwn_31p_0n_r3t_iNylg281}
-
[Binary Exploitation] BufferOverflow #0CTF write_up/NACTF 2019. 9. 23. 08:53
소스코드를 먼저 확인해 보겠습니다. 일단 main에는 vuln()함수만 있는데 해당 함수에 들어가보면 함수명 그대로 취약한 함수인 gets 함수가 있고 buf는 16으로 크기가 지정되어있습니다. 하지만 우리가 필요한 함수는 win함수이기 때문에 win함수를 bof 취약점을 일으킬때 사용해야 할 것 같습니다. IDA 32비트로 파일을 열어 보겠습니다. vuln함수의 입력값 s의 크기를 보면 ebp-18로 24라는 크기를 가지고 있습니다. SFP와 RET를 확인해 보겠습니다. SFP : 4 // RET : 4 입니다. 즉, s[16] + dummy[8] + SFP[4] + RET[4] 의 구조 입니다. win함수의 주소를 한번 알아보겠습니다. 0x080491C2 입니다. 이제 Exploit code를 작성해..