728x90
<?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);
}
?>
핵심 코드는 위와 같고, data 변수가 2가 되어야 solve되낟고 나와있다
쿼리값이 1이거나 필터링된 값을 만나면 바로 Access_Denied!
당연히 2도 필터링된다
그럼 2가 아닌데, 2를 나타내는 것이 뭐가 있을까...
아스키 코드값, 2진수 표현 또는 16진수 표현이 떠오른다
구글링해서 발견한 이미지!
화질은 구지지만 순서대로 2, 8, 10, 16진법, 모양이다.
2라는 '모양'의 아스키코드, 10진법 표현은 50!
이 땐 char()함수를 사용해서 해보쟈
먼저 union을 활용해 전체 테이블에서 값을 가져오고 char(50)으로 문자열 '2'를 만들어줬다
val= 뒤에, 0)union(select(char(50)))#를 넣어봤더니, nice try!가 나왔다
그런데 몇 번 계속 반복해서 random 값을 넣어봐도 안 풀렸다ㅠ
이번엔 #을 %23로 우회해봤다 똑같이 nice try!가 떴지만 계속 해보니
728x90
'Wargame > webhacking.kr' 카테고리의 다른 글
Challenge old 10 (250) (0) | 2020.01.22 |
---|---|
[미완] Challenge old 8 (350) (0) | 2020.01.19 |
Challenge old 5 (300) (0) | 2020.01.19 |
[미완] Challenge old 4 (300) (0) | 2020.01.19 |
Challenge old 3 (350) (0) | 2020.01.19 |