| | at : |


Archive

[WEB HACKING] HEX Encoding을 이용한 XSS 필터링 우회 하훌 rwxr-xr-x 3 6/26/2015



[WEB HACKING] HEX Encoding을 이용한 XSS 필터링 우회

Permission rw-r--r--
Author 하훌
Date and Time 6/26/2015
Label
License 크리에이티브 커먼즈 라이선스


웹 취약점 분석 중 가장 많이 발견되는 XSS 취약점에 관한 이야기입니다.
대체로 쉽게 필터링 없이 들어가는 사례도 많았지만 분석했던 대다수의 서비스는 강한 필터링이 적용되어 있었습니다.
그러나 이 필터링에도 규칙이 존재하며 해커는 필터링 규칙을 파악할 시 쉽게 우회가 가능합니다.

여러가지 우회 상황 중 이번에는 HEX Encoding 을 통한 필터링 우회를 볼까합니다.

1. HEX Encoding이란?

HEX 인코딩은 "&#x" 문자열을 통해 웹에서 hex 데이터를 표현하는 방법입니다. 편하게 부르기 위해 hex 인코딩이라 칭하지만
대부분의 인코딩 디코딩 툴에서는 HTML 으로 표기하는 경우가 많습니다.

2. 간단한 XSS 필터 및 일반적인 XSS 구문 삽입 


원리는 간단합니다. A를 나타내는 hex 값인 41에 &#x를 붙여주게 되면 &#x41 즉 텍스트 A를 의미하게 됩니다.
대부분의 XSS 필터는 입력값에 대해 특수문자를 < > 등으로 변환하여 공격자가 스크립트를 사용할 수 없도록 하는데요,
이러한 필터링 부분이 사용자 입력에 대해 검증한다면 공격자는 인코딩된 데이터를 이용해 필터링 규칙을 우회할 수 있습니다.

예를들어 아래와 같이 XSS 필터링 함수가 구현되어 있다고 생각해봅시다.

<?
 function XSSFilter($inputString)
 {
  $output = str_replace("<","&lt;",$inputString);
  $output = str_replace(">","&gt;",$output);
  return $output;
 }
?>

<?

 $sqlIn = $_GET['title'];
 $sqlIn = XSSFilter($sqlIn);
 db_connect($sqlIn);  // 뭐 이런식으로 있다고 가정합시다.

?>


대충 써내려간 코드라 아마 실제로 실행 안될수도 있습니다..

아무튼 위와 같은 경우에서는 get으로 title 파라미터에 값을 전송하여 db_connect를 통해 게시글에 글을 쓴다고 했을 때
< > 문자열에 대해서 필터링 되어 들어가게 됩니다. 대부분의 게시판은 태그 사용이 필요하기 때문에 주로 삽입 구간에서 XSS 필터를 적용합니다.

/?title=<script>alert(45)</script>   와 같은 형태로 공격구문을 넣었을 때 게시글에는 필터링되어 아래와 같이 나타나게 될 것입니다.

&lt;script&gt;alert(45)&lt;/script&gt;

3. HEX Encoding 을 통한 XSS


위에서 했던 방법과는 약간 다른 방법으로 XSS 구문 삽입을 시도해보겠습니다.
동일하게 title 파라미터에 스크립트 구문을 넣지만, hex 형태로 넣어보겠습니다.

/?title=%26%23x003C;script%26%23x003E;alert(45)%26%23x003C;/script%26%23x003E;     // & 는 파라미터 구분자이기 때문에 URL 인코딩을 적용해야합니다.
                                                                   // GET으로 전송 시 URL 인코딩이 자동으로 적용되지만 &, # 같은 특수기호는 직접  인코딩을 해줘야합니다.
/?title=%26%23x003C;script%26%23x003E;alert(45)%26%23x003C;/script%26%23x003E;    

위와 같이 전송 시 아까 만든 XSSFilter 함수는 str_replace 함수에서 문자열들이 걸러지지 않습니다.
이대로 DB 저장 후 게시판 같은 곳에서 노출이 될 때 hex 인코딩이 풀어져 나타난다면 아래와 같이 완전한 스크립트 구문이 나타납니다.

<script>alert(45)</script>

4. XSS 우회

사실 XSS 우회 방법에 대해서는 정해진게 없다고 생각됩니다. 기본적으로 인코딩이 많이 알려져 있지만 실제로 가장 중요하다고 생각되는건
XSS 필터 함수의 규칙인 것 같습니다. BBT(BlackBoxTest)에서는 코드를 볼 수 없기 때문에 반복적인 테스트와 추측 등을 통해 규칙을 유추하고
그 안에서 헛점을 찾아 규칙을 우회하여야만 XSS 공격에 성공할 수 있습니다.

다른 해킹기법도 마찬가지이지만 웹 해킹은 쉽게 접하기 좋고 그만큼 굉장히 큰 리스크를 가지고 있습니다.
업무를 통해 법적인 부분이 해결되거나, 공부 목적으로 직접 구축한 서비스에서 테스트를 하는건 공격기술 연구에 좋습니다만
서비스되고 있는 사이트에 연습하는 행위는 엄연히 불법이고 웹 사이트에 글씨 띄우는건 자랑이 아니니 무리하지 말고 공부하세요.  :)





Share







HAHWUL
HACKING | PENETRATION-TEST | CODING
HACKERONE : GIT : 0DAY-TODAY : EXPLOIT-DB : PACKETSTORM
GOOGLE+ | HAHWUL@GMAIL.COM | TWITTER
WWW.HAHWUL.COM






Recent Post

댓글 3개:

  1. 보안공부를 하면서 좋은 자료를 접하고 갑니다. 평소 도서를 많이 구입해서 보는 편인데요.
    좋은 싸이트를 알게 되서 기쁨니다.
    좀더 심화된 학습을 하고싶은데요.. pack9338 톡 아뒤 입니다.
    보안 스터디나 심화 과외같은것도 가능 할지 조심히 여쭤 보네요..*^^*

    답글삭제
  2. @Anonymous1
    좋은 자료 되었다고 해주시니 감사합니다. 스터디 정도는 괜찮을 것 같긴하네요 ~ : )

    답글삭제
  3. XSS 관련되서 좋은 글 2개만 퍼갈게요~
    출처는 적겠습니다!

    답글삭제