본문 바로가기

CTF_Write_UP/HackCTF

[HackCTF] j0n9hyun's secret

시작

안녕하세요 :D

전역하면 바로 복학이라.. 2학년 때 배우는 자료구조 공부하느라 포너블을 많이 못 하고 있습니다 ㅠㅠ

남이 만들어 놓은 것을 뚫기만 하다가 직접 구현을 하려니 어렵네요ㅋㅋㅋㅋㅋ

나중에 시간 되면 백준 풀면서 어려웠던 문제들을 라이트업 형식으로 써놓으려구요.

자료구조는 잠깐 접어두고!! 오늘은 HackCTF의 450점짜리 문제를 풀어봤습니다.

시작해보죠!!

Write UP

 

stripped binary이고, NX만 걸려있네요.

 

 

실행시키면 input name: 을 출력 후 사용자의 입력을 받고 종료되는 간단한 프로그램입니다,

종료 후 ls 명령어를 보니 flag 파일과 top_secret 파일이 떨어져있네요?

로컬에선 두 파일 모두 비어있는데, nc로 붙이면 어떨지 확인해보겠습니다.

 

 

그냥 종료되는 로컬 환경과 달리 j0n9hyun씨가 오타쿠라는.. 정보를 떨궈주네요.

flag와 top_secret 파일 중 하나의 내용을 긁어와서 출력하는 것이 아닐까.. 란 의심을 품은 채로 gdb 분석을 해봅시다.

 

objdump -f ./file_name 명령어로 스타트 주소를 찾아도 되지만, 코드가 너무 많더라구요.

그래서 저는 이런 방법을 썼습니다.

아무리 코드가 길어도 printf()와 같은 함수로 input name:을 출력해야 하기 때문에
인자값에 넣어주는 부분이 필요해요.

일단 실행시킨 후 input name:을 찾고, 이 주소가 들어가는 코드를 grep하면 출력부분을 찾을 수 있습니다.

 

 

IDA가 있다면 더 편하겠지만, gdb로도 충분이 가능합니다 ㅎㅎ!!

0x400a45에 bp를 걸고 달려봅시다.

 

 

이런 느낌으로 코드가 진행될 것 같네요.

밑에 있는 두 개의 call은 직접 봐야 할 것 같습니다.

정리만 해보자면
0x43f6d0(0x6cce98's value, 0x6ccd6a, 0x12c)0x43f730(1, 0x6ccd6a, rbp-0x4) 에요.

첫 번째 call부터 들어가봅시다. 0x6cce98이 무슨 값인지부터 확인해볼게요.

 

 

4가 있습니다. 함수 안을 직접적으로 살펴봐요.

 

 

eax에 0을 받아서 syscall 하네요. 0번은 read()죠?

결국 이 친구는 read(4, 0x6ccd6a, 0x12c)를 수행하는 녀석이었습니다.

4번 fd를 가진 파일에서 0x12c bytes를 읽어와 0x6ccd6a에 써 주는 함수네요.

자.. 4번 fd는 누구를 가리키고 있을까요?

 

 

lsof 명령어는 프로세스가 참조하는 파일을 보여줘요.

4번의 정체는 top_secret 파일이었습니다. 얘를 읽어와서 0x6ccd6a에 쓰는 거였네요.

이제 다음 함수로 가보겠습니다.

 

 

eax에 1을 넣고 syscall 하네요. 얘는 write()인 걸 알 수 있습니다.

`write(1, 0x6ccd6a, rbp-0x4), 즉 표준 출력으로 read()에서 받았던 내용을 뽑아줍니다.

rbp-0x4 부분은 read() 함수의 리턴값을 그대로 넣어주고 있으니 크게 신경 안 써도 될 것 같네요.

결론적으로 이 프로그램은 fd가 4번인 top_secret 파일을 참조해 버퍼에 쓰고, 그걸 출력하는게 전부였습니다.

top_secret 파일의 내용이 jon9hyun 씨는 오타쿠다.. 였네요.

우리는 flag 파일의 내용을 봐야하니깐 fd를 결정하는 0x6cce98 부분을 overwrite해야 합니다.

4라는 값을 3으로 바꿔주면 되겠죠?

scanf() 함수가 0x6ccd60부터 길이제한 없이 입력 받으니
0x6cce98 - 0x6ccd60 = 0x138, 312 bytes의 더미를 채운 후 3을 보내면 될 것 같습니다.

코드입니다.

 

 

엄청.. 짧네요.

 

Exploit!!

마무리

fd를 조작하는 단순한.. 문제였습니다.

방대한 코드량를 보고 겁 먹었는데ㅋㅋㅋㅋ 역시 일단 뜯어봐야 돼요.

감사합니다 :D

 

'CTF_Write_UP > HackCTF' 카테고리의 다른 글

[HackCTF] Unexploitable_3, 4  (0) 2019.11.16
[HackCTF] babyfsb  (0) 2019.11.13
[HackCTF] You are silver  (0) 2019.11.02
[HackCTF] World Best Encryption Tool  (0) 2019.10.22
[HackCTF] Register  (0) 2019.10.15