DoR@Hee의 끄적끄적
webhacking.kr 45번 본문
문제 첫화면 SQL INJECTION 을 이용한 문제이다.
소스보기 결과 index.phps가 보인다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | <html> <head> <title>Challenge 45</title> </head> <body> <h1>SQL INJECTION</h1> <form method=get action=index.php> id : <input name=id value=guest><br> pw : <input name=pw value=guest><br> <input type=submit> <input type=reset> </form> <? if(time()<1256900400) exit(); ?> <!-- index.phps --> <? $pw="?????"; if($_GET[id] && $_GET[pw]) { $_GET[id]=mb_convert_encoding($_GET[id],'utf-8','euc-kr'); //mb_convert_encoding은 문자 인코딩을 바꿔주는 함수이며 string mb_convert_encoding(문자열,바꿀 인코딩,현재인코딩); 으로 사용한다. $data=@mysql_fetch_array(mysql_query("select id from members where id='$_GET[id]' and pw=md5('$_GET[pw]')")); // 입력 받은 ip, pw로 쿼리 넣기 if(eregi("admin",$_GET[id])) exit(); if(eregi("from",$_GET[id])) exit(); if(eregi("union",$_GET[id])) exit(); if(eregi("limit",$_GET[id])) exit(); if(eregi("union",$_GET[pw])) exit(); if(eregi("pw",$_GET[pw])) exit(); if(eregi("=",$_GET[pw])) exit(); if(eregi(">",$_GET[pw])) exit(); if(eregi("<",$_GET[pw])) exit(); if(eregi("from",$_GET[pw])) exit(); //admin from union limit pw = > < from이 들어 갈 경우 exit if($data) { echo("hi $data[0]<br><br>"); if($data[0]=="admin") @solve(); } if(!$data) { echo("Wrong"); } } ?> </body> </html> | cs |
해당 소스코드 이며
mb_convert_encoding에 대해서 검색하는 중
mb_conver_encoding 함수에 멀티바이트(%a1~%fe)를 붙여서인코딩방식에 magic_qutoes_gpc를 우회가 가능하다는 것을 확인했다.
magic_qotes_gpc는 Get, Post, Cookie 즉 GPC 를 사용하여 서버로 넘어온 values 대해서 특수문자 ', ", \, null 있을때 알아서 \ 를 붙여준다.
일반적으로 guest, guest는 input value로 고정되어있고 로그인 시 url에 저렇게 생성된다.
위에 정리한되로 해당 문제는 저렇게 쿼리문이 들어가야 정답이니까
요런식으로 쿼리문을 작성해주면
성공
'WarGame > WebHacking.kr' 카테고리의 다른 글
webhacking.kr 47번 (0) | 2019.02.26 |
---|---|
webhacking.kr 46번 (0) | 2019.02.26 |
webhacking.kr 44번 (0) | 2019.02.25 |
webhacking.kr 43번 (0) | 2019.02.25 |
webhacking.kr 42번 (0) | 2019.02.25 |
Comments