[yummyCTF] 1st. Encoding

4 분 소요

으아니.. 으아니 거진 6개월만이라니!! 그것도 OS도 아니고 Hacking Tool도 아니고!!

네 제가 사실 7월 18일 Securityplus Union Academy 에서 개최한 2회 CTF의 리버싱문제를 출제하게 되었슴니다 꺄륵! 꺄륵!

오랜만에 여러분과 마주하려하니 가슴이 두준두준하네염!! 오지게 인사 박겠슴다!!



요즘 ㅜㅠㅜ 회사일 ㅜㅠ 넘많아여 증말 수투레쑤... 여기다 징징징 댈 수는 없으니 흐헝허헣어 나중에 기회되믄 뮤슨 일을 맡고있는지 싸아악 정리해서 알려드릴게욤!!


첫 번째 문제는 인코딩 문제예여!! 여러분이 잘 아는 인코딩엔 무엇이 있나여!? URL? Base계열? 호에.. 인코더 디코더여? 너님 티어 무엇? ㅋㅋㅋㅋ이번에 이모티콘 재미난거 나왔든디 무엇 고릴라 ㅋㅋㅋ



완전웃겨여!! 제가 비록 게임을 안해서 티어라는 단어를 완벽히는 모르지만 뭐 계급같은거 아니겠숨니까!! 이 상황 무엇?! 무엇무엇!!

오랜만에 와서 그런지 하이-텐션이네욤 히히 문제는 따로 필요하시다면야.. 상황봐서 올리거나 드리거나 하게쑴니당!

제가 OS 개발을 하고있었자나욤? 그래가지구 bootloader - kernel disk image 관련 문제를 하나 내고 싶더라구요!!

그런데 막무가내로 문제내믄 욕먹을까봐.. 조오시임히 찾아보니 키야 2017년도 ctfs 를 보니 disk image 문제가 있었군뇨!! 물논 제꺼와는 비교도 안되게 완벽도 높구 "이것이 너와 나의 리버싱차이다" 를 보여준 것 같았지만, 그래두 저는 홀로 열씸히 만들었으니 첫 문제 출제 겸 SUA 회원들의 실력을 감안해 달라는 이야기를 들은 겸사겸사루 난이도 조절을..

넵 죄송함다 제가 사실 낼 줄을 몰라서 난이도가 허접한것임다.. ㅜㅜㅠ


주어지는 파일은

요고 하나예여! 이제 알아서 실행시켜야져 뭐.. 사실 실행 안시켜도 답 찾을 슈 있었다능~


제가 의도한 문제풀이는 정상 실행을 시켜서, 알려준 정보의 값을 찾아라.. 인데 솔직히 뭐 CTF에서 출제자의 의도를 완벽히 이해해서 그대~로 풀면 시간 많이걸리지 않나유? 우회하고 막 파고들고 그냥 들이박고 그러는게 CTF 아닌가여?! 제가 잘 몰라서.. 헤헤


우선 qemu 를 설치합니다! 퀘뮤퀘뮤! 올만에 듣져? OS 개발에서 쓰는데 퀘뮤잖아여!! 제 블로그를 봤다면 퀘뮤 사용법쯤 알텐디!! 출제자가 누군지도 밝혀지는디!!

퀘뮤를 설치한 후 퀘뮤를 실행하기 위한 스크립트 파일 하나 생성해야쥬~ 매번 명령어 치기엔 옵션이 넘나 많음..



고럼 요로케 start_qemu 파일에 qemu-system-x86_64 커맨드를 이용하여 -L . (현재 디렉터리에) -m 64 (64MB 메모리) -fda ./yummyEncode.img (floppy disk 이미지를 넣고) -localtime -M pc -gdb tcp::32123 을 통해 원격디버깅을 준비해줍씨다!!


실행시켜보니 오옹... This stage very easy. Flag is SUACTF{FLAG_HAS_OTHER_BACKGROUND}! 라고 나오네염!! 그럼 일단 플래그처럼 생긴거 뿜뿜했으니 "아 출제자가 그냥 준 문젠갑다" 생각하고 넣어봐야져!! 괜히 복잡하게 생각해서 "이건 아닐거야.." 하다보믄 시간만 낭비해유 ㅜㅜ

허나 저거슨 플래그가 아님니다! 저 의미를 해석해보면 "Flag has other background" .. 플래그는 다른 배경을 가지고 있다? 모래는거냣


우리는 디버깅을 위해 이미 remote gdb 허용을 해두었어여!! 고로타면 32123 포트로 gdb target remote 딱 붙으면 금~방 알지 않겠나요!?

허나 부트로더의 시작주소인 0x7c00 에는 브레이크 포인트가 잘 안걸림니다... 0x7c09 로 넘어가는 bsp address로 가거나 0x7c07 로 넘어가는 ap address 로 넘어가서 슥샥쇽- 뛰어넘어버려영 ㅜㅜ우씨 그럼 제대로 된 디버깅이 안될거아니야!!!

그런 우리를 위해 갓갓퀘뮤는 조은옵션을 제공해줬어여!! 바로바로 -S 입니다!! 부트로더 시작할 때 먼저 Stop! 하고 걸어주는 예쁜 옵션이에욤 히히


이제 시작할 때 gdb target remote :32123 으로 먼저 원격디버깅 딱 붙어주고! b *0x7c00 으로 브레이크 딱 걸어 주고! 고러면 요로케 됩니당!!



어때요 정말 쉬입죠? 희희

그리고 이제 브레이크가 걸리나 보자아~~ continue 를 해봅씨다아~~



호모나 섹상에! 컴퓨터 켰을 때 항상 보이던 그런 창이 뙇 떠주네염!! Floppy 를 통해서 Booting 을 진행한다고 친절하게 설명도 적혀있어욤!!

그리고 또 continue 를 하믄 당연~히 지금 브레이크가 없으니 또 "플래그는 다른 배경색이다 이녀석아" 라고 하겠져? 훔... 그롬 어디에 브레이크를 걸어야하는거져? 모르겠으니 한번 디셈블을 해보아여!!


어랄라... disas $pc 가 안먹히는데여? 힝... 그럼 어떻게 해야할까여?!

x/20i $pc 를 통해서 현재 program counter 부터 20개의 instruction 을 보여준답니당!! 김옥지!!!

그래서 x/20i $pc 를 해보면 요로케 나와욤



오옹... 아무래도 0x7c00009 로 jmp 를 하구... 0x7c0b800 에 add를 하구.. 뭐라는건지 몰겠네욤...

기본 0x7c00 에서 아까 말씀드린 0x7c09 인 bsp address 로 점프해버리네여!! 어디에다 브포를 걸어도 요놈자슥이 튈 생각이었어여!

(.text 섹션에서 0x07c0 으로 jmp 하는데 그 이후의 점프는 START 명령으로 넘어가도록 jmp 0x07c0:START 가 되어있어욤! 그리구 그 아래 add eax,0x7c0b800 같은 경우 0xb800 값을 ax 레지스터에 넘기구 es 레지스터에 보옥사해서 이제 stdout 을 담당하는 곳이에욤 히히)


에? 갑자기 막 이상한 주소값이랑 어셈블 나오니 뭐라는지 모르겠다구여? 잘봐여 여기서 제가 nexti 를 마구하면 어떻게 되냐면요!!



요로케 쭈루룩쭈루룩 채워줘여!! 예전에 컴퓨터가 아주 느리던 시절 화면 버퍼 비울 때 요로케 비워지는거 아시나여?! 기억이 새록새록.. 게임도 이렇게 화면지우곤 했는뎀... 아.재.인.증!

그럼 이렇게 쭈우욱 넘어가면 답이 나오지 않을까요!? 라구여!?

수백만 수천만 돌려봤찌만 초기상태에서 넘어가지 않더랍디다 캬핳핳

사실 요문제는 기본 OS 부팅의 개념에 대한 문제여써욤.. 리눅스는 0x7c00 에서 부트로더가 시작되어 0x10200 에서 32bit kernel Entry Point 를 시작하거든욤!!

그래서 0x7c00 에 브레이크 포인트를, 0x10200에 브레이크 포인트를 걸어주면 뙇뙇 나옴니당!!



모야이게~ 문제가 요따구야~ 그리고 저건 또 뭔문자야~

우선 처음에 보았던 "플래그는 다른 배경 색상..쿨럭" 넵 분명 다른 색상은 맞죠..!? 희희


4:#$S26Q/7U96,%(Q9%]93$E-35D``


요로케 문자가 있는데, 이 문제의 핵심은 OS 부팅도 부팅이지만 문제이름이 Encoding 이예요!! 말그대로 요녀석은 인코딩된 문자라는것!! 빠밤-

혹시 UUEncode 라고 들어보셨나욤? SunOS 에서 base64 대신 지원하는 인코딩이기도 한데, base64 같은경우 끝에 = 또는 == 이 붙잖아여? 얘는 ` 또는 `` 이 붙어요! 요로케 허망 할 수가~~


얘를 이제 UUEncode decoder online site 에서 돌려볼까욤?



짜란~~ 좌측에 빠알갛게 제가 네모칸표시한곳에 나온 정답은!!!


h13IlO_VV0R1d_YLIMMY


이게 정답이었슴미다!!! 요번 문제는 다 YUMMY 들어가여 캬핳ㅎ하핳

번외편 하나 알려드릴까여? 사실 이거 image 파일 strings 로 보면 요상한것들이 보여욤



쪼기 위에서 7번째에 답과 같은 인코딩 문자열 보이져..? 흑 정말 허접하고도 쉬운 문제였어여... 전 아직 형편업슴니다 흑흑

그리구 뭐가 요것저것 있지여? 그냥 제가 괜히.. 최대한 코드 줄여서 스트링문자열 인코딩된거 막 넣어놨어여.. 넘 쉬워서 조금이라도 혼란줄라구...

인코딩 잘 모르면 이거봤을때 아니이게모람 이럴거아니예여 희희 저거 디코딩해보면 재미난 문자열들 나오니까 심심하면 해보셔두 조아여 꺄륵~


이상으로 첫 번째 문제 롸업을 마치겠슴니다!! 짝짝짝~ 마친김에 재밌는 짤 뭐없나 주섬주섬...



ㅋㅋㅋ젠부다요~ 고럼 2번째 롸업에서 만나욤!!


Check out the yummyhit’s website for more info on who am i. If you have questions, you can ask them on E-mail.

카테고리:

업데이트:

댓글남기기