2/21/2017

[WEB HACKING] Bypass XSS Blank filtering with Forward Slash

XSS 테스팅 시 가끔씩 발목을 잡는 친구가 있습니다. 바로 Blank 필터링인데요. 태그 사용이 제한된 상황에선 굉장히 짜증나는 존재죠. (다된 것 같은데..output이 안나오는 상황)

오늘은 이 Blank 필터링을 우회하는 간단한 트릭을 이야기할까 합니다.

Blank Filtering?

먼저 간략하게 Blank Filtering에 대해 이야기하겠습니다. 많은 곳들이 적용한 필터링 방식 중 하나이며 단순히 공백에 대해 처리하는 필터링입니다. 예를들면 이런 케이스죠.

Attack: asd" onload="alert(45)" a="
Output
<img src="test.jpg" name="asd"onload="alert(45)"a="">

이렇게 공백에 대해서 날리게되면 사실상 공백이 필요없는 <script> 태그 이외에는 많은 XSS Payload 들이 효력을 잃습니다.
또한 필터링 규칙을 파악했다해도.. 대부분 공격코드에서 공백은 사용할 수 밖에 없기 때문에 공격자 입장에서 아주 불편하게되죠.


일반적인 Filtering(URL Encode / Plus / etc..)

대체로 많이 사용하는 기법들은 URL 인코딩 + 등을 활용한 방법이 있습니다. 생각보다 잘 먹히긴하지만 문자열 검증이 아니라 Decode 후에 검증하는 로직에선 하나도 먹히질 않죠.. 이건 URL만이 아닌 다른 인코딩 기법들도 동일합니다.

Attack: asd"%20onload="alert(45)
Output
<img src="test.jpg" name="asd" onload="alert(45)">




Bypass Filtering - Forward Slash(/)

오늘 소개해드릴 방법은 Slash를 이용한 기법입니다. HTML에서 각 속성 사이를 구별하기 위해선 공백을 넣어 속성들을 구별하게 됩니다.

<img src="url" onclick="viewImage(this)">

분해해서 보면 <img> 태그에 src라는 속성과 onclick 이란 속성 2가지로 나눌 수 있습니다.
자 그럼 속성으로 분리하는 방법은 공백만 가능할까요? 아닙니다. 바로 /(Slash) 문자를 이용해서도 문리가 가능합니다.

<img src="url"/onclick="viewImage(this)">

이런 형태의 구문이 성립할 수 있는거죠. 실제로 실행되는지 알아보기 위해서 간단하게 작성해보았습니다.

<html>
<body>

<img src="url"/onclick="console.log('run onclick!')">

</body>
</html>


자 그럼 실제 XSS에선 어떻게 활용될까요? 뭐 이미 위에서 다 했네요..ㅋㅋ

아래 필터링 규칙은 각종 인코딩을 하여도 강제로 푼다고 가정합시다.

Attack: asd"%20onerror="alert(45)
Output
<img src="test.jpg" name="asd"onerror="alert(45)">

공격자는 아래와 같은 Payload를 전달하여 필터링을 우회하죠.

Attack: asd"/onerror="alert(45)
Output
<img src="test.jpg" name="asd"/onerror="alert(45)">

이런식으로 들어간 구문은 아래와 같이 src가 없기 때문에 onerror 이벤트가 발생하고, 슬래시로 정상 구문으로 받아 alert() 함수가 실행되게 됩니다.


유사한 형태로 아래와 같은 공격코드를 만들수도 있겠네요.


<svg/onload=alert(45)>
<iframe/src=javascript:alert(45)>

등등 활용가치는 많습니다 : )





HAHWUL

Security engineer, Gopher and H4cker!

Share: | Coffee Me:

0 개의 댓글:

Post a Comment