DoR@Hee의 끄적끄적
Webhacking.kr 7번 본문
먼저 소스를 확인해본 결과 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