풍문으로들었소팀보고서 hkpco, hellsonic, lokihardt, gogil 페이지 1 / 16
S1_Hello_kiki: 100 hello_kiki.pcap 파일이문제로주어집니다. 와이어샤크로열어서쭉쭉내리다보면 RTP 프로토콜이맋은데, 스태틱스 -> VoIP Calls 에들어가 서재생을해보면대화를들을수있고, 패스키는자싞의로그인패스워드라고합니다. 페이지 2 / 16
S2_qu3st2: 150 주어진바이너리를 IDA 로열어스트링을검색해보면다음과같은문자열이있습니다. 해당문자열을 base64 decode 해보면키를얻을수있습니다. 페이지 3 / 16
S3_Find a key: 200 주어진바이너리를 IDA 로열어보면다음과같은부분을발견할수있습니다. 페이지 4 / 16
S4_Find a key and encode MD5: 300 일 jpg 이.jpg 삼.jpg 3 개의 jpg 이미지와각각이미지에는알수없는숫자가있습니다. jpg 의끝부분이 FFD9 로끝나지않고 FFD9 사이에 2Byte 가추가되어있습니다. 끝부분의 2Byte 는각각일.jpg = 90, 이.jpg = 180, 삼.jpg = 270 이었습니다. 일.jpg 의첫번째줄을 (x.y.z) 로하여 5x5x5 큐브에맞춰좌표를찍고, 이.jpg 와삼.jpg 도마찬가지로합니다. 그랬더니알파벳 E 와비슷한모양이나왔고파일의끝부분에서찾은 90, 180, 270 대로 Y 축을기 준으로회젂시켰더니알파벳이정확하게나왔습니다. 각각의줄에대해똑같이하면됩니다. 페이지 5 / 16
KEY IS A TCAN md5(tcan) Key) 2ceb9b1a93b1b4ea9a57a117ddc3acfa 페이지 6 / 16
S5_Find a key : 400 가입을하고수정페이지 modify_ok.php 에서성별을조작할때인젝션이가능하고로그인해서성 별을확인하는식으로 Blind SQL Injection 이가능합니다. sex=if((select substr(lpad(bin(ascii(substr((select table_name FROM information_schema.tables WHERE table_type='base table' limit 1,1),$j,1))),8,0),$i,1)),1,2) 테이블 war_key 를찾았고, 필드명도 war_key 였습니다. 마찬가지로 war_key 의데이터를가져옵니다. if((select substr(lpad(bin(ascii(substr((select war_key FROM war_key limit 0,1),$j,1))),8,0),$i,1)),1,2) Key) President_of_HUST_is_Bother_Me 페이지 7 / 16
S6_Find a key: 400 주어진바이너리를 IDA 로열어보면클립보드데이터에 xor 을 2 번연속으로한다는것을알수있 습니다. 이를 c 코드로옮긴후 NULL 로채워진 21 바이트의버퍼에 xor 를하면키를획득할수있습니다. 페이지 8 / 16
S7_W T F: 350 몇번값을넣다보면 a~z, A ~ Z 외의 input 값은모두 'i' 로리턴한다는것을알수있습니다. 치 홖을통해 stringx 가 gqsqumgsmieuie 임을찾아냈습니다. 이후 Constraint Programming solver 를통해 a = 1, b = 6, c = 2 이며 abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz x 는위의테이블의인덱스임을알수있습니다. 역함수를코딩하여 stringx 를넣어보면 WOWOCSWWSOCCOC 가나옵니다. 페이지 9 / 16
S8_Find a key: 400 회원가입시 find_account_question 변수에 insert SQL injection 이되므로 0,1,2,3...,"Y",...)# (is_admin 부분에 "Y" 처리 ) 를이용하여, 관리자로회원가입을한뒤, 관리자페이지의레이아웃을통해 <?=`cat ThisisKeyFile.php`?> 해서키를읽었습니다. 페이지 10 / 16
S9_Find a key: 600 웹문제입니다. 소스보기를해보면코드가주어집니다. <?php /* --- */ $ip = "[****]"; $key = "[****]"; /*It's my door trick*/ $a=$_get[a]; $b=$a; if(is_array($a)){ $a= implode($a); $x= substr($a,strlen($key)); if($key==substr($a,0,strlen($key))){ if(is_numeric(($b[count($b)]))){ $y = $ip."[****]"; $xx = $key.$x; $r_key = [R**]($xx, $y); $r_key=(base64_encode($r_key)); $r_key=str_replace('+',' ',$r_key); /* ---- */ if($_get[glob_dir]){ print_r(glob("/var/www/html/".$_get[glob_dir])); 페이지 11 / 16
?> eval(function(p,a,c,k,e,r){e=function(c){return(c<a?'':e(parseint(c/a)))+((c=c%a)>35?string.fromcharc ode(c+29):c.tostring(36));if(!''.replace(/^/,string)){while(c--)r[e(c)]=k[c] e(c);k=[function(e){return r[e]];e=function(){return'\\w+';c=1;while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p('t(k(p,a,n,k,e,r){e=k(c){l(c<a?\'\':e(u(c/a)))+((c=c%a)>v?o.w(c+x):c.y(z));m(!\'\'.p(/^/,o)){q(c- -)r[e(c)]=k[c] e(c);k=[k(e){l r[e]];e=k(){l\'\\\\w+\';c=1;q(c--)m(k[c])p=p.p(r 10(\'\\\\b\'+e(c)+\'\\\\b\',\'g\'),k[c]);L p(\'0="";0+="i";j="k";l=4;m 7(a,b){n c=1 3();2(8.3){c=1 3();2(c.9){c.9(\\\'o/p\\\')q 2(8.5){d{c=1 5("r.6")f(e){d{c=1 5("s.6")f(e){2(!c){t(\\\'u v :( w x y 6 z\\\');g Ac.B("C",a,h);c.D(E);g h0+="f";0+="g";0+="h";7("a.i?a="+j);\',s,s,\'11 R M 12 13 14 15 16 17 18 19 L 1a 1b N 1c 1d K 1 e 1f 1g 1h 1i 1j 1k 1l 1m 1n 1o 1p 1q 1r 1s 1t 1u 1v 1w 1x 1y 1z 1A\'.1B(\' \'),0,{))',62,100,' function return if Cstar String replace while new 46 eval parseint 35 fromcharcode 29 t ostring 36 RegExp key XMLHttpRequest ActiveXObject XMLHTTP makerequest window overridemim etype try catch true 0xde alone rc var text xml else Msxml2 Microsoft alert Giving up Cannot create a n instance false open GET send null ad be ef php sc split'.split(' '),0,{)) 먼저자바스크립트를난독화를풀어주면 eval -> alert eval(function(p,a,cstar,k,e,r){e=function(c){return(c<a?'':e(parseint(c/a)))+((c=c%a)>35?string.fromch arcode(c+29):c.tostring(36));if(!''.replace(/^/,string)){while(c--)r[e(c)]=k[c] e(c);k=[function(e){return r[e]];e=function(){return'\\w+';c=1;while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p('0="";0+="i";j="k";l=4;m 7(a,b){n c=1 3();2(8.3){c=1 3();2(c.9){c.9(\'o/p\')q 2(8.5){d{c=1 5("r.6")f(e){d{c=1 5("s.6")f(e){2(!c){t(\'u v :( w x y 6 z\');g Ac.B("C",a,h);c.D(E);g h0+="f";0+="g";0+="h";7("a.i?a="+j);',46,46,'key new if XMLHttpRequest ActiveXObject XMLHTTP makerequest window overridemimetype try catch return true 0xde Cstar alone rc function var text xml else Msxml2 Microsoft alert Giving up Cannot create an instance false open GET send null ad be e f php sc'.split(' '),0,{)) 와같이나오고, function 으로넘어가는 Cstar 를 c 로바꿔준뒤다시한번난독화를풀어줍니다. 페이지 12 / 16
key = ""; key += "0xde"; Cstar = "alone"; rc = 4; function makerequest(a, b) { var c = new XMLHttpRequest(); if (window.xmlhttprequest) { c = new XMLHttpRequest(); if (c.overridemimetype) { c.overridemimetype('text/xml') else if (window.activexobject) { try { c = new ActiveXObject("Msxml2.XMLHTTP") catch (e) { try { c = new ActiveXObject("Microsoft.XMLHTTP") catch (e) { if (!c) { alert('giving up :( Cannot create an XMLHTTP instance'); return false c.open("get", a, true); c.send(null); return true key += "ad"; key += "be"; key += "ef"; makerequest("a.php?a=" + sc); 페이지 13 / 16
자바스크립트에서키는 0xdeadbeef 라는걸알려주고있고, 아까젂 PHP 의 [R**] 암호화는 RC4 라는걸알려줍니다. 먼저 a 파라미터에 0xdeadbeef(3735928559) 를보내주면자바스크립트단에서 RC4 를암호화한 문자를보내주는걸알수있습니다. makerequest("a.php?b=7csrkilsu4ejncl/tmek ElHZ6tdy2eWOp8NvQ==&x="); x 에는 0xdeaedbeef 혹은 3735928559 를넣어준뒤요청해보면 youtube 주소를가져옵니다. 7csrkIlsU4EJNCl/TmEk ElHZ6tdy2eWOp8NvQ== 를 0xdeadbeef 키로 ARCFOUR Decrypt 해주면 192.168.0.12_get_./download 라는문자열을얻을수있고, 192.168.0.12_get_../../../key 를암호 화하여요청하니키가나왔습니다. 페이지 14 / 16
S10_Find a key: 500 주어진바이너리를보면다음과같은형태로바이너리를실행했을때 strcpy 함수에서 bof 가발 생한다는것을알수있습니다../bin -h a -d xxxxxx... (h 옵션부터넣어줍니다 ) 스택에실행권한이있어 /home/k1r.. 폴더의쉘코드를넣은후 PC 를해당주소로바꿔주면되 는데스택의주소가유동적임을알수있습니다. printf 함수의출력값을저장하는주소가고정이므로해당주소로 pc 를바꿔줍니다. 쉘코드의마지막널바이트를넣어줄수없으므로, execl 인자가널을맊날때까지가느라 printf 의끝 null 까지가고, execl 은 /bin/sh] \n 을가리키게됩니다. /bin 주소를 /tmp 로변경뒤, tmp 폴더에 sh] \n 파일을생성하여쉘을획득하였습니다. 페이지 15 / 16
S11_Find a key: 500 jsp 와 apk 파일이하나주어지는데해당 apk 파일을분석해보면 otp 로그인이후버튼을지정된수 맊큼눌러야한다는것을알수있습니다. 위변조를통해 ( 지정된수 - 1) 을초기값으로설정하여한번의클릭으로키를얻을수있게하였습 니다. Boss.smali 파일 페이지 16 / 16