sql injection 공격 탐지 , 정규 표현식을 이용한 탐지

공격기법 및 탐지|2021. 1. 11. 14:12

 

1. content:"union+select"; nocase; 룰을 우회하여 union sql injection 공격을 수행하시오

 

alert tcp any any -> 192.168.1.24 80 (msg:"union sql injection"; content:"union+select"; nocase; sid:0001;)

 

 

공격은

' union all select 1,2,user(),4,5,6,7#

 

all을 추가하여 한다.

 

 

2. 'or '1'='1'# 패턴을 차단할 수 있는 룰을 작성하시오

 

' or '1'='1'# 이것을 url 인코딩하여 

 

content:"     url인코딩한것         "

 

 

content:"%27+or+%271%27%3D%271%27%23"

 

특수문자만 바꿔주고 띄어쓰기는 바꿔주지않습니다.

 

 

 

 

 

또 

' or '2333'='2333'#이것을 탐지할려고하면

 

정규 표현식을 이용합니다.

 

' OR '[a-zA-Z]'='[a-zA-Z0-9]'#

 

or '문자와 순자'='문자와 숫자'#

 

문자와 숫자의 집합을 지정을 하는 것 입니다.

 

 

 

 

pcre:"\[a-zA-Z0-9]\" 로 시작한다.

 

alert tcp any any -> 192.168.1.24 80 (msg:"sql injection"; pcre:"\[a-zA-Z0-9]\"; sid:0001;)

 

 

 

 

만약에 

다른것도 탐지하고 싶다 그러면

 

 

 

 

 

 

결론=================

 

 

 

 

 

 

' or '모든 문자와 숫자'='모든 문자와 숫자'#

(sql injection 공격 ' 만 정규표현식에 탐지되도록)

 

url 인코딩을 하면

' => %27

 

%27 을 두개로나누면

 

%     =>   \%

27    =>   [0-9]{2,2}         2자리만 올수있다       

 

 

' = >   \%[0-9]{2,2}

 

 

 

 

' 하나만입력을해줘도 탐지가됩니다.

 

 

 

칼리에서

vi snort-2.9.17/local.rules

 

 

alert tcp any any -> 192.168.1.24 80 (msg:"sql injection"; pcre:"/\%[0-9]{2,2}/"; sid:0001;)

(snort 룰)

이렇게해도 가능합니다.

 

 

 

 

snort -q -A console -c /root/snort-2.9.17/local.rules
(탐지)

 

 

 

 

 

 

 

=====================================

 

' or '1'='1'# 

 

 

이걸 정규표현식으로 탐지하려면

 

 

 

 

 

 

 

 

 

 

 

 

=================================

 

정규표현식.

 

 

//                      는 패턴의 시작과 끝

 

i                         는 대소문자 구분 x

^[0-9a-zA-z]           ^는 시작을 뜻하며, 숫자또는 문자로 시작

[-_.]?                      -_. 이 있을수도 있고 없을수도 있다

 

([-_.]?[0-9a-zA-Z])*     는  최소 0번이상 존재

 

[a-zA-Z]{2,3}  알파벳이 최소2자리, 최대 3자리

 

 

 

^ 문자열 시작                  ^ab 는 ab로시작  또    [^ab] 는 a,b,ab를 제외한 문자열

 

$ 문자열 끝                 ab$ 는 ab로 끝나는 문자열

 

. 임의의 문자 1개           a.b$ 는  aCb 

 

| or 연산                              (a|b)c  는 ac, bc

 

?    0또는 1              abc? 는 abc, ab

 

*    0이상                   ab*c 는 ac,abc,abbc

 

+   1이상                   ab+c 는 abc,abbc

 

{}    범위                   ab{2} 는 abb, ab{2,} 는 abb ....       ab{2,4} 는 abb-abbbb

 

[]    문자집합               a[bc]d 는 abd, acd

 

 

 

 

 

\   excape(원래의미 /반대모양이다.키보드에없어서 저거씀)     0\.0\.0\.0 -> ip주소로 해석

 

. 을 진짜 문자로 쓸떄 \ 랑같이 쓰는것입니다. 

 

 

 

 

 

 

 

 

 

\%27\+or\+\%27[0-9a-zA-Z]{1,}\%27\%3D\%27[0-9a-zA-Z]{1,}\%27

'or'='1'='1'

' =        \%27

 =        \+

or=        or

1=        [0-9a-zA-Z]{1,}

{1,}        = 최소 1글자이상

= =         \%3D

 

' or '1'='1'#, ' or '1'='1'--

\%27\+or\+\%27[0-9a-zA-Z]{1,}\%27\%3D\%27[0-9a-zA-Z]{1,}\%27(\%23|\-\-)

 

 

 

=========================================

 

 

 

<script>alert("a")</script>

 

< 3C >3E

%3Cscript 만 하는 이유 <script src 같은걸 못막음

nocase <SCRipt 같은걸 못막기때문

alert tcp any any -> any 80 (msg:"xss"; content:"%3Cscript"; nocase; sid:0001;)

 

 

 

 

 

 

======================================

 

Onmouseover="alert(document.cookie)"

 

 

쿠키값을 따게만드는거 탐지

 

alert tcp any any -> any 80 (msg:"xss"; content:"document.cookie"; nocase; sid:0001;)

 

.은그대로들어감

 

 

 

 

댓글()