요즘은 시험때문에 이것저것 너무 바쁜 날들을 보낸 것 같다. 개인적으로 하는 일이 시험만 있는게 아니라서 더더욱 그랬던 것 같다.

덕분에 코드게이트가 끝나고 열리는 pCTF에 참여조차 하지 못하였다... 그래서 그 한을 풀고자 쉘 스톰에서 문제를 받아 한번 풀어보았다. 그런데! 쉘 스톰에 보니 포렌식 문제가 두 문제밖에 없는 것이 아닌가!!! 이번년도 데프콘에서는 포렌식 문제가 출제되지 않는다고 하고 외국에서는 점점 포렌식을 홀대하는 것 같다는 느낌이 든다.

문제를 풀기전에 이야기를 들었을 때는 대회 당시 푼 팀이 몇팀 없다고 들어 두 문제중 그나마 점수가 낮은 150점 문제를 풀어보기로 했다. 아래는 문제의 지문이다.


"Meow meow mw mw m.


음.. 장난치는건가? find the key 보다 더 한 지문 같다고 개인적으로 생각한다. 아무튼 문제를 다운받아보면 rar 압축이 되어 있는 것을 확인 할 수 있고 압축을 풀면 바이너리 파일(cat.rar.bin)과 jpg 파일(cat.rar.jpg)이 함께 나온다.


일단 어떤 프로그램인지 알아야 하므로 바이너리 파일을 실행 해 보았다. 



[그림 1 - 문제 파일은 64bit 바이너리!]


아뿔싸! 나는 요즘 학교 실습 환경에 노트북을 세팅하느냐고 64bit 리눅스가 없다.. 그렇다고 이 문제를 풀기 위해 설치하는 것도 싫어 일단 strings로 어떤 프로그램인지 확인 해 보았다.


[그림 2 - steghide의 help 내용]


이제 어느정도 문제의 풀이 방향이 보이는 듯 싶다. steghide 파일은 스테가노그래피에 사용되는 툴이니 아마도 jpg 파일에 키 값이 숨겨져 있을 것이다. 또 여기서 주의해야 할 점은 바이너리 파일이 이런 힌트를 주려고 제공되었다고 생각하면 안된다는 것이다. 또 주어진 바이너리 파일을 이용 해 스테가노그래피를 풀라고 문제 출제자들이 친절히 바이너리 파일을 제공하지 않았다는 것도 주의해야 한다.

문제르 풀기위해서는 필연적으로 바이너리 파일을 분석해야만 했다. 일단 인터넷에 배포되고 있는 툴인 만큼 제공된 steghide 툴과 인터넷에서 배포되고 있는 정상적인 steghide 툴을 비교해 볼 필요가 있다. 비교해 본 결과 약간의 다른점을 찾아냈다.

먼저 정상 steghide의 내용을 보면 다음과 같은 내용들이 반복되어 있다.


[그림 3 - 정상 steghide 내용]


다음은 대회에서 제공 된 steghide 파일이다.


[그림 4 - 제공 된 steghide 내용]


한눈에 봐도 steghide 파일 내용이 다르다는 것을 알 수 있다. 정상파일은 일정한 패턴이 반복되는 반면에 제공 된 파일에서는 여러 패턴이 나타나는 것을 볼 수 있다. 무언가 데이터가 추가되었거나 데이터가 수정되었다는 것을 의미하므로 포렌식 문제에 걸맞게 카빙을 시도해 보았다.

foremost로 카빙을 시도 했을 때 일반 파일 몇개가 카빙되었지만 사실 별 볼일 없는 파일들이어서 foremost에서 기본적으로 지원하지 않는 압축파일들을 상대로 카빙을 시도해 보았다. 그 결과 파일이 하나 카빙되었다.


[그림 5 - 카빙 된 zlib 파일]


이제 zlib의 압축을 해제해야 한다. 간단하게 python에서 제공하는 zlib.decompress() 함수를 사용 해 압축을 해제 하자.


[그림 6 - decompress]


[그림 7 - 파일 종류 확인]


파일 종류를 확인 해 보니 wav 파일이다.


unzlib.wav1


들어보면 무언가 빠르게 말을 하는데 영어를 잘 하지 못해 here라는 단어만 정확하게 들려 해당 단어를 혹시나 하는 마음에 두 steghide 파일에서 검색해 보았다. 검색해 본 결과 정상 steghide 파일에는 없고 문제에서 제공 된 steghide 파일에만 존재하는 문자열이 존재하고 있었다.


 - the passphrase cannot be pills here.


문장의 의미 또한 프로그램 성격과는 맞지 않는 문장인 듯 싶다. passphrase 단어는 steghide에서 많이 사용되므로 pills 단어를 추가로 검색해 보았다.


 - pills_wav_len

 - pills_wav_zliblen

 - _GLOBAL__I_pills_wav_len

 - pills_wav_zlibdat


여러 단어들이 나오는데 아마 문제 출제자가 wav 파일에 대한 힌트로 넣어둔 것이 아닐까 생각이 든다.

무튼 wav 파일을 들으면 이제는 pills here 라고 어느정도 들리게 된다. pills here 가 들어간 "the passphrase cannot be pills here." 문장을 키 값으로 하여 wav 파일과 jpg 파일을 steghide 툴로 돌려보자.


root@SIFT-Workstation:/home/sansforensics/Desktop# steghide extract -sf cat.rar.jpg -p "the passphrase cannot be pills here."

wrote extracted data to "part1.txt".

root@SIFT-Workstation:/home/sansforensics/Desktop# steghide extract -sf unzlib -p "the passphrase cannot be pills here."

wrote extracted data to "part2.txt".

root@SIFT-Workstation:/home/sansforensics/Desktop# cat part1.txt 

st3g0_suck5_need

root@SIFT-Workstation:/home/sansforensics/Desktop# cat part2.txt 

s_moar_reversing

root@SIFT-Workstation:/home/sansforensics/Desktop# 


두 값을 이어보면 st3g0_suck5_needs_moar_reversing로 문장이 완성된다. 형태로 보아 키 값인듯 하다.


key : st3g0_suck5_needs_moar_reversing





'[+] Hacking > [-] Challenge Report' 카테고리의 다른 글

[SharkFest Challenge] #1 Write up  (0) 2013.09.08
OverTheWire Natas All Clear  (0) 2013.06.24
pCTF 2013 Forensic 150점 풀이  (0) 2013.04.30
CAT Security Forensic 1 Write-Up  (2) 2012.12.07
SANS Forensics Puzzle 10 Write up  (6) 2012.10.14

정말 얼마만에 블로그에 글을 올리는지 모르겠다. 간간히 페이스북으로 지인분들의 소식과 올려주시는 링크들을 통해 보안쪽과 포렌식쪽의 소식은 듣고 있었지만 사실 한번 훅 훑고 말았던지라 현재 내게 남은 링크에 대한 기억은 거의 없는 편이다... ㅠㅠ

얼마전 카톨릭대학교의 보안동아리인 CAT Security와 홍익대학교의 HUST 대회가 개최 되었었는데 이번 글에서 CAT Security에서 출제한 Forensic 1번 문제를 풀이 해 볼 생각이다.

국내 대학교 동아리에서 여는 대회나 해커 커뮤니티에서 개최하는 대회들은 그 문제들을 구하기가 쉽지 않아 아는 지인분을 통해 문제들을 구해 풀어보았다. 사실 문제 풀이에 대한 포스팅은 하지 않으려 했으나 문제를 풀고 보안프로젝트에 올라온 어떤 분의 풀이보고서를 보니 Forensic 문제를 대부분 게싱이나 삽질(?)에 의해서 푼 흔적이 많이 보여 Forensic 관점에서 해당 문제를 어떻게 보아야 하고 어떻게 풀어야 하는지에 대해 한번 기술해 보려 이렇게 글을 쓰게 되었다.


사설이 길었다! 바로 풀이를 시작해 보도록 하겠다.


먼저 문제를 살펴보자.


Find the Key :) 


문제 한번 정말 간단하다! 무작정 키를 찾으라는 이런 문제는 문제를 풀이하는 입장에서 보면 정말 황당하고 막막한 문제가 아닐 수 없다. 일단 문제 파일에는 확장자가 붙여져 있지 않으므로 리눅스 계열에 있는 file 명령으로 해당 파일이 어떤 파일인지 파악해 보면 쉽게 어떤 파일인지 파악 할 수 있다.


[그림 1 - 파일 종류 확인]


파일 종류를 확인했더니 FAT 32라고 알려준다. 그럼 이제 무엇을 해야 할까? 사실 여기서부터는 여러가지 방향이 있다. 이미징 파일이니 바로 FTK Imager, EnCase 등으로 분석을 할 수도 있고 현재 파일에 속해 있는 키 값을 문자열 검색으로 찾아 볼 수도 있다.

나는 후자를 선택하여 strings로 문자열을 먼저 검색해보도록 하겠다.


[그림 2 - 문자열 검색]


문자열 검색 결과 마지막을 보면 뭔자 알 수 없는 문자열들이 보이는데, 이는 퍼지해시 툴로 많이 알려진 ssdeep의 출력 값이다.

여기서 ssdeep를 한번이라도 사용 해 본 사람이라면 해당 해시 값을 이용해 무엇을 할 수 있는지 알 수 있을 것이다. 일단 이부분에 대해서는 조금 더 뒤에 이야기 하도록 하겠다. 일단 저 문자열을 기억해 두도록하자.


그럼 이제 해당 파일을 FTK Imager 등으로 열고 안에 무슨 파일들이 존재하는지 살펴보도록 하자.


[그림 3 - 문제파일의 내용]


[그림 3]에서는 모두 보이지 않지만, 모두 png 파일 포맷의 이미지 파일들이 잔뜩 들어 있다. 간혹 정상적으로 보이는 이미지도 있고 안보이는 이미지도 있는데, 이는 왜 그런지 해당 파일들을 모두 Export 해보면 알 수 있다.


[그림 4 - 정상적으로 보이지 않는 이유]


보이지 않는 파일들의 속성을 보면 너비와 높이가 모두 1픽셀로 수정되어 있어 정상적으로 열려도 우리들 눈에 보이지 않는 것이다. 여기서 대부분의 사람들은 해당 파일들이 key와 관계가 있다는 것을 직감하고 1픽셀로 수정 된 모든 파일들을 아까 보았던 ssdeep 문자열에서 512*384를 생각해 픽셀을 해당 크기로 수정하여 문제를 풀었을 것이다.(추측일 뿐입니다.)

물론 그렇게 해도 1픽셀로 수정되어 있는 이미지는 유한정하기 때문에 key와 관련되어 있다면 얼마 시간이 지나지 않아 풀 수 있다. 하지만 문제 출제자의 의도는 그렇지 않다는 것이 현재 내 생각이다. 이런 방법으로 풀기 원했다면 힌트아닌 힌트로 ssdeep 출력 값을 넣어놨을리 없기 때문이다. 

문제 출제자가 공들여 ssdeep 출력 값을 넣어두었으니 나는 그것을 이용해 풀어보도록 하겠다. 먼저 txt 파일등에 해당 문자열을 넣어둔다.


[그림 5 - ssdeep 출력 값을 txt파일에 저장]


그 후 해당 해시 값과 비슷한 해시 값을 가지고 있는 파일을 위 이미지 목록에서 찾기 위해 ssdeep를 사용하자. ssdeep는 지정한 해시 값과 비슷한 해시 값을 찾아 그 유사율을 체크하고 사용자에게 그 유사율을 출력해주는 기능을 가지고 있다.



[그림 6 - ssdeep가 출력한 해시 유사율]


ssdeep는 지정해 준 해시 값과 jukrptdjdy.png의 해시 값이 99% 일치한다고 알려주었다.(99%의 이유는 픽셀 오프셋이 수정되었기 때문) 실제로 해당 파일을 보면 1픽셀로 수정되어 있는 수상한 파일이다.


[그림 7 - ssdeep가 찾아준 수상한 파일]


이제 해당 파일을 원본파일이름에 명시 된 512*384 크기로 수정을 해주자. 수정은 png 파일 포맷을 보고 하면 되니 이 부분은 생략하도록 하겠다. 수정을 하면 다음과 같은 이미지를 볼 수 있다.


[그림 8 - 키 값이 적혀 있는 이미지 파일]


드디어 문제에서 찾으라던 키 값을 찾았다. 사실 어려운 문제도 아니고 풀이 방법도 어렵지 않기 때문에 출제자 역시 해당 문제를 레벨 1로 두었었으리라 생각된다. 하지만 출제자도 포렌식을 공부하는 사람이었기에, 풀이하는 사람들이 포렌식에서 유용하게 사용하는 해시 값에 대해 조금 더 깊이 있고 넓은 지식을 가지길 원해 이런 문제를 출제 한 것이 아닌가라는 생각해 본다. 아님 말고 :-)


'[+] Hacking > [-] Challenge Report' 카테고리의 다른 글

OverTheWire Natas All Clear  (0) 2013.06.24
pCTF 2013 Forensic 150점 풀이  (0) 2013.04.30
CAT Security Forensic 1 Write-Up  (2) 2012.12.07
SANS Forensics Puzzle 10 Write up  (6) 2012.10.14
exploit-exercises Nebula - Level05  (0) 2012.07.27
  1. 익명 2013.07.11 15:02

    비밀댓글입니다

    • Favicon of https://maj3sty.tistory.com BlogIcon MaJ3stY 2013.07.12 21:49 신고

      오 예상하지 못했던 댓글이네요 ㅎㅎ

      방문해주셔서 감사합니다 :)

SANS에서는 비정기적으로 네트워크 패킷을 기반으로 한 포렌식 챌린지를 진행하곤 한다. 현재 총 10개의 문제가 출제되었고 작년 크리스마스에는 크리스마스 특별(?) 문제를 출제하였었다. 이번에 풀이해 볼 네트워크 포렌식 문제는 가장 최근에 나온 문제로, 필자도 참여했었던 문제이다. 처녀출전이라 어떻게 해야 입상에 가까워지는지 파악을 하지 못해 입상은 하지 못했지만 나름 시간 내가며 풀어 제출 했다는 것에 의의를 두어야 겠다고 생각한다. 총 6개의 질문과 보너스 질문 한가지 존재하며 보너스 질문은 답변 할 시 추가 점수가 부여 된다. 그럼 이제 질문 하나씩 답변 해보자.(아주 간단히 설명하도록 하겠다. 원래는 분석하고 그 정보를 결합해야 하는 부분들이 많이 존재하지만 글이 길어지므로 핵심만 짚고 넘어가겠다.)


문제로는 위에서 설명하였듯이 두가지의 파일이 주어진다.


quarter-SDHC-snippet.dd – A DD image of a the SDHC card found inside the quarter.

pcap-from-surviving-hard-drive.pcap – A packet capture that you copied off the surviving hard drive.


1. In his conversation with juniorkeyy, how old does Larry initially say he is?

(래리는 juniorkeyy와의 대화에서 처음 자신이 몇살이라고 말하는가?)


먼저 문제 파일로 제공 된 dd image 파일을 FTK 등으로 열어보면 여러가지 삭제 된 그림 파일들과 채팅 로그들이 발견된다.


[그림 1 - 삭제된 여러 파일들]


여기서 채팅 로그를 5개 볼 수 있는데 제일 첫번째 채팅 로그를 보면 다음과 같은 말을 한다.

2:38:17 PM Larry Pesce: I'm 4.

채팅 로그를 조금 더 읽어보면 다음과 같은 말 때문에 혼동이 올 수 있지만 질문에서는 처음 말한 말을 지칭하고 있기 때문에 위 말이 정답이 된다.

2:45:27 PM Larry Pesce: oh right.  yeah, I mean I'm 18. I swear.  4 + 14 = 18 right?

 - Answer : 4


2. What was the filename of the file that had the following SHA256 sum:

(다음 SHA256 값을 가지는 파일 이름은 무엇인가?)

e56931935bc60ac4c994eabd89b003a7ae221d941f1b026b05a7947a48dc9366


사실 이 부분에서는 프로그래밍을 해 간단히 알아내는 방법도 있다. 필자도 그렇게 하였다. 하지만 개학하기전 노트북을 새로 설치하며 자료가 사라져 이번에는 인터넷에 배포 되어 있는 툴을 이용하였다. 간단히 하려면 리눅스등에서 지원하는 sha256sum 명령과 *를 이용해 알아내도 된다. 


[그림 2 - 모든 파일의 SHA256 해시 결과]


하이라이트 된 부분을 보면 질문에서 제시 된 해시 값과 동일한 것을 볼 수 있다.


 - Answer : superstrand.jpg


3. What is the SHA256sum of the photo from the “dd” image that shows Larry taking a bite out of a wireless router?

(dd 이미지에서 래리가 라우터를 먹는 듯한 모습이 있는 사진의 SHA256sum 값은 무엇인가?)

사진들을 보면 래리가 라우터를 먹는 듯한 모습은 2개의 사진으로 존재한다. 혹시 몰라 문제 풀이 당시에는 이 두 사진 모두의 해시 값을 제출하였었다.

[그림 3 - haxorthematrix-has-a-posse.jpg]



[그림 4 - larryeatswrt.jpg]


이 두개의 sha256sum 값을 구해보면 다음과 같다.


 - Answer : e4e2fac9fc41546239d4e534bfe6588e4796f3799befc09b2787f5ad6c75faca(haxorthematrix-has-a-posse.jpg)

                1bdfd9d7445d38fdb7ba5acbb58669cf31c7c568c7aa6e6fcf0c961628f4c32e(larryeatswrt.jpg)



4. What is the SHA256sum of the image that shows zombie Larry taking abite out of a cat?

(래리가 고양이를 먹는 듯한 모습이 담긴 사진의 SHA256sum 값은 무엇인가?)

사진 파일들 중에서는 한가지 파일밖에 존재하지 않는다. 왠지 희망을 북돋아주려는(?) 질문 같다.


[그림 5 - Larry_zombie_cat.jpg]


 - Answer : 9c0a8bc6c3baa2ad7f390ef4e41c3edf3d98a543f492afb50a4bab8700af5766(Larry_zombie_cat.jpg)



5. What is Larry saying as he rocks back and forth? (No spaces or capital letters.)

(래리가 앞뒤로 무엇을 말하는가?)

사실 이 질문은 번역부터 어려웠다. 일단 dd image 파일에는 동영상 파일이 두개 있는데 하나의 파일은 가방을 무식하게 두들겨 가며 여는 동영상이고 하나는 래리로 보이는 사람이 담요를 덮어쓰고 뭐라고 반복해서 말하는 동영상이었다. 아무래도 래리로 보이는 사람이 반복해서 무엇인가를 말하는 동영상이 이 질문과 관련된 동영상 같아서 여러번 반복해서 들어보았다. 조금 느리게 들어보니 "naked hack"이라고 들리는 것을 확인 할 수 있는데, 질문에서 "back and forth" 가 걸렸다. 그래서 "hacknaked" 이라고 문제 풀이 할 때에는 결론을 내렸었다. 하지만 이 결론도 오래가지는 못했다. 아래 질문들을 풀다보면 스테가노그래피에 사용되는 키를 찾을 때 이 질문에서 찾은 답이 키라는 것을 가정하고 여러번(hacknaked, nakedhack, dekankcah 등) 시도를 했었는데 키는 결국 dekankcah 였다.

(답이 확실한지는 아직 모르지만, 답을 제출 할 때에는 제일 신빙성이 있어 보이는 아래 답변으로 제출 하였다.)


 - Answer : dekankcah


6. Where are Paul and John? Report their GPS coordinates:

(Paul과 John은 어디있는가? GPS 좌표를 찾아라)

a) Latitude(위도)

b) Longitude(경도)


dd image에 들어있는 파일들 중 EXIF 포맷의 이미지들이 몇 개 있지만 GPS 정보를 담고 있진 않았다. 이제 네트워크 패킷을 분석 할 차례라고 생각하여 네트워크 패킷을 분석하였다. HTTP 오브젝트 파일들을 보니 다음과 같이 google과 bing을 검색한 흔적이 보였다.


[그림 6 - google 검색 패킷]


참고로 구글의 검색 패킷들은 [그림 6]과 같이 실시간 검색으로 인해 한번의 검색이라도 수많은 패킷들이 생성된다. 실시간으로 계속해서 검색 서버에 쿼리를 날려주기 때문이다.

최종적으로 검색한 결과들을 보면 how do i hide things in pictures 라는 검색을 한 것을 볼 수 있는데 접속한 사이트로 접속을 해보면 7z를 이용한 파일 숨기는 방법이 나열 된 페이지를 볼 수 있다. 분석이 마무리 되어가는 시점에 SMB패킷을 발견했는데 SMB 오브젝트 파일을 검색해 보니 다음과 같이 fragment된 jpg 파일을 볼 수 있었다.


[그림 7 - SMB 오브젝트 리스트]


위 파일들을 저장해 3095byte의 파일을 footer 파일로 정해두고 4096byte 파일 중 헤더 파일을 찾은 뒤 여러 갈래로 조합해 보았다. 조합한 결과는 다음과 같이 참혹하였다.


[그림 8 - 참혹한(?) 조합 결과]


사실 이 이미지는 dd image에서도 찾아 볼 수 있는 이미지이다.(위 3번 질문의 답) 동일한 이미지라고 생각이 되어 다시 한번 조합을 시도해 보았다. 처음에는 SMB 헤더가 들어 있어 안되는 것인줄 알고 SMB 헤더를 제거하고 조합해 보았으나 동일한 결과를 얻었다...(ㅠㅠ) 그 후 다시 이미지를 살펴보았는데 오버랩핑(overlapping) 되는 24byte를 찾을 수 있었다.


[그림 9 - 24byte overlapping]


오버랩핑 된 부분을 한쪽만 지우고 다시 조합하니 아래와 같이 정상적인 이미지를 만들 수 있었다.

[그림 10 - larryeatswrt-with-secretsauce.jpg]


파일 제목과 구글 검색 결과를 연관지어 생각해보면 이미지에 어떠한 것을 숨겼다고 추측 할 수 있다. 일반적으로 이미지에는 스테가노그래피를 이용해 무엇인가를 숨기니 한번 풀어보도록 하자. 먼저 동일한 이미지(3번 질문 이미지)와 해시 값을 비교해 보고 실제로 존재하고 있는지 stegdetect를 이용 해 알아보자.


[그림 11 - md5 해시 값 비교]


[그림 11]을 보면 md5 해시 값이 다르다는 것을 알 수 있다. 조금 더 추측이 정확해져 가고 있다.


[그림 12 - stegdetect]


아무런 옵션 없이 점검하였을 때는 발견되지 않았지만 알고리즘 강도를 높여 점검하니 스테가노그래피가 적용되었다고 나오는 것을 볼 수 있다.


 * 참고 : 알고리즘 강도를 높이면 정상파일도 스테가노그래피가 적용되었다고 오진을 할 수 있다. 절대적인 신뢰성이 있지는 않다.


이제 outguess로 무엇이 숨겨져 있는지 추출해보자.


[그림 13 - outguess를 이용한 숨겨진 데이터 추출]


어떤 데이터인지 확인하고 열어보면 다음과 같다.


[그림 14 - 추출된 데이터]


정상적으로 숨겨진 데이터를 볼 수 있는데 좌표로 보이는 숫자들이 보인다.


 - Answer : a) Latitude(위도) : 6.421402

                 b) Longitude(경도) : 3.441021



BONUS. What is the name of the nearest bar?

(가장 가까운 bar의 이름은 무엇인가?)


이 문제는 6번 질문과 이어지는 질문으로 구글 지도로 위도와 경도를 검색하면 바로 옆에 보인다.


[그림 15 - GPS 검색 결과]

해당 bar 이름을 클릭하면 리뷰가 하나 있는데 읽어보면 확실하다는 감이 온다.


This bar was good, but there were some rowdy guys who would shout "WE'RE THE WORLDS #1 HACKERS" and then laugh loudly. No one understood why it was funny, but they were nice and bought the whole place many rounds of drinks.


 - Answer : Bar Baric


'[+] Hacking > [-] Challenge Report' 카테고리의 다른 글

pCTF 2013 Forensic 150점 풀이  (0) 2013.04.30
CAT Security Forensic 1 Write-Up  (2) 2012.12.07
SANS Forensics Puzzle 10 Write up  (6) 2012.10.14
exploit-exercises Nebula - Level05  (0) 2012.07.27
exploit-exercises Nebula - Level04  (0) 2012.07.27
  1. 익명 2013.04.10 17:58

    비밀댓글입니다

  2. 11 2013.11.17 21:26

    스태가노그래피은 보통 패스워드가 걸려있는데.. 이런문제들은 어떻게 풀어야하나요?

    • Favicon of https://maj3sty.tistory.com BlogIcon MaJ3stY 2013.11.20 09:03 신고

      비밀번호가 있다면 보통 문제 내에 여러 키워드들 중 하나가 스테가노그래피 비밀번호 입니다. 만약 그렇지 않고 브루트포싱 등의 문제라면 그건 문제의 질이 떨어지는 거라 볼 수 있어요 ㅎ

  3. 1234 2013.11.20 13:57

    아..그러쿤요 이번에 디지털범인을 찾아라 포렌식 대회?를 참여를 하고 있는데.

    패스워드로 추정되는 여러 문구가 나오지만 패스워드가 아니더라구요..

    흐미..무슨 퍼즐마추기 대회 같음 ㅠ

    • Favicon of https://maj3sty.tistory.com BlogIcon MaJ3stY 2013.11.20 20:39 신고

      아 대회 참여중이시군요 ㅎ

      건승하길 빌겠습니다 :)

About

Check the flag05 home directory. You are looking for weak directory permissions

To do this level, log in as the level05 account with the password level05 . Files for this level can be found in /home/flag05.

Source code

There is no source code available for this level


이번 문제는 프로그램이 주어지지 않는다. 문제의 목적은 flag05의 쉘을 획득하는 것이지만 프로그램으로 쉘을 획득하는 것이 아니다. 일단 flag05의 디렉토리에는 다음과 같은 파일들이 존재한다.


[그림 1 - flag05 디렉토리의 하위 디렉토리와 파일 목록]


이전 디렉토리에서는 보지 못했던 ssh 디렉토리와 .backup 디렉토리가 보인다. .backup 디렉토리에는 하나의 압축 파일이 존재한다.


[그림 2 - .backup 디렉토리 목록]


일단 해당 압축 파일에 무엇이 압축되어 있는지 보기 위해 옵션을 이용해 압축 파일의 내용을 확인해 보면 다음과 같이 몇개의 키 들이 들어 있는 것을 확인 할 수 있다.


[그림 3 - backup 압축 파일 내용]


내용들을 보니 아무래도 flag05 디렉토리에 있던 .ssh 디렉토리의 압축 파일인 듯 하다. ps로 ssh 데몬을 확인해 보면 구동되는 것을 확인 할 수 있다. ssh를 이용해 flag05 계정으로 접속하기 위해서 해당 키 파일들을 level05 계정의 홈 디렉토리로 압축을 풀어놓고 접속을 시도하면 flag05 계정의 쉘이 뜨는 것을 확인 할 수 있다.


[그림 4 - 압축 해제]

[그림 5 - ssh 접속 및 쉘 획득]


 * 참고 : ssh 접속은 ssh flag05@localhost 명령을 수행하여 접속 했다.



About

This level requires you to read the token file, but the code restricts the files that can be read. Find a way to bypass it :)

To do this level, log in as the level04 account with the password level04 . Files for this level can be found in /home/flag04.

Source code

#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <stdio.h>
#include <fcntl.h>

int main(int argc, char **argv, char **envp)
{
char buf[1024];
int fd, rc;

if(argc == 1) {
printf("%s [file to read]\n", argv[0]);
exit(EXIT_FAILURE);
}

if(strstr(argv[1], "token") != NULL) {
printf("You may not access '%s'\n", argv[1]);
exit(EXIT_FAILURE);
}

fd = open(argv[1], O_RDONLY);
if(fd == -1) {
err(EXIT_FAILURE, "Unable to open %s", argv[1]);
}

rc = read(fd, buf, sizeof(buf));

if(rc == -1) {
err(EXIT_FAILURE, "Unable to read fd %d", fd);
}

write(1, buf, rc);
}


문제의 요점은 다음과 같다.

위 소스코드를 이용해 token 파일을 읽어라.


소스는 그렇게 길지 않다. 우리가 중요하게 봐야 할 부분은 다음과 같다.


if(strstr(argv[1], "token") != NULL) {
printf("You may not access '%s'\n", argv[1]);
exit(EXIT_FAILURE);
}


파일명에서 token 이란 글자가 있을 시 You may ~ 라는 문자열을 출력하며 프로그램이 종료 되어 버린다. 즉 목적인 token 파일을 읽을 수 없도록 해 놓은 것이다. 하지만 반대로 생각해보면 argv[1]에 들어가는 문자열에서 token이란 문자만 없으면 위 루틴은 pass 된다. 심볼릭링크를 이용하면 되는 것이다.


[그림 1 - 풀이 전체 과정]


argv[1] 에는 /tmp/shell 문자열이 들어가게 되고 해당 루틴을 pass하게 된다. 그 후 아래에 있는 open() 함수를 통해 파일을 열게 되는데 시스템은 최종적으로 /tmp/shell 이 가리키고 있는 token 파일을 열게 되어 파일 내용을 읽을 수 있는 것이다.





+ Recent posts