DoR@Hee의 끄적끄적

Webhacking.kr 7번 본문

WarGame/WebHacking.kr

Webhacking.kr 7번

DoR@Hee 2019. 2. 10. 22:57


먼저 소스를 확인해본 결과 auth는 역시 의미가없다.

ㅇㅇ

조금 더 살펴보니 val= 2 가 admin모드 라는걸 알 수있었다.


의미는 별로 없다

그래서 그 뒤에 있는 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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
<html>
<head>
<title>Challenge 7</title>
</head>
<body>
<!--
db에는 val=2가 존재하지 않습니다.
union을 이용하세요
-->
<?
$answer = "????";
 
$go=$_GET[val]; //파라미터 val을 변수 go 에 담는다
 
if(!$go) { echo("<meta http-equiv=refresh content=0;url=index.php?val=1>"); } //만약 go의 값이 널값이라면 val = 1로 새로고침
 
$ck=$go//$go의 값을 $ck에 담는다
 
$ck=str_replace("*","",$ck); // *치환
$ck=str_replace("/","",$ck); // / 치환
 
 
echo("<html><head><title>admin page</title></head><body bgcolor='black'><font size=2 color=gray><b><h3>Admin page</h3></b><p>");
 
 
if(eregi("--|2|50|\+|substring|from|infor|mation|lv|%20|=|!|<>|sysM|and|or|table|column",$ck)) exit("Access Denied!");
// ck 변수에 --|2|50|\+|substring|from|infor|mation|lv|%20|=|!|<>|sysM|and|or|table|column 값이 있으면 exit
 
if(eregi(' ',$ck)) { echo('cannot use space'); exit(); } // ck변수에 공백(%20)이 있으면 exit
 
 
// 여기까지 정리내용
1. val은 2는 안된다. 
2. */, 스페이스공백,  --|2|50|\+|substring|from|infor|mation|lv|%20|=|!|<>|sysM|and|or|table|column 등을 치환한다.
 
$rand=rand(1,5);
 
if($rand==1)
{
$result=@mysql_query("select lv from lv1 where lv=($go)") or die("nice try!");
}
 
if($rand==2)
{
$result=@mysql_query("select lv from lv1 where lv=(($go))") or die("nice try!");
}
 
if($rand==3)
{
$result=@mysql_query("select lv from lv1 where lv=((($go)))") or die("nice try!");
}
 
if($rand==4)
{
$result=@mysql_query("select lv from lv1 where lv=(((($go))))") or die("nice try!");
}
 
if($rand==5)
{
$result=@mysql_query("select lv from lv1 where lv=((((($go)))))") or die("nice try!");
//1 ~ 5 까지 랜덤한 숫자에 따라 랜덤으로 쿼리문입력
 
$data=mysql_fetch_array($result);
if(!$data[0]) { echo("query error"); exit(); } //data[0]이 널이라면 exit!
if($data[0]!=1 && $data[0]!=2) { exit(); } data[0]이 0또는 1이 아니라면 exit
 
 
if($data[0]==1)
{
echo("<input type=button style=border:0;bgcolor='gray' value='auth' onclick=
alert('Access_Denied!')><p>");
echo("<!-- admin mode : val=2 -->");
}
 
if($data[0]==2)
{
echo("<input type=button style=border:0;bgcolor='gray' value='auth' onclick=
alert('Congratulation')><p>");
@solve();
}  //data[0]의 값이 2라면 solve
 
 
// 여기까지 정리내용
1. val은 2는 안된다. >> 2가 정답이다 >> 산술연산
2. */, 스페이스공백,  --|2|50|\+|substring|from|infor|mation|lv|%20|=|!|<>|sysM|and|or|table|column 등을 치환한다.
3. rand함수를 이용한다. 여러번 시도를 해야한다 원하는 쿼리문이 나올 떄 까지
 
 
 
?>
 
<!--
index.phps
-->
 
1. val은 2여야 클리어 >> 2는 필터링 >> 산술연산
2. *, /, 스페이스공백,  --|2|50|\+|substring|from|infor|mation|lv|%20|=|!|<>|sysM|and|or|table|column 등을 치환한다.
3. rand함수를 이용한다. 여러번 시도를 해야한다 원하는 쿼리문이 나올 때까지
4. union문을 이용한다.
 
 
</body>
</html>
cs


그럼 db에 들가는 값은 결론 도출된것을 정리해보면 아래와 같은 쿼리문이 입력되야한다.

select lv from lv1 where lv=(1)union select (2)


결론과 같이 쿼리문을 입력한 결과


최종 정답을 입력했다.



-오류-

결론 : 서버 자체에 오류가 있어서 못푸는 문제같다.




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

webhacking.kr 11번  (0) 2019.02.15
webhacking.kr 10번  (0) 2019.02.15
WebHacking.kr 6번  (0) 2019.02.01
WebHacking.kr 5번  (0) 2019.02.01
WebHacking.kr 4번  (0) 2019.02.01
Comments