정보보안(구버전)/ bWAPP 2019. 2. 8. 15:14
웹 해킹 bWAPP - 28. A1 - Injection - XML/XPath Injection(Login Form)
본 내용은 교육 과정에서 필요한 실습 목적으로 구성된 것이며, 혹시라도 개인적인 용도 및 악의적인 목적으로 사용할 경우, 법적 책임은 본인에게 있다는 것을 알려드립니다.
1. Injection
- OWASP Top10 A1 - 악의적인 명령 삽입
- 서버로 전송되는 요청 정보에 악의적인 명령을 삽입하여 불필요한 동작을 실시하거나, 서버/시스템/DB 중요 정보를
획득할 수 있는 취약점이다.
- Ex) HTML 인젝션, SQL 인젝션, PHP 인젝션, XML 인젝션
2. XML
- HTML을 개선하여 만든 언어이다.
- 홈페이지 구축기능, 검색기능 등이 향상되었고, 웹 페이지의 추가와 작성이 편리해졌다.
- XML을 이용하면 사용자가 구조화된 데이터베이스를 조작할 수 있다.
- 데이터를 트리 구조의 노드로 표현하며, 사용자 정의로 데이터를 분류할 수 있다.
- heroes.xml 파일 : http://192.168.20.205/bWAPP/passwords/
bee@bee-box:/var/www/bWAPP$ vi passwords/heroes.xml
<?xml version="1.0" encoding="UTF-8"?>
<hero>
:q! |
'heroes_xml.txt' 트리 구조
3. Xpath
- XML에게 질의할때 사용하는 일종의 쿼리이다.
- XML DB의 내용을 선택하거나 조작할 수 있다.
bee@bee-box:/var/www/bWAPP$ vi xmli_1.php
~ 중간 생략 ~
if(isset($_REQUEST["login"]) & isset($_REQUEST["password"]))
$login = $_REQUEST["login"];
$password = $_REQUEST["password"];
// Loads the XML file
// XPath search
:q! |
4. Xpath 명령어
Xpath 조회 연습 사이트 : https://www.w3schools.com/xml/xpath_examples.asp
명령어 |
내용 |
/ |
최상위 노드 |
// |
현재 노드로부터 모든 노드 조회 |
* |
모든 노드 조회 |
. |
현재 노드 |
.. |
현재 상위 노드 접근 |
parent |
현재 노드의 부모 노드 조회 |
child |
현재 노드의 자식 노드 조회 |
node() |
현재 노드로부터 모든 노드 조회 |
[ ] |
조건문 (where 구문 개념) |
5. 실습에 사용할 함수 및 명령어
명령어 |
내용 |
count() |
노드들의 개수를 반환하는 함수 |
string-length() |
문자열의 길이를 반환하는 함수 |
::* |
지정 노드의 모든 내용 |
name() |
노드의 이름을 반환하는 함수 |
substring() |
지정한 문자열을 반환하는 함수 |
position() |
노드의 위치를 반환하는 함수 |
string() |
인자로 받은 값을 문자열로 반환하는 함수 |
6. Injection - XML/XPath Injection(Login Form)
- 이 시나리오는 XML 구조에 악의적인 행위를 발생시키는 내용을 인젝션하는 공격하는 내용이다.
- 실습 진행시 로그인/패스워드 폼을 사용하는데, 로그인 폼에 인젝션을 실시하여 공격을 실시할 수 있다.
- 참/거짓때 출력되는 메세지를 확인하여 XML 인젝션 공격을 진행한다.
Ex1) Injection - XML/XPath Injection(Login Form) 이해 I
보안 레벨 선택 및 시나리오 선택
' or 1=1 or ' 을 실시하여 참인 경우, 출력 메세지 확인(Neo 계정이 데이터베이스 첫번째 있기 때문에 출력됨)
' or 1=2 or ' 을 실시하여 거짓인 경우, 출력 메세지 확인(거짓인 경우 'Invalid credentials!' 가 출력됨)
[참고] 인젝션 실시 및 참/거짓 이해
$result = $xml->xpath("/heroes/hero[login='" . $login . "' and password='" . $password . "']");
Ex1) ' or 1=1 or '
$result = $xml->xpath("/heroes/hero[login='' or 1=1 or '' and password='']");
② ①
① '' and password='' <- 거짓
② '' or 1=1 or 거짓 <- 참
Ex2) ' or 1=2 or '
$result = $xml->xpath("/heroes/hero[login='' or 1=1 or '' and password='']");
② ①
① '' and password='' <- 거짓
② '' or 1=2 or 거짓 <- 거짓
Ex2) Injection - XML/XPath Injection(Login Form) 이해 II
현재 상위 노드인 heroes에서 자신과 동일한 위치에 있는 자식 노드(6개)가 몇개 인지를 알아보는 인젝션
부모의 이름(6글자)의 길이가 몇글자인지를 알아보는 인젝션
부모의 이름(heroes)을 알아보는 인젝션
첫번째 자식 노드의 이름 길이(4글자)와 이름(hero)을 알아보는 인젝션
(이런식으로 여섯번째 자식 노드까지 인젝션 실시)
첫번째 hero 노드의 자식 노드 개수(6개)를 알아보는 인젝션
첫번째 hero 노드의 첫번째 자식 노드 이름 길이(2글자)와 이름(id)를 알아보는 인젝션
첫번째 hero 노드의 두번째 자식 노드 이름 길이(5글자)와 이름(login)를 알아보는 인젝션
첫번째 hero 노드의 세번째 자식 노드 이름 길이(8글자)와 이름(password)를 알아보는 인젝션
첫번째 hero 노드의 네번째 자식 노드 이름 길이(5글자)와 이름(secret)를 알아보는 인젝션
첫번째 hero 노드의 다섯번째 자식 노드 이름 길이(5글자)와 이름(movie)를 알아보는 인젝션
첫번째 hero 노드의 여섯번째 자식 노드 이름 길이(5글자)와 이름(genre)를 알아보는 인젝션
첫번째 hero 노드의 첫번째 자식 노드 id의 값 길이(1글자)와 내용(1)을 알아보는 인젝션
첫번째 hero 노드의 두번째 자식 노드 login의 값 길이(3글자)와 내용(neo)을 알아보는 인젝션
첫번째 hero 노드의 세번째 자식 노드 password의 값 길이(7글자)와 내용(trinity)을 알아보는 인젝션
Ex3) 'xmli_1.php' & 'functions_external.php' 파일 내용 확인
bee@bee-box:/var/www/bWAPP$ ls -l xmli_1.php
-rw-rw-r-- 1 root www-data 8577 2014-11-02 23:52 xmli_1.php
bee@bee-box:/var/www/bWAPP$ vi xmli_1.php
~ 중간 생략 ~
include("functions_external.php");
ini_set("display_errors", 1);
$message = ""; function xmli($data) if(isset($_COOKIE["security_level"])) switch($_COOKIE["security_level"]) case "0" :
$data = no_check($data);
case "1" :
$data = xmli_check_1($data);
case "2" :
$data = xmli_check_1($data);
default :
$data = no_check($data); } } 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' 변경
보안 레벨 및 시나리오 선택
XML 인젝션 실패
[유튜브] 동영상 강의 링크 (구독! 좋아요!!!)
웹해킹 28. bWAPP Injection - XML&XPath Injection(Login Form) https://youtu.be/yTxg2d5q240
'정보보안(구버전) > bWAPP' 카테고리의 다른 글
웹 해킹 bWAPP - 30. A2 - Broken Authentication - CAPTCHA Bypassing (0) | 2019.02.09 |
---|---|
웹 해킹 bWAPP - 29. A1 - Injection - XML/XPath Injection(Search) (0) | 2019.02.08 |
웹 해킹 bWAPP - 27. A1 - Injection - SQL Injection Blind(WS/SOAP) (0) | 2019.02.08 |
웹 해킹 bWAPP - 26. A1 - Injection - SQL Injection Blind(SQLite) (0) | 2019.02.07 |
웹 해킹 bWAPP - 25. A1 - Injection - SQL Injection Blind - Time-Based (0) | 2019.02.07 |