[CodeFest 2021] :pwn: Write-Up

두비니

·

2021. 3. 20. 23:37

 

CodeFest 2021에 참여했습니다. 난이도는 어렵지 않았던 것 같아요

다행이도 포너블은 올클했습니다.(쉬웠지만,,)

 

 

LineCTF가 너무 어려워서 힐링 겸 풀었던 것 같습니다.

고고

 

 

All Source Codes : github.com/IIT-BHU-CyberSec/Codefest-CTF-2020

 

IIT-BHU-CyberSec/Codefest-CTF-2020

Source code and scripts for Codefest CTF 2020. Contribute to IIT-BHU-CyberSec/Codefest-CTF-2020 development by creating an account on GitHub.

github.com

 

 

 

 

 

1. C is hard

 

 

 

이번 Codefest 문제들은 문제 자체로 보면 매우 쉬웠지만, 아이다로 열릴 때 의도한대로 열리지 않아서 많이 당황했습니다ㅠㅠ

 

 

일단 이렇게 몇 개를 제외하고 모두 안보이는 것을 볼 수 있습니다.

 

 

근데 파일을 보면 stripped된 것도 아닌데, 어떻게 하는건지 모르겠네요... 아무튼 문제 풀 당시에는 직접 어셈분석해서 풀었고, ghidra라는 프로그램을 사용하면 이거랑 상관없이 모든 코드를 보여줘서 풀이 자체는 기드라 기반으로 보겠습니다.

 

네. vuln함수 안으로 들어가네요.

 

 

네...너무 뻔하죠?

 

네 심지어 print_flag도 주어져서 그냥 페이로드 작성했습니다.

 

 

 

이친구만 플래그 딴 스샷이 없네요ㅠ 아무튼 굳굳

 

 

 

2. Take me to a Cafe

 

 

나름 3블러드땀

 

 

main

 

vuln

 

네. 지금 코드를 직접 보면 변수를 직접 출력하기때문에 너무 뻔한 fsb 문제입니다. 그러나 나는 저걸 이런 상태의 gdb로 분석을 했고...

 

우왕

 

아무튼... 문제 풀 당시에는 파일이름이 format이여서 fsb겠거니하고 찍어서 풀었습니다.

 

 

 

good

 

 

 

3. Welcome to the Pawry

 

 

어셈보고 풀때는 죽을 쓰다가 기드라 쓰면 된다는거 알아내고 이마를 몇번을 친건지..

 

 

main

 

진짜 이 바보가ㅋㅋㅋㅋㅋ 저걸 char로 바꾸면 리틀엔디안으로 바뀐 /bin/cat flag.txt가 됩니다. 거기다가 system함수도 아예 프로그램 안에 박혀있어요. 그래서 그냥 RTL로 끝내면 되는데 puts 함수주소 줬다고 이상한 난리를 치다가... 암튼 RTL 하믄 됩니다

 

 

vuln함수

 

vuln함수 안에서는 gets로 입력을 받기 때문에 return까지 쉽게 overwrite했습니다. offset은 gdb분석을 통해서 알아냈어요.

 

 

짜잔 이렇게 system도 준답니다

 

 

이렇게 풀면 되는데, 이거 풀 때 당시에는 gets 에서 입력을 받는 변수 위에 있는 "/bin/date"부분을 바꿔야하는줄 알고 "이거 어케품...?"이러고 있었습니다. 암튼 풀었으니깐 된걸로

 

 

으휴으휴

 

나머지는 푼게 welcome뿐이여서ㅋㅋㅋ.. 나머지 문제들 라업 보고 정리해서 올리려고 합니다.

별거 아닌 거 가지고 쩔쩔매는 제 모습이 매우 인상깊었던 ctf입니다.

요즘 오만방자해진 제 마음을 다잡을 수 있게 해주네요.

 

 

GG