일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Remote File Inclusion
- XSS
- Lord of SQL Injection
- sql injection
- DVWA
- Cross Site Scripting
- DreamHack
- webhacking.kr
- 정보보안
- 워게임
- 드림핵
- Insecure CAPTCHA
- wargame
- SuNiNaTas
- Weak Session IDs
- Los
- 웹 해킹
- DOM-Based XSS
- File Upload Vulnerability
- TeamH4C
- 써니나타스
- 해커팩토리
- 정보보호
- Dremhack
- Hackerfactory
- 빡공팟 6기
- Web Hacking
- 빡공팟 4기
- bypass CAPTCHA
- H4CKINGGAME
- Today
- Total
도카이트
[Wargame] Webhacking.kr - old 7 본문
문제 화면
- Admin page 화면이 작게 출력되며 아래 auth 버튼이 있다.
- 물론, Auth 버튼을 클릭 시 Access_Denied! 경고창을 출력하며, 접근이 되지 않는다.
- 바로 소스코드를 확인해보자 !
소스코드
<?php
include "../../config.php";
if($_GET['view_source']) view_source();
?>
<?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);
}
?>
- $go 변수는 $_GET[’va’] 이므로, URL의 val 파라미터 값에 값을 입력 시, $go에 대입된다.
- $go에 대해여 preg_match 함수를 통해 각 문자들을 필터링하고 있으며, 각 문자들은 다음과 같다.
- 2, from, _, =, 공백, 사칙연산 부호(+,-,*,/)
- 해당 문자들의 필터링을 우회하여 val 값이 2가 되도록 SQL Injection을 하면 될듯 하다.
- 또한 rand 함수를 통해 1부터 5까지 랜덤하게 $go 변수에 괄호 개수를 지정한다.
- 즉, SQL Injection 구문을 작성 후 실행을 최소 5번 이상은 진행해보아야 문제를 solve 할 수 있을듯 하다.
문제를 해결하기 위해 최초로 시도했던 구문들은 다음과 같았다.
- val=6%4
- val=(6%4)
- val=6%4%23
- val=(6%4)%23
- val=1%00or%00lv%00like%00(6%4)%23
이후로도 여러가지 구문들을 다 삽입하여 공격을 시도해보았으나, 잘 되지 않았어서 각종 방법들을
모두 찾아보다가 union select를 이용하여 수식 (6%4)를 입력할 수 있음을 알 수 있게 되었고, 이를
이용하여 구문을 삽입하자 성공적으로 해당 문제를 solve 할 수 있었다 !
union select를 이용하여 val 값을 2로 만들기
- 위 예제에서 사용한 구문은 다음과 같다.
- val=0)union(select(6%4)
- val 값이 0인 경우와 6을 4로 나눈 나머지 값인 2 인 경우를 합집합으로 출력한다.
- nice try! 가 출력될 경우 몇 번 더 새로고침을 해주면 문제가 solve 된다.
'Wargame > Webhacking.kr' 카테고리의 다른 글
[Wargame] Webhacking.kr - old 11 (0) | 2022.06.15 |
---|---|
[Wargame] Webhacking.kr - old 10 (0) | 2022.06.15 |
[Wargame] Webhacking.kr - old 6 (0) | 2022.06.14 |
[Wargame] Webhacking.kr - old 5 (0) | 2022.06.14 |
[Wargame] Webhacking.kr - old 4 (0) | 2022.06.14 |