WarGame/WebHacking.kr

webhacking.kr 45번

DoR@Hee 2019. 2. 26. 17:21



문제 첫화면 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>&nbsp;&nbsp;&nbsp;<input type=reset>
</form>
<?
if(time()<1256900400exit();
?>
<!-- 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에 저렇게 생성된다. 




위에 정리한되로 해당 문제는 저렇게 쿼리문이 들어가야 정답이니까 



요런식으로 쿼리문을 작성해주면


성공