웹 방화벽 우회 공격에 대해
웹 방화벽은 웹 애플리케이션에 적용되는 보안 솔루션이다.
웹서버에 특화된 만큼 아래 사진처럼 기본적인 공격 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서버가 있다면 제일 좋지만
아래 사이트에서 간단하게 쿼리문이 동작하는지 확인이 가능하다.
함수 우회
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차적인 필터링이 절대적으로 필요하며, 모의해킹을 수행하는 모의해커들도 웹 방화벽 때문에 취약점이 안나올거라는 생각은 하면안된다.
'웹' 카테고리의 다른 글
[Web/Android/iOS] 취약한 HTTPS 관련 항목 진단 (0) | 2023.03.08 |
---|---|
[Web] 크로스 사이트 스크립트(XSS) 정리 - 2 (2) | 2022.08.31 |
[Web] 크로스 사이트 스크립트(XSS) 정리 - 1 (0) | 2022.08.24 |
[웹] SQL Injection을 이용한 다양한 공격 기법 (Feat. sqlmap) - 2 (0) | 2022.07.26 |