์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- http method
- Factory Method Pattern
- Android Studio
- swagger
- URN
- reflection
- 2024-08-21
- tcp
- url
- Python
- Kotlin
- FACTORY
- uri
- menutab
- Dialog
- udp
- ๊ฐ์ฒด์งํฅํ๋ก๊ทธ๋๋ฐ
- OOP
- ๊ธฐ์ด100์
- ์ด๋ ธํ ์ด์
- di
- ์ฝ๋์
- datepicker
- ์ฑ์ฉํ์ ํ
- ํ๋ IT&E
- 2024-08-20
- AndroidStudio
- OpenAPI
- IOC
- fontstyle
dingdong coding
SQL Injection ๋ณธ๋ฌธ
SQL Injection ์ด๋?
• ์ ์์ ์ธ ์ฌ์ฉ์๊ฐ ๋ณด์์์ ์ทจ์ฝ์ ์ ์ด์ฉํ์ฌ ์กฐ์๋ SQL query๋ฌธ์ DataBase์ ์ฃผ์ ์์ผ ๋น์ ์์ ๋ช ๋ น์ ์คํ์ํค๋ ๊ณต๊ฒฉ ๊ธฐ๋ฒ ( web hacking techniques )
• ํด๋น ๊ณต๊ฒฉ์ ๋ฐ์ผ๋ฉด ์กฐ์ง ๋ด๋ถ์ ๋ฏผ๊ฐํ ๋ฐ์ดํฐ๋ ๊ฐ์ธ์ ๋ณด๋ฅผ ํ๋ํ ์ ์์ผ๋ฉฐ, ์ฌ๊ฐํ ๊ฒฝ์ฐ ์กฐ์ง ๋ฐ์ดํฐ ์ ์ฒด๋ฅผ ์ฅ์ ํ๊ฑฐ๋ ์์์ํฌ ์ ์์ต๋๋ค.
๊ณต๊ฒฉ ๋ฐฉ๋ฒ
1 ) ์ธ์ฆ์ฐํ
• SQL injection์ ๋ณดํต ์ฌ์ฉ์์๊ฒ ๋ก๊ทธ์ธ(username, userid)๊ณผ ๊ฐ์ ์ ๋ ฅ ์์ฒญ ์ ๋ฐ์ํฉ๋๋ค.
• ์ ์์ ์ธ ๊ณ์ ์ ๋ณด ์์ด๋ ๋ก๊ทธ์ธ์ ์ฐํํ์ฌ ์ธ์ฆ์ ํ๋ํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด ์์ด๋๊ฐ abc, ๋น๋ฐ๋ฒํธ๊ฐ 1234์ผ ๋ ์ฟผ๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ์ด ์ ์ก๋ ๊ฒ์ ๋๋ค.
SELECT * FROM USER WHERE ID = "abc" AND PASSWORD = "1234";
SQL Injection์ผ๋ก ๊ณต๊ฒฉํ ๋, input ์ฐฝ์ ๋น๋ฐ๋ฒํธ๋ฅผ ์ ๋ ฅํจ๊ณผ ๋์์ ๋ค๋ฅธ ์ฟผ๋ฆฌ๋ฌธ์ ํจ๊ป ์ ๋ ฅํฉ๋๋ค.
1234; DELETE * USER FROM ID = "1";
๋ณด์์ด ์๋ฒฝํ์ง ์์ ๊ฒฝ์ฐ, ์ด์ฒ๋ผ pw๊ฐ id์ ์ผ์นํด True๊ฐ ๋์ด ๋ค์ ์์ฑํ DELETE๋ฌธ๋ DB์ ์ํฅ์ ์ค ์ ์๊ฒ ๋๋ ์ํฉ์ ๋๋ค.
์ด ์ธ์๋ ๊ธฐ๋ณธ์ฟผ๋ฆฌ๋ฌธ์ WHERE์ ์ OR๋ฌธ์ ์ถ๊ฐํ์ฌ '1' = '1'๊ณผ ๊ฐ์ true๋ฌธ์ ์์ฑํ์ฌ ๋ฌด์กฐ๊ฑด ์ ์ฉ๋๋๋ก ์์ ํ ๋ค DB๋ฅผ ๋ง์๋๋ก ์กฐ์ํ ์ ์์ต๋๋ค.
select * from client where name='anjinma' and password=' or '1'='1
2 ) ๋ฐ์ดํฐ ๋ ธ์ถ
• ์์คํ ์์ ๋ฐ์ํ๋ ์๋ฌ ๋ฉ์์ง๋ฅผ ์ด์ฉํด ๊ณต๊ฒฉํ๋ ๋ฐฉ๋ฒ์ ๋๋ค.
• ๋ณดํต ์๋ฌ๋ ๊ฐ๋ฐ์๊ฐ ๋ฒ๊ทธ๋ฅผ ์์ ํ๋๋ฐ ๋์์ ์ฃผ๋ ์กด์ฌ์ด์ง๋ง ํด์ปค๋ค์ ์ด๋ฅผ ์ญ์ด์ฉํด ์ ์์ ๊ตฌ๋ฌธ์ ์ฝ์ ํ์ฌ ์๋ฌ๋ฅผ ๋ฐ์์ํต๋๋ค.
์๋ฅผ ๋ค์ด, ํด์ปค๋ GET ๋ฐฉ์์ผ๋ก ๋์ํ๋ URL ์ฟผ๋ฆฌ ์คํธ๋ง์ ์ถ๊ฐํ์ฌ ์๋ฌ๋ฅผ ๋ฐ์์ํต๋๋ค. ์ด์ ํด๋นํ๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด, ํด๋น ์น์ฑ์ DB๊ตฌ์กฐ๋ฅผ ์ ์ถํ๋ ๊ฒ์ด ๊ฐ๋ฅํ๊ณ ํดํน์ ํ์ฉํฉ๋๋ค.
url์ ํตํด ํ๋ผ๋ฏธํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ GET ๋ฐฉ์์ ํด์ปค๊ฐ ๋จ์ํ url์ ํตํด ์ ๋ฌ๋ ํ๋ผ๋ฏธํฐ๋ฅผ ์กฐ์ํ๊ธฐ๋ง ํ๋ค๋ฉด ์์ฝ๊ฒ SQL injection ์ทจ์ฝ์ ์ ์ ์ฉํ ์ ์์ต๋๋ค.
- URL ์ฟผ๋ฆฌ ์คํธ๋ง : ์ฌ์ฉ์๊ฐ ์ ๋ ฅ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ ๋ฐฉ๋ฒ์ค์ ํ๋๋ก, url ์ฃผ์์ ๋ฏธ๋ฆฌ ํ์๋ ๋ฐ์ดํฐ๋ฅผ ํ๋ผ๋ฏธํฐ๋ฅผ ํตํด ๋๊ธฐ๋ ๊ฒ
http://test.com/login.php?id=abc1234 and password=''
๋์ ๋ฐฉ๋ฒ
1) ์ ๋ ฅ ๊ฐ์ ๋ํ ๊ฒ์ฆ
• ์๋ฒ ๋จ์์ ํ์ดํธ ๋ฆฌ์คํธ ๊ธฐ๋ฐ์ผ๋ก ๊ฒ์ฆํด์ผํฉ๋๋ค.
• ๋ก๊ทธ์ธ ์ , ๊ฒ์ฆ ๋ก์ง์ ์ถ๊ฐํ์ฌ ๋ฏธ๋ฆฌ ์ค์ ํ ํน์๋ฌธ์๋ค์ด ๋ค์ด์์ ๋ ์์ฒญ์ ๋ง์๋ ๋๋ค.
2) Prepared Statement ๊ตฌ๋ฌธ ์ฌ์ฉ
• ์ฌ์ฉ์์ ์ ๋ ฅ ๊ฐ์ด ๋ฐ์ดํฐ ๋ฒ ์ด์ค์ ํ๋ผ๋ฏธํฐ๋ก ๋ค์ด๊ฐ๊ธฐ ์ ์ DBMS๊ฐ ๋ฏธ๋ฆฌ ์ปดํ์ผํ์ฌ ์คํํ์ง ์๊ณ ๋๊ธฐ
• ๊ทธ ํ ์ฌ์ฉ์์ ์ ๋ ฅ ๊ฐ์ ๋ฌธ์์ด๋ก ์ธ์ํ๊ฒ ํ์ฌ ๊ณต๊ฒฉ์ฟผ๋ฆฌ๊ฐ ๋ค์ด๊ฐ๋คํด๋ ๋จ์ ๋ฌธ์์ด์ด ๋์ด ๊ณต๊ฒฉ ๋ฐฉ์ด
• statement์๋ ๋ค๋ฅด๊ฒ ์ฟผ๋ฆฌ๋ฌธ์์ ์ ๋ฌ์ธ์ ๊ฐ์ ?๋ก ๋ฐ๋ ๊ฒ
3) Error Message ๋ ธ์ถ ๊ธ์ง
• ๋ฐ์ดํฐ ๋ฒ ์ด์ค ์๋ฌ ๋ฐฉ์ ์ ๋ฐ๋ก ์ฒ๋ฆฌ๋ฅผ ํด์ฃผ์ง ์์๋ค๋ฉด, ์๋ฌ๊ฐ ๋ฐ์ํ ์ฟผ๋ฆฌ๋ฌธ๊ณผ ํจ๊ป ์๋ฌ์ ๋ํ ๋ด์ฉ์ ๋ฐํํด
์ค๋๋ค.
• ์ฌ๊ธฐ์ ํ ์ด๋ธ๋ช ๋ฐ ์ปฌ๋ผ๋ช ๊ทธ๋ฆฌ๊ณ ์ฟผ๋ฆฌ๋ฌธ์ด ๋ ธ์ถ๋ ์ ์๊ธฐ ๋๋ฌธ์, ๋ฐ์ดํฐ ๋ฒ ์ด์ค์ ๋ํ ์ค๋ฅ ๋ฐ์ ์ ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ค ์ ์๋ ํ์ด์ง๋ฅผ ์ ์ํ๊ฑฐ๋ ๋ฉ์์ง ๋ฐ์ค๋ฅผ ๋์ฐ๋๋ก ํด์ผํฉ๋๋ค.
ํ์ต์ ๋ง์ ๋์์ด ๋ ๋ธ๋ก๊ทธ ๋งํฌ๋ฅผ ์ฐธ์กฐํ์ต๋๋ค. ๐
์ฐธ์กฐ ๋ฐ ์ถ์ฒ
[Database] SQL Injection - ๊ฐ๋ , ๊ณต๊ฒฉ ๋ฐฉ๋ฒ, ๋ฐฉ์ด ๋ฐฉ๋ฒ
'๐ฌDB' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ MySQL ] ๊ธฐ๋ณธ ์ฟผ๋ฆฌ๋ฌธ ์ ๋ฆฌ (2) | 2022.07.07 |
---|