KISA 해킹 방어 훈련장 문제에 대한 풀이입니다. 


Web Level 4 문제를 보면 아래와 같습니다. 


제목 : 파일 읽기


설명 : 해당 웹 사이트에 접속하여 인증키를 얻어내 보아라


파일을 읽는 문제라고 하는군요. 무슨 뜻일까요? 


[문제 풀기]를 클릭해서 링크를 따라 들어가 봅시다. 



추천은 저를 춤추게 합니다 ^^



메뉴를 이것저것 클릭하다 보니 URL에 '?path=main' 처럼 값을 줘서 보여줄 화면을 지정하고 있는걸 알 수 있습니다. 


크롬(chrome) 브라우저의 요소 검사(Inspect Element)로 소스를 봐 봅시다. 


소스의 맨 위에 'readme.php'라는게 보입니다. 

왠지 저 파일에 뭔가 문제를 풀 수 있는 힌트가 숨겨져 있을것 같은 느낌이 드는군요.  

그래서 제목이 파일 읽기 인가 봅니다. 


자신있게 URL의 path값을 readme.php 로 수정해 봅시다. 


이런.. 아무것도 나오지 않는군요. 


역시 그렇게 간단한 문제는 아닌가 봅니다. 

포기하지 말고 readme.php파일을 보기 위해 여러가지 기법을 사용해 봅시다. 


먼저 LFI(Local File Inclusion)기법 중 가장 많이 사용되는 base64 encode방식으로 시도해 봅시다. 


?path=php://filter/convert.base64-encode/resource=readme


화면에 'no hack'이란 메시지가 나오네요. 

이런 수법을 사용할걸 미리 알고 다 막아놨나 봅니다. 


그렇다고 여기서 포기하면 안되죠. 

PHP 사이트 에 가서 다른 필터 방식을 찾아 봅시다. 

우선 conversion 필터 내용을 확인 해보고 시도해봤으나 역시나 다 막혀있네요. 


이번에는 String 필터쪽을 살펴봅시다. 



문자열(String) 필터 링크를 따라 들어가봅시다. 


'string.rot13'이 지원 된다고 하는군요. 

이게 뭔가 찾아보니 '카이사르 암호의 일종으로 영어 알파벳을 13글자씩 밀어서 만든다.' 라고 하는군요. 


큰 기대가 되진 않지만 우선 시도해봅시다. 

URL을 다음과 같이 수정해서 시도하면 됩니다. 


?path=php://filter/string.rot13/resource=readme


화면에는 아무것도 나타나지 않지만 크롬 브라우저의 '요소 검사(Inspect Element)'기능의 'Resources' 탭에서 보니 뭔가 메시지가 보이네요. 


<?

$xrl = "gxqykzncfodufgxsxn_dbeuizrx_oo";

?>


우리가 rot13 방식으로 인코딩 했으니 이 값을 디코딩 하면 무슨 값이 되는지 해봅시다. 


rot13 을 디코딩 해주는 사이트를 찾아 들어가봅시다. 


먼저 앞에 있는 값 'xrl'을 입력하고 디크립트(decrypt)를 수행했더니 'key'라고 나오네요. 

그렇다면 뒤에 있는 값은 우리가 찾는 키 값이 되겠죠?


값을 입력하고 디크립트를 수행하면 그토록 애타게 찾던 키 값이 나옵니다. ^^ 


base64 인코딩 방식으로 풀어보려 URL을 인코딩도 해보고.. 별별 방법으로 엄청 삽질 했네요. 

문제를 풀고나니 오히려 허무하기까지 한 문제였지 않나 싶습니다. 

Posted by KT한
,

KISA 해킹 방어 훈련장 문제에 대한 풀이입니다. 


Network Level1 문제를 보면 아래와 같습니다. 


문제 제목 : PCAP 파일을 분석하여라!


문제 설명 : 주어진 PCAP 파일을 분석하여

인증키를 추출해 보아라!



추천은 저를 춤추게 합니다 ^^



문제 풀기를 클릭하면 findkey2.pcap 파일을 다운 받을 수 있습니다. 

와이어샤크(wireshark)로 열어봅시다. 


메뉴에서 'statistics > conversations'을 선택해봅시다. 


두 호스트 간 통신한 내용을 간략하게 정리해서 보여주는 기능입니다. 


이제 하나 하나 'Follow Stream' 버튼을 눌러가며 통신 내용을 살펴 봅시다. 



TCP 프로토콜 6664번 포트로 통신한 내용입니다. 

HanIRC 통신인데 평문으로 통신했기 때문에 대화 내용을 모두 볼 수가 있네요.


혹시나 대화 중에 키 값이 있을 지 모르니 찬찬히 대화 내용을 살펴 보았지만 별 다른 내용이 없습니다. 

그런데, 대화 마지막에 'my.zip' 파일을 보내겠다고 하는군요. 

혹시 주어진 pcap파일에 my.zip파일을 전송하는 패킷이 포함되어 있을 지 모르니 한 번 찾아봅시다. 


만약, zip파일의 header/footer 값을 알고 있다면 수월합니다. 


메뉴의 'Edit > Find Packet' 을 선택해봅시다. 

'Hex Value'를 선택하고 zip파일의 header인 '50 4B 03 04 14'를 넣고 'Find'버튼을 클릭해봅시다. 



패킷 하나가 검색 되었네요. 

해당 패킷에서 마우스 우 클릭 후 'Follow TCP Stream' 메뉴를 선택해봅시다. 


통신 한 내용이 나옵니다. 즉, zip파일의 내용에 해당하겠죠. 


화면 하단의 'Save As'를 선택 후 원래 보내려던 이름인 'my.zip'으로 저장해봅시다. 


저장된 zip 파일을 열어봅시다. 


zip파일 안에는 'my.txt'라는 파일이 있고 파일을 열어보면 key값이 들어있습니다. 

약간의 인내심을 가지고 노가다를 해야 하긴 하지만 의외로 쉽게 풀리는 문제입니다. 



만약, conversations 메뉴에서 아래 그림처럼 zip파일을 전송하는 tcp flow를 찾았다면 더 간단하게 문제를 풀 수 도 있었을 겁니다. 


'Follow Stream' 버튼을 클릭하면 my.zip 파일을 주고받는 통신을 바로 볼 수 있습니다.


Posted by KT한
,