| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
Tags
- 쿠키변조
- 밴딧
- time-based
- Linux
- 취약점 진단
- sql injection
- androGoat
- error-based
- androidhacking
- 리눅스
- bandit #밴딧 #웹해킹 #해킹 #화이트해커 #공부 #스터디 #IT #hacking #linux #openssl #nmap
- Bandit
- 모의해킹
- pentest
- 안드로이드 모의해킹
- msfconsole #heartbleed #247ctf #misc #webhacking
Archives
- Today
- Total
d0r1
[webhacking] old 7 본문
<?php
include "../../config.php";
if($_GET['view_source']) view_source();
?><html>
<head>
<title>Challenge 7</title>
</head>
<body>
<?php
$go=$_GET['val'];
if(!$go) { echo("<meta http-equiv=refresh content=0;url=index.php?val=1>"); }
echo("<html><head><title>admin page</title></head><body bgcolor='black'><font size=2 color=gray><b><h3>Admin page</h3></b><p>");
if(preg_match("/2|-|\+|from|_|=|\\s|\*|\//i",$go)) exit("Access Denied!");
$db = dbconnect();
$rand=rand(1,5);
if($rand==1){
$result=mysqli_query($db,"select lv from chall7 where lv=($go)") or die("nice try!");
}
if($rand==2){
$result=mysqli_query($db,"select lv from chall7 where lv=(($go))") or die("nice try!");
}
if($rand==3){
$result=mysqli_query($db,"select lv from chall7 where lv=((($go)))") or die("nice try!");
}
if($rand==4){
$result=mysqli_query($db,"select lv from chall7 where lv=(((($go))))") or die("nice try!");
}
if($rand==5){
$result=mysqli_query($db,"select lv from chall7 where lv=((((($go)))))") or die("nice try!");
}
$data=mysqli_fetch_array($result);
if(!$data[0]) { echo("query error"); exit(); }
if($data[0]==1){
echo("<input type=button style=border:0;bgcolor='gray' value='auth' onclick=\"alert('Access_Denied!')\"><p>");
}
elseif($data[0]==2){
echo("<input type=button style=border:0;bgcolor='gray' value='auth' onclick=\"alert('Hello admin')\"><p>");
solve(7);
}
?>
<a href=./?view_source=1>view-source</a>
</body>
</html>
다음과 같이 이루어져 있는데
data[0] 가 2가 나오면 문제가 풀리는 듯 하다
그러나 정규표현식에 의해 2가 막혀있다
mysql은 다음과 같이 숫자를 표현할 수 있는데

해당 방법을 통해, 2를 표현해보자


그러나 쿼리에러가 발생해서 넘어가지 않음을 확인할 수 있다.
즉 이것은 val를 숫자로 받지 않고, 문자로 받고 있기 때문이라고 예측 할 수 있다
여기서 또 다른 방법이 있다면 union을 사용하는 것이다
union의 경우, 두 가지의 케이스를 모두 가져올 수 있다
1 union val=2
인 경우, 1인 경우와 2인 경우 두개 다 출력한다는 소리다
그러나 1의 경우에는 위에서 필터링에 의해 걸리기 때문에, val 검색 조건에 걸리지 않는 값을 넣어서 해당 문제를 풀 수 있다
https://webhacking.kr/challenge/web-07/index.php?val=8)union(select(5%3))
Challenge 7
webhacking.kr
8을 넣었지만, nice try가 반환되었다
val 비교하는 과정에서 아마도 8이 있지 않았을까라고 생각이 든다
없을만한 숫자를 넣어서 우회를 해보자
---
라고 생각했는데, 자세히 살펴보니까
rand(1,5)에 의해 랜덤 값이 계속 반복된다
즉, 2가 나올때까지 반복해야한다는 말..
열심히 반복을 하다보면 문제가 풀린다
문제를 자세히 안봐서 30분을 삽질 했네..

'webhacking' 카테고리의 다른 글
| [webhacking] old 61 (0) | 2023.11.10 |
|---|---|
| [webhacking] old-56 (0) | 2023.11.07 |
| [webhacking] old-49 (0) | 2023.11.07 |
| [webhacking] old-02 (0) | 2023.11.07 |
| [webhacking.kr] old-23 (0) | 2023.08.29 |