효투의 세상 로딩중...
효투의 세상 로딩중...
반응형

웹 방화벽 우회 공격에 대해

웹 방화벽은 웹 애플리케이션에 적용되는 보안 솔루션이다.

웹서버에 특화된 만큼 아래 사진처럼 기본적인 공격 Payload들을 전송했을 때 웬만한 입력값은 검증하여 차단시켜 공격이 매우 까다롭다.

하지만 웹 방화벽이 적용된 웹 서버들은 웹 방화벽(WAF)에만 의존하여 서버단 시큐어 코딩이 제대로 안되어있을 가능성이 있다.

그래서 이 웹 방화벽을 우회할 수 있는 Payload들을 알아두면 WAF를 우회하여 공격을 성공할 수 있다.

1편에는 SQL injection을 다루고 2편에는 XSS와 File upload를 적을 예정

아래 그림을 보면 기본적인 SQL injection Payload로 서버에 전송했지만 WAF에 의해 차단되었다.

이렇게 차단되는 입력값은 1=1 뿐만 아니라 SQL injection 공격을 하는데 있어서 기본적인 함수나 쿼리들이 모두 차단된다.

하지만 모든 웹 방화벽(WAF)이 모든 함수나 쿼리들을 완벽하게 차단하는 것은 아니다.

그래서 우회가 가능하고 공격을 성공할 수 있다.

바로 위 그림에 sleep(1) 함수가 WAF에 차단되었지만, sleep(1)이 아니라 아래 그림처럼 sleep(1.1)을 보내게되면

쿼리가 삽입되어 sleep함수가 동작하고 1.1초간 응답이 지연되어 1,331 millis 뒤에 응답을 받은 것을 볼 수있다.

서버가 사용하는 웹 방화벽 제품에 따라 다르지만 모든 웹 방화벽은 대부분 우회가 가능하다고 알려져있고 이렇게 . 하나로도 WAF 우회가 가능하다.

자주 사용하는 함수 및 쿼리의 우회 방식은 아래와 같다.

반응형

공백 우회

공백을 넣었을 때 웹 방화벽에 차단되는경우도 있다.

그럴 때는 아래와 같은 우회 방식이 존재하며,

%20
%09
%0a
%0b
%0c
%0d
%a0
/**/
예시) 1'%20and%201=1--

또는 공백을 사용안함으로써 쿼리문이 정상적으로 동작하는지 확인하는 방법도 좋다.

아래 사진을 보면 1' waitfor   delay   '0:0:1'-- 쿼리를 전송했을 때 웹 방화벽에 차단되는 것을 볼 수 있다.

delay'0:0:1' 로 공백을 지워버렸을 때는 인젝션이 삽입되어 응답시간이 지연되는 것을 볼 수있다.

SQL 쿼리가 제대로 동작하는 쿼리인지 확인할 때는 DB서버가 있다면 제일 좋지만

아래 사이트에서 간단하게 쿼리문이 동작하는지 확인이 가능하다.

http://sqlfiddle.com/

 

SQL Fiddle | A tool for easy online testing and sharing of database problems and their solutions.

Query Panel Use this panel to try to solve the problem with other SQL statements (SELECTs, etc...). Results will be displayed below. Share your queries by copying and pasting the URL that is generated after each run.

sqlfiddle.com

 

함수 우회

Blind injection에 자주 사용되는 substr , substring 등 문자열을 잘라 음절단위로 정보를 추출할 때 함수가 차단되었다면

사용할 수 있는 우회 함수는 아래가 대표적이다.

mid('abc',1,1) = 'a'
lpad('abc',1,space(1))='a'
rpad('abc',1,space(1))='a'
left('abc',1)='a'
insert
reverse
position('a','abc') = 1
instr('abc','a')
substring_index('abc','b',1)
locate('a','abc')

위 함수들 중에서도 아래 mid, lpad 함수 처럼 또 차단되는 함수들이 있다.

하지만 아래 사진처럼 True가 반환되어 응답시간이 길어지는 position처럼 차단되지 않는 함수도 존재한다.

position과 같은 우회가 가능함 함수를 찾았다면 아래와 같이 쿼리를 삽입해 정보를 획득할 수 있다.

select sleep(1.1) where position('a' in database()=1)--

또 자주사용하는 함수 ascii가 차단되었을 때

ord

bin

과 같은 함수를 사용할 수 있다.

 

이렇게 웹 방화벽이 뚫리는 예시들과 같이 다양한 우회 쿼리와 함수들이 존재하며, 

그런 함수와 쿼리들을 쭉 나열해둔 정리글들은 해외포럼이나 깃허브에 자료가 많다.

중요한 것은 웹 방화벽(WAF)도 결국 완벽한 솔루션은 아니고 우회가 가능하기 때문에 서버단에서 2차적인 필터링이 절대적으로 필요하며, 모의해킹을 수행하는 모의해커들도 웹 방화벽 때문에 취약점이 안나올거라는 생각은 하면안된다.

 

반응형
  • hyotwo7658@gmail.com

복사 완료 👍