일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- CODEGATE
- Python
- SQL Injection
- CCE
- webhackingkr
- sqli
- 웹해킹
- 시스템
- lordofsqlinjection
- 운영체제
- WebHacking
- 시스템프로그래밍
- Los
- 상호배제
- hacking
- Writeup
- rubiya
- crosssitescripting
- Linux
- ctf
- ubuntu
- 화이트햇콘테스트
- 프로세스
- webhacking.kr
- SQLInjection
- XSS
- SQL
- 해킹
- web
- 알고리즘
- Today
- Total
One_Blog
XSS (Cross Site Scripting) 불완전 필터링 우회 본문
안녕하세요. 오늘은 XSS의 불완전한 필터링을 우회하는 방법에 대해 서술하겠습니다.
자료 출처 : https://learn.dreamhack.io/318#1
[XSS 필터링은 힘드러]
XSS 필터링이란?
XSS 필터링이란 , 웹 해킹 공격 기법 Cross Site Scripting을 방어하기 위한
방법 중 하나입니다. XSS를 주로 발생시키는 Html 태그, Javascript코드를
필터링하여 공격이 이루어지지 않도록 하는 방법입니다.
제 글에서 소개할 필터링 방법은 모두 잘못된 방식의 필터링입니다.
XSS를 근본적으로 막아내기 위해선 처음부터 태그 삽입이 되지 않도록 방어하는 것이 중요합니다.
웹 페이지에서 마크다운 문법을 지원하도록 하고 싶다면,
위험한 태그를 막는 형식의 BLACK LIST 기반의 필터링이 아닌,
안전하다고 알려진 태그만 허용하는 WHITE LIST 기반의 필터링이 이루어져야 합니다.
문자열 공백 치환 필터링 우회
XSS 공격을 막아내기 위해 XSS공격으로 의심되는 구문을 거부하는 방식이 아닌,
해당 구문을 공백으로 치환하는 필터링을 하는 방식이 존재합니다.
이러한 방식의 경우, 정말 간단하게 필터링을 우회하여 공격이 가능합니다.
필터링 되는 키워드 사이에 필터링 키워드를 삽입하여, 간단하게 필터링을 우회할 수 있습니다.
우리가 <script>alert("Hack!");</script>구문을 실행시키려 한다고 가정하고,
웹 페이지에서 <script>구문을 검열한다고 가정합시다.
그럼 우리는 <sci<script>pt>alert("Hack!");</sci<script>pt>와 같은 구문을 활용하여
간단하게 필터링을 우회할 수 있습니다.
<sci<script>pt>alert("Hack!");</sci<script>pt>해당 구문에 <script> 구문 필터링이 이루어지게 되면,
공격 구문 사이에 삽입되어 있는 <script>구문이 공백으로 치환되어
최종적으로 <script>alert("Hack!");</script>라는 공격구문이 만들어지게 됩니다.
굳이 문자열 공백 치환 필터링 방식을 고집하여 XSS를 막아내고 싶다면,
문자열에서 의심되는 구문이 발견되지 않을 때 까지 의심되는 구문을 공백으로 치환해야 합니다.
특정 키워드 거부 필터링 우회
단순히 공격으로 의심되는 구문을 공백으로 치환하여 필터링 방식이 있다면,
의심되는 구문이 발견되었을 때 해당 구문 자체를 거부해버리는 필터링 방식도 존재합니다.
헉, 이런 방식을 써버리면 저희는 어떻게 우회를 하죠?
다 방법이 있습니다.
해당 필터링을 우회하는 방법은 여러가지가 있습니다.
저는 그 방법 중
정규화(Normalization)
를 통한 필터링 우회 방식을 소개드리겠습니다.
정규화란?
정규화는 동일한 리소스를 나타내는 서로 다른 URL을 통일된 형태로 변환하는 과정입니다.
정규화 과정에서 \x01 , \x04, \t와 같은 특수문자들이 제거되고,
스키마의 대소문자가 통일됩니다.
저희는 여기서 \x01, \x04, \t와 같은 특수문자들이 제거된다는 점을 활용할 겁니다.
HTML 마크업에서 사용될 수 있는 URL들은 활성 콘텐츠를 포함할 수 있습니다.
이 중 javascript: 스키마는 URL 로드 시 자바 스크립트 코드를 실행할 수 있도록 합니다.
만약 javascript: 가 구문에서 발견되면, 해당 구문을 거부해버리는
필터링 방식이 존재한다고 가정해봅시다.
저희는 URL이 정규화될 때 사라지는 \x01, \x04, \t를 통해
필터링을 우회 할 수 있습니다.
만약 <a href="\1Javascr\4ip\1t:alert('Hack!')">Hack</a>와 같은
공격 구문을 전달한다고 가정합시다.
해당 구문이 필터링을 거칠 땐, \1, \4 때문에 javascript: 필터링에 걸리지 않게 되고,
해당 구문이 정규화 과정을 거치게 되면
<a href="javascript:alert('Hack!')">Hack</a>이 되어,
성공적으로 공격구문을 전달할 수 있게 됩니다.
대문자 혹은 소문자만 인식하는 필터링 우회
이번에는 필터링은 하는데, 대문자 혹은 소문자 둘 중 하나만 인식하는 필터링이 있다고 가정합시다.
해당 필터링의 경우에는 정말 정말 정말 간단합니다.
그냥 필터링하는 구문 중 한 글자를 대문자 / 소문자로 바꿔주면 됩니다.
예시로, <script>를 필터링한다면, <scRipt>를 통해 우회가 가능합니다.
지금까지 간단한 필터링 우회 방법을 알아보았습니다.
다음 글에서는 또 다른 XSS 필터링에 대해 알아보겠습니다.
감사합니당
'웹해킹' 카테고리의 다른 글
Lord of SQL Injection - Skeleton 풀이 (2) | 2023.02.16 |
---|---|
Webhacking.kr Old 3번 풀이 (0) | 2023.01.28 |
Dreamhack - Exercise: SQL Injection Bypass WAF 풀이 (2) | 2022.12.08 |
XSS _ 공격 연구 보고서 (0) | 2022.11.29 |
XSS_ Cross Site Scripting[Stored XSS] (0) | 2022.11.24 |