Jaeseo's Information Security Story

webhacking.kr - old 7번 - WriteUp 본문

Write UP/webhacking.kr

webhacking.kr - old 7번 - WriteUp

Jaeseokim 2020. 1. 24. 00:46

문제에 들어갑니다!

위와 같이 source을 볼 수 있으니 source를 분석 합니다.

<?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>

source를 보니 get 방식으로 var를 받아들이고 이때 정규식을 통해 필터링을 한 다음 random하게 sql 구문 중간에 삽입 하여 질의를 하는 것을 볼 수 있습니다.

일단 괄호의 갯수가 랜덤하게 바뀌지만 5/1 확률로 작동이 가능하니 rand 1를 기준으로 payload를 작성합니다.

where lv=에 해당 하는 값은 querry error가 뜨는 값을 넣어주고 그다음 union를 이용하여 2를 출력 하도록 합니다. 이때 공백은 %20으로 해석이 되는데 2에서 걸리기 때문에 괄호를 이용하여 우회를 합니다. 그리고 mod를 이용하여 2를 만들게 합니다.

https://webhacking.kr/challenge/web-07/index.php?val=3)union(select(mod(5,3))

이제 반복적으로 F5를 눌러 rand가 1이 되도록 합니다.

'Write UP > webhacking.kr' 카테고리의 다른 글

webhakcing.kr - old 4번 - WriteUp  (0) 2020.02.05
webhakcing.kr - old 5번 - WriteUp  (0) 2020.01.09
webhacking.kr - old 3번 - WriteUp  (0) 2020.01.08
webhacking.kr - old 2번 - writeup  (3) 2020.01.06
Comments