-
angstrom CTF 2020 write up$ Capture The Flag $ 2020. 3. 15. 00:25
REV
Revving Up
해당 첨부 파일을 실행 해서 문제를 실행해 보면 아래와 같습니다.
argument에 banana가 있어야 한다고 합니다.
banana 를 argument에 넣어서 다시 실행해 보겠습니다.
Flag 출력하는 부분 까지 출력된 것을 확인 할 수있습니다.
Shell 을 이용해서 해당 파일을 실행해서 Flag를 얻어 보겠습니다.
Flag : actf{g3tting_4_h4ng_0f_l1nux_4nd_b4sh}
Windows of Opportunity
첨부된 파일을 IDA에 넣어 보면 아래와 같은 문자열을 확인 할 수 있습니다.
Flag가 평문으로 변수에 저장되어 있는 것을 알 수 있습니다.
Flag : actf{ok4y_m4yb3_linux_is_s7ill_b3tt3r}
Taking Off
첨부 프로그램을 실행해 보면 아래와 같이 바로 문자열만 출력하고 끝나는 것을 알 수 있습니다.
IDA로 확인해 보면 아래와 같습니다.
argument 를 먼저 맞춰야 if문을 벗어 날 수 있습니다.
argc의 값이 5개여야 합니다.
argv[0] 은 ./taking_off 일것이고 argv[1]~argv[3] 까지 문자를 숫자로 변환을 하는데 아래와 같은 수식을 맞춰야 합니다.
100 * v5 + 10 * v4 + v6 == 932 이어야 합니다.
v4 = 3, v5 = 9, v6 = 2 이라는 것을 알게 되었고, argv[4]에는 chicken 이라는 문자열이 들어가야 합니다.
argv 값을 잘 넣어서 실행을 해보니
비밀 번호를 입력해야 하는것 같습니다.
IDA 디컴파일 소스코드에서 for문 부분을 확인해 보면 xor을 하는 것을 확인 할 수 있습니다.
해당 값을 알 아 보기 위해서 python script를 작성해 보겠습니다.
결과는 please give flag 입니다.
Shell 에서 파일을 실행해 보겠습니다.
Flag : actf{th3y_gr0w_up_s0_f4st}
Patcherman
해당 문제파일을 실행해 보면 아래와 같이 무한루프에 들어가는 것을 알 수 있습니다.
IDA를 이용해서 디컴파일 코드를 확인해 보겠습니다.
위의 코드중에서 ptrace 함수 때문에 if 문이 참값이 되서 while(1) 함수에 들어가게 됩니다.
해당 프로그램을 패치 해야 할 것 같습니다.
풀이에 사용한 패치 프로그램은 r2 입니다.
r2 프로그램은 Radare2 프로그램중 하나입니다.
설치 방식은 아래와 같습니다.
이제 r2 프로그램을 이용해서 코드 패치를 진행해 보겠습니다.
r2 -w patcherman 을 입력해서 w옵션으로 인해서 write 가 가능합니다.
-w 이 아니여도 -d 는 debug 모드 로 진입할 수 있습니다.
aaa 를 입력해서 해당 프로그램의 모듈을 읽어 옵니다.
afll은 프로그램에 들어있는 함수들의 주소를 읽어옵니다.
pdf @main은 main 함수를 보여주는 명령입니다.
위의 코드에서 ptrace 함수 부분을 찾아보면 아래와 같습니다.
0x400752 주소에서 ptrace 함수를 확인 할 수 있습니다.
VV @main 명령을 이용해서 그래프 형식으로 코드를 확인이 가능하고, 위의 ptrace 함수와 관련된 그래프를 확인 해보겠습니다.
ptrace 함수를 지나고 je 0x400775 를 통해서 while문으로 들어가게 됩니다.
코드 패치를 통해 True 값을 가지게 해서 0x4007b0로 가게 해야 합니다.
이제 pdf @main 명령으로 주소를 확인한 뒤, 코드를 패치를 진행 해 보겠습니다.
0x400766 주소에 있는 je 0x400775 를 jmp 0x400768 으로 패치를 진행해 보겠습니다.
je 0x400775 -> jmp 0x400768 로 패치가 된것을 알 수 있습니다.
그리고 변수도 패치를 진행해야 합니다.
0x601050 에 있는 값을 0x1337BEEF 로 변경을 해줘야 합니다.
px 명령을 통해서 변수를 확인 할 수 있습니다.
하지만 주소가 0x400500에 위치해 있기 때문에 0x601050을 확인 할 수 없습니다.
px @0x601050 을 통해서 해당 주소에 있는 변수 값을 확인해 보겠습니다.
해당 값을 0x1337BEEF로 패치를 진행해 보면 아래와 같습니다.
패치를 전부 완료 했습니다.
q명령으로 r2 프로그램을 나간뒤에 프로그램을 실행해 보겠습니다.
Flag : actf{p4tch3rm4n_15_n0_m0r3}
'$ Capture The Flag $' 카테고리의 다른 글
Securinets-2K20 PreQuals CTF write up (18) 2020.03.23 SuSeC CTF 2020 write up (0) 2020.03.23 zer0pts CTF 2020 write up (0) 2020.03.12 UTCTF 2020 write up (0) 2020.03.09 2020 NEWSECU CTF write up (5) 2020.02.23