https://dreamhack.io/wargame/challenges/24
simple_sqli
๋ก๊ทธ์ธ ์๋น์ค์ ๋๋ค. SQL INJECTION ์ทจ์ฝ์ ์ ํตํด ํ๋๊ทธ๋ฅผ ํ๋ํ์ธ์. ํ๋๊ทธ๋ flag.txt, FLAG ๋ณ์์ ์์ต๋๋ค. Reference Server-side Basic
dreamhack.io
๋ฌธ์ ์ฒซ ์์ ํ๋ฉด์ด๋ค.
์์ชฝ์ HOME, ABbout, Contact ๋ฉ๋ด๊ฐ ์๊ณ (์ด๊ธฐ ํ๋ฉด = HOME ํด๋ฆญ ์ ๋์ค๋ ํ์ด์ง ํ๋ฉด)
About, Contact๋ฅผ ๋๋ฅด๋ฉด ์์ ๊ฐ์ ํ์ด์ง๋ก ์ด๋ํ๋๋ฐ
๋ก๊ทธ์ธ์ ์ ํ ์ํ์ฌ์ ๊ทธ๋ฐ๊ฐ? ์ฃผ์๋ง ๋ฐ๋๊ณ HOME๊ณผ ๊ฐ์ ํ๋ฉด์ด ๋ฌ๋ค.
๋ฉ์ธ ํ๋ฉด์๋ ์์ด๋์ ํจ์ค์๋๋ฅผ ์ ๋ ฅํ๋ ํ๋ฉด์ผ๋ก ๋์ด๊ฐ๋ Login ๋ฒํผ์ด ์๋ค.
์ค๋ฅธ์ชฝ ์์ ์๋ Login ๋ฒํผ๋ ๊ฐ์ ํ์ด์ง๋ก ๋์ด๊ฐ๋ ๊ธฐ๋ฅ์ ํ๋ค.
์์ด๋, ํจ์ค์๋ ๋ชจ๋ 'abc'๋ฅผ ์ ๋ ฅํด ๋ก๊ทธ์ธ์ ์๋ํด ๋ณด์๋ค.
"wrong"์ด๋ผ๋ ๋ฉ์์ง๊ฐ ๋จ๊ณ ๋ก๊ทธ์ธ์ด ๋์ง ์๋๋ค.
๋ก๊ทธ์ธ ํ์ด์ง์ ์์ค์ฝ๋๋ฅผ ํ์ธํด ๋ณด์.
์...
SQL injection ๊ณต๊ฒฉ์ ํตํด ๋ฌธ์ ๋ฅผ ํ๋ ค๋ฉด
๊ณต๊ฒฉ ๊ตฌ๋ฌธ์ ๋ํด ์์์ผ ํ ๊ฒ ๊ฐ์์ ๊ฒ์์ ํด๋ณด์๋ค.
์ฐธ๊ณ ํ ๋ธ๋ก๊ทธ: https://blog.naver.com/isc0304/220594576257
[๋ฐ์ท] SQL ์ธ์ ์ ์ ์ฌ์ฉ๋๋ ํดํน ๊ตฌ๋ฌธ
ํดํน ์ฌ๊ณ ์ ์ฌ๊ตฌ์ฑ ์๊ฐ ์ต์์ฉ ์ถํ ์์ด์ฝ์ถํ ๋ฐ๋งค 2012.08.29. 1. ๊ธฐ๋ณธ 1.1. http://xxx.xxx.xx...
blog.naver.com
์์ ๋ธ๋ก๊ทธ์ ๊ธ ์ค์
๋ก๊ทธ์ธ ์ธ์ฆ ์ฐํ
1) ' or''='
2) ' or 1=1--
3) ' or 'a'='a--
4) 'or''='or'
5) " or 1=1--
6) or 1=1--
7) or 'a='a
8) " or "a"="a
9) ') or ('a'='a
10) ") or ("a"="a
11) ) or (1=1
[์ถ์ฒ] [๋ฐ์ท] SQL ์ธ์ ์ ์ ์ฌ์ฉ๋๋ ํดํน ๊ตฌ๋ฌธ|์์ฑ์ ์ผ์ ์ค
์ด ๋ถ๋ถ์ ์ฐธ๊ณ ํด์
5, 8, 10์ ์์ด๋์ ํจ์ค์๋์ ์ ๋ ฅํด๋ณด์๋ค.
(๋ก๊ทธ์ธ ํ์ด์ง ์์ค์ฝ๋๋ฅผ ๋ณด๋ ํฐ ๋ฐ์ดํ๊ฐ ์ฌ์ฉ๋์๊ธธ๋... ํฐ ๋ฐ์ดํ๊ฐ ํฌํจ๋ ๊ณต๊ฒฉ ๊ตฌ๋ฌธ์ ์ ๋ ฅํด๋ณด์์)
๊ทธ๋ฌ๋๋ ์ด๋ฐ ๋ฉ์์ง๊ฐ ๋ด๋ค.
๊ณ์ ์ ๋ณด ๋ณ๊ฒฝ
;exec sp_addlogin '์์ด๋', 'ํจ์ค์๋';--
;exec sp_password '์ด์ ํจ์ค์๋', '์๋ก์ด ํจ์ค์๋', '์์ด๋';--
;exec master.dbo.sp_addsrvrolemember '์์ด๋' 'sysadmin';--
;exec sp_droplogin '์์ด๋';--
[์ถ์ฒ] [๋ฐ์ท] SQL ์ธ์ ์ ์ ์ฌ์ฉ๋๋ ํดํน ๊ตฌ๋ฌธ|์์ฑ์ ์ผ์ ์ค
์ด๋ฒ์ ์ด ๋ถ๋ถ์ ์ฒซ ๋ฒ์งธ ๊ตฌ๋ฌธ์ ์ ๋ ฅํด๋ณด์๋ค.
๊ทธ๋ฌ๋๋ ์ด๋ฐ ์๋ฌ ํ๋ฉด์ด ๋ํ๋ฌ๋ค.
์์ด๋: "
๋น๋ฐ๋ฒํธ: "์ด ์๋ ์๋ฌด๊ฑฐ๋
์ด๋ ๊ฒ ์ ๋ ฅํ๋ฉด
๋ ์ด๋ฐ ์๋ฌ ํ๋ฉด์ด ๋์ค๋ ๊ฒ์ผ๋ก ๋ณด์
ํฐ ๋ฐ์ดํ๊ฐ ๋ฌธ์ ์ธ ๊ฒ ๊ฐ๋ค.
SQL ์ธ์ ์ ๊ณต๊ฒฉ ๊ธฐ๋ฒ์ด๋ผ๊ณ ๊ฒ์ํ๋ฉด,
WHERE์ด๋ SELECT๊ฐ ํฌํจ๋ ์์ค ์ฝ๋๋ฅผ ํ์ธํ๊ณ ๊ณต๊ฒฉํ๋๋ฐ
์์ค์ฝ๋ ์ด๋์์๋ WHERE์ด๋ SELECT๋ฅผ ์ฐพ์ ์ ์์๋ค.
๋ฌธ์ ์๋ฒ์ ๋ค์ด๊ฐ๊ธฐ ์ ์ ๋ฌธ์ ํ์ผ์ ๋ฐ์ ์ ์๋๋ฐ
์ด๊ฒ ์๊ฐ๋์ ์ด์ ์ผ ํ์ผ์ ๋ฐ์์ ํ์ธํด๋ณด์๋ค.
app.py๋ผ๋ ํ์ผ์ ๋ค์ด๋ก๋ํ ์ ์์๋ค.
์๊น ์๋ฌ ํ๋ฉด์์ "there is an error in the application."์ด๋ผ๊ณ ํ๋๋ฐ
app.py ํ์ผ์ ์ฐพ์ ์ ์์ด์ ๋ฌธ์ ํ์ด์ ๋์์ ๋ง์ด ๋ฐ์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๋ค.
"select * from...... where... "์ด ํฌํจ๋ ์ด ๋ถ๋ถ์ด ๋ฌธ์ ํ์ด์ ๋์์ด ๋ ๋ถ๋ถ ๊ฐ์์ ์บก์ณํด์๋ค.
๋ค์ ์นํ์ด์ง์ ๋ก๊ทธ์ธ ํ์ด์ง์ ์์ค์ฝ๋๋ app.py๋ฅผ ๋์์ ํ์ธํ๋ฉด์ ํด์์ ์๋ํด๋ณด๊ฒ ๋ค.
๋ด๊ฐ ํด์ํ๋ ค๊ณ ๋ ธ๋ ฅํ ๊ฒฐ๊ณผ... (ํ๋ฆด ์ ์์)
1. ๋ก๊ทธ์ธ ์นํ์ด์ง์์ ์ ๋ ฅ๋ฐ์ ์์ด๋์ ํจ์ค์๋๊ฐ ๊ฐ๊ฐ 'userid'์ 'userpassword'๋ก ๋ฐ์์ง๊ณ
2. ๊ทธ ๊ฐ์ด ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐ์์ด ๋๋ ๊ฒ ๊ฐ๋ค.
3. admin์ด๋ผ๋ ์์ด๋๋ก ๋ก๊ทธ์ธํ๋ฉด flag ๊ฐ์ด ๋์ค๋ ๊ฒ ๊ฐ๋ค. ๊ทธ๋ฌ๋ฏ๋ก ์์ด๋ ๊ฐ์ ์ด์ ๋ถํฐ admin์ผ๋ก ๊ณ์ ์ ๋ ฅํ๋ฉด์ ๋น๋ฐ๋ฒํธ๋ฅผ ๋ฐ๊ฟ์ ์๋ํด ๋ณด๋ฉด ๋ ๋ฏํ๋ค.
4. ํฐ๋ฐ์ดํ๋ฅผ ์ฌ์ฉํด์ ๋น๋ฐ๋ฒํธ ์ ๋ ฅ์ sql injection ๊ณต๊ฒฉ์ ํ๋ฉด ๋ ๊ฒ ๊ฐ๋ค.
๊ทธ๋ผ ์ด์ ์์ด๋์๋ ๊ณ์ admin์ ์ ๋ ฅํ๊ณ
๋น๋ฐ๋ฒํธ์ ํฐ๋ฐ์ดํ๋ฅผ ์ฌ์ฉํ์ฌ ๊ณต๊ฒฉ๋ฌธ์ ์ ๋ ฅํด๋ณด๊ฒ ๋ค.
# ์ฒซ ๋ฒ ์งธ ์๋
์์ด๋: admin
๋น๋ฐ๋ฒํธ: "or 1=1#
์์ ๊ฐ์ด ์ ๋ ฅํ๋ฉด
select * from users where userid="{admin}" and userpassword="{"or 1=1#}"
์ด๋ฌํ ์ฟผ๋ฆฌ๊ฐ ์คํ๋๋๋ฐ,
๋งจ ์ฒ์ "๋ฅผ ์ฌ์ฉํด ์์์ ์ด์ด์ค ํฐ๋ฐ์ดํ๋ฅผ ๋ซ์์ฃผ๊ณ
or 1=1 ์ ์ฐธ์ด ๋๊ณ
#์ ์ฝ์ ํด์ฃผ์ด #์ดํ์ ๋ฌธ์ฅ์ ์ฃผ์ ์ฒ๋ฆฌ๊ฐ ๋๊ฒ ํ๋ค.
๊ทธ๋ฌ๋ฉด ์๋์ ๊ฐ์ ์ฟผ๋ฆฌ๊ฐ ๋๋ค.
select * from users where userid="{admin}" and true;
๋ฐ๋ผ์ DB๋ users ํ ์ด๋ธ์ ์ ์ฅ๋ id๊ฐ admin์ธ ์ฌ์ฉ์์ ์ ๋ณด๋ฅผ ์ถ๋ ฅํ๋ค.
์ฟผ๋ฆฌ์ ์คํ ๊ฒฐ๊ณผ๊ฐ ์กด์ฌํ๊ธฐ๋ง ํ๋ฉด ๋ก๊ทธ์ธ์ ์ฑ๊ณตํ๊ธฐ ๋๋ฌธ์ admin์ผ๋ก ๋ก๊ทธ์ธ์ ์ฑ๊ณตํ๊ฒ๋๋ค.
๊ทธ๋ฌ๋ ๋จนํ์ง ์์๋ค.
์... ๋ญ๊ฐ ๋ฌธ์ ์ฌ์ ๋์ง ์์ ๊ฑธ๊น?
๋ด๊ฐ ์ ๋ ฅํ ๋น๋ฐ๋ฒํธ์ DB์์ ๊ฐ์ ธ์จ ๋น๋ฐ๋ฒํธ๊ฐ ์ผ์นํ์ง ์์์์ธ๊ฐ...
๊ทผ๋ฐ ๊ทธ๋ฌ๋ฉด wrong์ด๋ hello guest๊ฐ ๋ ์ผ ํ๋ ๊ฑฐ ์๋๊ฐ...?
wrong์ด ๋จ๋ ๊ฒฝ์ฐ์ hello guest๊ฐ ๋จ๋ ๊ฒฝ์ฐ์ ์ฐจ์ด์ ์ ๋ญ์ง...
ํผ๋ ์์ ๋น ์ก๋ค...
app.py์ ์๋ DB ๊ด๋ จ ์ ๋ณด๋ฅผ ํ์ธํด๋ดค๋ค.
userpassword์ ํด๋นํ๋
"{binascii.hexlify(os.urandom(16)).decode("utf8")}" ๋ถ๋ถ์ด ๋ฌด์จ ๋ป์ธ์ง ๋ชฐ๋ผ์ ์ฑGPT์๊ฒ ๋ฌผ์ด๋ดค๋ค.
binascii.hexlify(os.urandom(16)).decode("utf8") ๋ Python์์ ์ฌ์ฉ๋๋ ์ฝ๋์ ๋๋ค.
์ด ์ฝ๋๋ ๋๋คํ 16๋ฐ์ดํธ์ ๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ๋ฅผ ์์ฑํ๊ณ , ๊ทธ ๋ฐ์ดํฐ๋ฅผ 16์ง์๋ก ๋ณํํ ํ UTF-8 ํ์์ผ๋ก ๋์ฝ๋ฉํฉ๋๋ค.
์ฌ๊ธฐ์ ๊ฐ ๋ถ๋ถ์ ํ๋์ฉ ์ดํด๋ณด๊ฒ ์ต๋๋ค:
1. os.urandom(16): os ๋ชจ๋์์ urandom ํจ์๋ฅผ ํธ์ถํ์ฌ 16๋ฐ์ดํธ์ ๋ฌด์์ ๋ฐ์ดํฐ๋ฅผ ์์ฑํฉ๋๋ค. ์ด ๋ฐ์ดํฐ๋ ์ํธํ์ ์ผ๋ก ์์ ํ ๋์์ ๋๋ค.
2. binascii.hexlify(...): binascii ๋ชจ๋์์ ์ ๊ณตํ๋ hexlify ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ๋ฅผ 16์ง์๋ก ๋ณํํฉ๋๋ค.
3. .decode("utf8"): ์ด ๋ณํ๋ 16์ง์ ๋ฐ์ดํฐ๋ฅผ UTF-8 ๋ฌธ์์ด๋ก ๋์ฝ๋ฉํฉ๋๋ค.
์ต์ข ์ ์ผ๋ก, ์ด ์ฝ๋๋ ๋ฌด์์์ 16๋ฐ์ดํธ ๋ฐ์ดํฐ๋ฅผ 16์ง์ ๋ฌธ์์ด๋ก ๋ณํํ๊ณ , ๊ทธ ๋ฌธ์์ด์ UTF-8๋ก ๋์ฝ๋ฉํ์ฌ ์ถ๋ ฅํฉ๋๋ค. ์ด๋ฐ ์์ผ๋ก ์์ฑ๋ ๊ฐ์ ์ฃผ๋ก ๋ฌด์์ ํ ํฐ์ด๋ ๋น๋ฐ ํค๋ฅผ ์์ฑํ ๋ ์ฌ์ฉ๋ฉ๋๋ค.
ํจ์ค์๋๊ฐ ๋์ ๊ฐ(random)์ด๋ฏ๋ก ์๋น์ค ์ด์ฉ์์ธ ์ฐ๋ฆฌ๋ ์ ์ ์๋ค.
์ฌ๊ธฐ๋ฅผ ๋ค์ฌ๋ค๋ณด๋ ๊ฑด ์๋ฏธ ์๋ ๊ฒ ๊ฐ์์ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์ฐพ์๋ดค๋ค.
์์์ ์๋ํ๋ ๋ฐฉ๋ฒ์ SQL ์ฟผ๋ฆฌ ํ ์ค์ ์๋ณ๊ณผ ์ธ์ฆ์ ๋์์ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ด๊ณ
์ด์ ์๋ณ๊ณผ ์ธ์ฆ์ ๋ถ๋ฆฌํ์ฌ ์ฒ๋ฆฌํ๋ ๋ฐฉ์(UNION BASED)์ ์ฌ์ฉํ ๊น ํ๋๋ฐ,
๊ธฐ์กด์ ์ฟผ๋ฆฌ์์ ์ถ๋ ฅํ๋ Column์ ๊ฐ์๋ฅผ ์๊ณ ์ผ์น์์ผ ํ์ฉํ๋ ๊ณต๊ฒฉ ๊ธฐ๋ฒ์ด๋ฏ๋ก
Column์ ๊ฐ์๋ฅผ ๋ชฐ๋ผ์ ์ด๊ฒ๋ ํฌ๊ธฐ...
์ฌ๊ธฐ์๋ถํฐ ๋ฌธ์ ํ์ด ์ ๋ฆฌ๊ธ์ ์ฐพ์๋ดค๋ค.
๊ตฌ๊ธ๋ง ๊ฒฐ๊ณผ SQL ๋ฌธ๋ฒ์์๋ ์ฃผ์ ์ฒ๋ฆฌ ๋ฌธ๋ฒ์ด -- ๋ผ๊ณ ํ๋ค.
์ด๋ฅผ ์ด์ฉํด ํตํด ID ๊ฒ์ ์กฐ๊ฑด๋ง์ ์ฒ๋ฆฌํ๋๋ก ๋๊ณ
๋ค์ userpassword ์กฐํ ๋ถ๋ถ์ ์ฃผ์์ฒ๋ฆฌํด๋ฒ๋ฆฌ๋ฉด ์ฐธ๊ฐ์ด ๋๋ค๊ณ ํ๋ค.
๋๋ฆผํต ๋ฌธ์ ํ์ด - Simple_sqli // SQL Injection, query, ๋ก๊ทธ์ธ์ฐํ, SQL
๋ฌธ์ ๋ถ๋ฅ ๋์ด๋ : ํํ 1. ์ฌ์ ํ์&์ ์ฐฐ (reconnaissance) ์ฌ์ดํธ์ ์ ์ํด๋ณด๋ฉด Login์ด ๋ณด์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฝ๋๋ฅผ ํจ๊ป ์ดํด๋ด ์๋ค. #!/usr/bin/python3 from flask import Flask, request, render_template, g import sqlite3
hobbylists.tistory.com
admin๋ค์ "-- ๋ฅผ ๋ถ์ฌ์ ์์ด๋ ๊ฐ์ผ๋ก ๋ฃ์ด์ฃผ๊ณ
๋น๋ฐ๋ฒํธ๋ ์๋ฌด๊ฑฐ๋ ์ ๋ ฅํ๋ค.
์ ๋ต!
SQL ๋ฌธ๋ฒ์์ -- ๋ฅผ ์ฌ์ฉํ์ฌ ์ฃผ์ ์ฒ๋ฆฌํ๋ค๋ ์ฌ์ค๋ง ์๋ฉด ์ฝ๊ฒ ํ ์ ์๋ ๋ฌธ์ ์๋ ๊ฒ ๊ฐ๋ค.
'SWLUG > ์น ํดํน' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[los.rubiya.kr] cobolt (0) | 2023.10.06 |
---|---|
[LoS.Rubiya.kr] gremlin (0) | 2023.10.06 |
[Dreamhack/๋๋ฆผํต] image-storage (1) | 2023.09.30 |
[Root me] Install files (0) | 2023.09.30 |
[Root me] File upload - Double extensions (0) | 2023.09.30 |