정보보안(구버전)/ bWAPP 2019. 2. 8. 20:23

웹 해킹 bWAPP - 29. A1 - Injection - XML/XPath Injection(Search)

 

 

본 내용은 교육 과정에서 필요한 실습 목적으로 구성된 것이며, 혹시라도 개인적인 용도 및 악의적인 목적으로 사용할 경우, 법적 책임은 본인에게 있다는 것을 알려드립니다. 

 

 

1. Injection

 

 - OWASP Top10 A1 - 악의적인 명령 삽입
 - 서버로 전송되는 요청 정보에 악의적인 명령을 삽입하여 불필요한 동작을 실시하거나, 서버/시스템/DB 중요 정보를

   획득할 수 있는 취약점이다.
 - Ex) HTML 인젝션, SQL 인젝션, PHP 인젝션, XML 인젝션

 

 

 

2. XML

 

 - HTML을 개선하여 만든 언어이다.

 - 홈페이지 구축기능, 검색기능 등이 향상되었고, 웹 페이지의 추가와 작성이 편리해졌다. 
 - XML을 이용하면 사용자가 구조화된 데이터베이스를 조작할 수 있다.

 - 데이터를 트리 구조의 노드로 표현하며, 사용자 정의로 데이터를 분류할 수 있다.

 

29-0. heroes_xml.txt

 

bee@bee-box:/var/www/bWAPP$ vi passwords/heroes.xml

<?xml version="1.0" encoding="UTF-8"?>
<heroes>
        <hero>
                <id>1</id>
                <login>neo</login>
                <password>trinity</password>
                <secret>Oh why didn't I took that BLACK pill?</secret>
                <movie>The Matrix</movie>
                <genre>action sci-fi</genre>
        </hero>


 ~ 중간 생략 ~

 

        <hero>
                <id>6</id>
                <login>selene</login>
                <password>m00n</password>
                <secret>It wasn't the Lycans. It was you.</secret>
                <movie>Underworld</movie>
                <genre>action horror sci-fi</genre>
        </hero>
</heroes>

 

:q!

 

 

 

'heroes_xml.txt' 트리 구조

 

 

 

 

3. Xpath

 

 - XML에게 질의할때 사용하는 일종의 쿼리이다.
 - XML DB의 내용을 선택하거나 조작할 수 있다.

 

bee@bee-box:/var/www/bWAPP$ vi xmli_2.php

~ 중간 생략 ~

 

if(isset($_REQUEST["genre"]))
{

 

    $genre = $_REQUEST["genre"];
    $genre = xmli($genre);

 

    // Loads the XML file
    $xml = simplexml_load_file("passwords/heroes.xml");

 

    // XPath search
    // $result = $xml->xpath("//hero[genre = '$genre']/movie");
    $result = $xml->xpath("//hero[contains(genre, '$genre')]/movie");


 

:q!

 

 

 

4. Xpath 명령어

 

Xpath 조회 연습 사이트 : https://www.w3schools.com/xml/xpath_examples.asp

 

 명령어

내용 

/

 최상위 노드

//

 현재 노드로부터 모든 노드 조회

*

 모든 노드 조회

.

 현재 노드

..

 현재 상위 노드 접근

parent

 현재 노드의 부모 노드 조회

child

 현재 노드의 자식 노드 조회

node()

 현재 노드로부터 모든 노드 조회

[ ]

 조건문 (where 구문 개념)

 

 

 

5. 실습에 사용할 함수

 

 - contains() 함수 : 두개의 인자에서 첫번째 인자의 문자열이 두번째 인자의 문자열이 있으면 , 없으면 거짓으로 처리

 

   contains('CCNA', 'CCNP')   <-

   contains('CCNA', 'MS')      <- 거짓

 

 

 

6. Injection - XML/XPath Injection(Search)

 

 - 이 시나리오는 XML 구조에 악의적인 행위를 발생시키는 내용을 인젝션하는 공격하는 내용이다.

 - 실습 진행시 영화 장르를 선택하여 검색하면 해당 장르에 해당하는 영화가 출력된다.

 - 이를 통해서 참/거짓을 추측하여 공격을 실시할 수 있다.

 

 

 

Ex1) Injection - XML/XPath Injection(Search) 이해

 

 

보안 레벨 선택 및 시나리오 선택

 

 

29-1. XML 인젝션 추가-1.txt

 '(작은 따옴표)를 인젝션하여 취약점이 있는지 확인 실시

 

 

 

29-2. XML 인젝션 추가-2.txt

') or 1=1 ][ ('1  을 인젝션하여 참인 경우, 출력 내용 확인

 

 

 

29-3. XML 인젝션 추가-3.txt

') or 1=1] | //* | cisco[('1 을 인젝션하여 출력 내용 확인

 

 

[참고] 인젝션 실시 및 참/거짓 이해


$result = $xml->xpath("//hero[contains(genre, '$genre')]/movie");

 

 

Ex1) ') or 1=1 ][ ('1


$result = $xml->xpath("//hero[contains(genre, '') or 1=1 ][ ('1')]/movie");

                                                                                       ②       ③    

 

① hero[contains(genre, '')  

 

    ') 을 인젝션하여 contains 함수를 닫아서 정상 쿼리로 인식하여 거짓으로 처리됨

 

 

② hero[contains(genre, '') or 1=1 ]  

             거짓

 

    ] 을 인젝션하여 정상 쿼리로 인식하고, or 1=1에 의해서] 안에 내용이 으로 처리됨

        

 

[ ('1')]

 

   [ ('1 을 인젝션하여 1이라는 의미 없는 문자를 입력하여 정상 쿼리로 인식함

 

 

 

Ex2) ') or 1=1] | //* | cisco[('

 

$result = $xml->xpath("//hero[contains(genre, '') or 1=1] | //* | cisco[('1')]/movie");

                                                                                     ②      ③    

 

① hero[contains(genre, '') or 1=1]  

 

 ') 을 인젝션하여 contains 함수를 닫아서 거짓으로 처리되며, or 1=1]에 의해서 으로 처리함

 

 

② | //* |  

            

  파이프는 서로 다른 쿼리들 연결을 수행하며, //*에 의해서 현재 노드로부터 모든 노드를 조회함

        

 

cisco[('1')]/

 

  cisco라는 문자열과 함께 [(1' 를 인젝션하여 1이라는 의미 없는 문자를 입력하여 정상 쿼리로 인식함

 

 

 

 

Ex3) 'xmli_2.php' & 'functions_external.php' 파일 내용 확인

bee@bee-box:/var/www/bWAPP$ ls -l xmli_2.php
-rw-rw-r-- 1 root www-data 7579 2014-11-02 23:52 xmli_2.php

bee@bee-box:/var/www/bWAPP$ vi xmli_2.php

~ 중간 생략 ~

 

include("functions_external.php");
include("selections.php");

 

ini_set("display_errors", 1);

 

function xmli($data)
{

    if(isset($_COOKIE["security_level"]))
    {

        switch($_COOKIE["security_level"])
        {

            case "0" :

 

                $data = no_check($data);
                break;

 

            case "1" :

 

                $data = xmli_check_1($data);
                break;

 

            case "2" :

 

                $data = xmli_check_1($data);
                break;

 

            default :

                $data = no_check($data);
                break;

        }

    }

    return $data;

}

 

:q! 


 

bee@bee-box:/var/www/bWAPP$ gedit functions_external.php

~ 중간 생략 ~

 

function xmli_check_1($data)

{

 

    // str_replace()을 이용하여 특수문자(기호)들을 이스케프를 실시한다.

    // str_replace(A, B, C) : C 문자열에서 A 문자열을 B 문자열로 치환 시킴


    // Replaces dangerous characters: ( ) = ' [ ] : , * / WHITESPACE

    $input = str_replace("(", "", $data);   

    $input = str_replace(")", "", $input);

    $input = str_replace("=", "", $input);

    $input = str_replace("'", "", $input);

    $input = str_replace("[", "", $input);

    $input = str_replace("]", "", $input);

    $input = str_replace(":", "", $input);

    $input = str_replace(",", "", $input);

    $input = str_replace("*", "", $input);

    $input = str_replace("/", "", $input);

    $input = str_replace(" ", "", $input);

  

    return $input;

   

}

 

 

 


Ex4) 보안 레벨 'High' 변경

 

 

보안 레벨 및 시나리오 선택

 

 

 

29-4. XML 인젝션 추가-4.txt

XML 인젝션 실패

 

 

 

[유튜브] 동영상 강의 링크 (구독! 좋아요!!!)

 

웹해킹 29. bWAPP Injection - XML&XPath Injection(Search)   https://youtu.be/Rd4MBWAKPqI

Posted by 김정우 강사(카카오톡 : kim10322)
,


Q