-
[Write up] FTZ level5 풀이정보보안/CTF write-up 2020. 7. 20. 03:24
level5에 접속하여 디렉터리를 확인해보면 hint가 있습니다.
hint에는 level5.tmp라는 임시파일을 생성한다고 합니다.
/tmp에 들어가보았지만 아무 파일도 존재하지 않습니다.
SetUID가 걸려있는 /bin/level5를 찾아 실행시켜보아도 없는 것을 확인할 수 있습니다. level5.tmp를 생성한 후에 다시 삭제한다고 생각이됩니다.
우선 우리에게 권한 영역인 홈디렉터리의 tmp에 passwd.txt라는 파일을 만들어줍니다.
passwd.txt 파일에 링크를 걸어줍니다.
level5를 실행해준후 passwd.txt를 확인해보면 다음 레벨의 암호가 있는 것을 확인할 수 있습니다.
추가적으로 이번 문제의 프로그램은 어떻게 작동하기에 위와 같은 동작을 하는지 궁금해졌습니다.
현재 level5의 권한으로는 파일을 열어볼 수 없습니다. level6 권한의 계정으로 들어간 후에 다시 확인해보겠습니다.
gdb로 해당 파일을 열어보았습니다.
Dump of assembler code for function main: 0x0804842c <main+0>: push %ebp 0x0804842d <main+1>: mov %esp,%ebp 0x0804842f <main+3>: sub $0x8,%esp 0x08048432 <main+6>: and $0xfffffff0,%esp 0x08048435 <main+9>: mov $0x0,%eax 0x0804843a <main+14>: sub %eax,%esp 0x0804843c <main+16>: sub $0x8,%esp 0x0804843f <main+19>: push $0x180 0x08048444 <main+24>: push $0x8048580 0x08048449 <main+29>: call 0x804832c <creat> 0x0804844e <main+34>: add $0x10,%esp 0x08048451 <main+37>: mov %eax,0xfffffffc(%ebp) 0x08048454 <main+40>: cmpl $0x0,0xfffffffc(%ebp) 0x08048458 <main+44>: jns 0x8048484 <main+88> 0x0804845a <main+46>: sub $0xc,%esp 0x0804845d <main+49>: push $0x80485a0 0x08048462 <main+54>: call 0x804835c <printf> 0x08048467 <main+59>: add $0x10,%esp 0x0804846a <main+62>: sub $0xc,%esp 0x0804846d <main+65>: push $0x8048580 0x08048472 <main+70>: call 0x804833c <remove> 0x08048477 <main+75>: add $0x10,%esp 0x0804847a <main+78>: sub $0xc,%esp 0x0804847d <main+81>: push $0x0 0x0804847f <main+83>: call 0x804836c <exit> 0x08048484 <main+88>: sub $0x4,%esp 0x08048487 <main+91>: push $0x1f 0x08048489 <main+93>: push $0x80485e0 0x0804848e <main+98>: pushl 0xfffffffc(%ebp) 0x08048491 <main+101>: call 0x804830c <write> 0x08048496 <main+106>: add $0x10,%esp 0x08048499 <main+109>: sub $0xc,%esp 0x0804849c <main+112>: pushl 0xfffffffc(%ebp) 0x0804849f <main+115>: call 0x804831c <close> 0x080484a4 <main+120>: add $0x10,%esp 0x080484a7 <main+123>: sub $0xc,%esp 0x080484aa <main+126>: push $0x8048580 0x080484af <main+131>: call 0x804833c <remove> 0x080484b4 <main+136>: add $0x10,%esp 0x080484b7 <main+139>: leave 0x080484b8 <main+140>: ret 0x080484b9 <main+141>: nop 0x080484ba <main+142>: nop 0x080484bb <main+143>: nop End of assembler dump.
대강 어셈블리 코드를 읽으면 level5.tmp를 만든 후에 문제가 생기면 파일을 바로 지우고 에러에 대해 출력하고, 문제가 없으면 종료하지 않고 파일에 비밀번호를 입력한 후에 remove 함수로 삭제하는 것을 알 수 있습니다.
이 중간에서 링크로 내용을 다른 곳으로 옮겨서 데이터를 유지하는 것입니다.
반응형'정보보안 > CTF write-up' 카테고리의 다른 글
[pwnable.kr] fd 문제 풀이 / write up / pwnable.kr 소개 (0) 2022.02.14 [Write up] FTZ level6 풀이_ 인포샵 bbs (0) 2020.07.20 Chujowy CTF Write up _ beginner – Insanity1 (0) 2020.07.20 [FTZ] F.T.Z level4 풀이 (write up) (0) 2020.04.30 [FTZ] FTZ level3 문제 풀이 ( write up ) (0) 2020.04.25