일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- BOF
- SQL Injection
- NewsClipping
- 버퍼오버플로우
- Shadow 동아리
- writeup
- RITSEC
- Hackerschool
- reversing
- CodeEngn
- 웹해킹
- 어셈블리어
- buffer over flow
- PWN
- ctf
- x64dbg
- 리버싱
- webhacking
- Python
- 리눅스
- RITSEC CTF 2019
- Next.js
- Nop Slide
- requests
- 뉴스클리핑
- HackCTF
- 보안뉴스
- termux
- ftz
- Linux
Archives
- Today
- Total
Jaeseo's Information Security Story
webhacking.kr - old 7번 - WriteUp 본문
문제에 들어갑니다!
위와 같이 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