bWAPP A1 XML/XPath Injection (Search)
itsecgames.com
www.itsecgames.com
장르를 선택하면 관련 영화 정보를 출력해주는 페이지이다.
먼저, Action 장르의 경우 영화 6개가 출력된다.
Horror 장르는 영화 2개가 출력되는데, [사진 2]에서 2, 6번과 같다.
Scienece Fiction 장르는 영화 6개가 출력되는데, [사진 2]와 완전히 동일하다. [사진 3]에서 Horror 장르 영화 2개가 [사진 2], [사진 4]의 Action, Science Fiction 장르 영화에 포함되는 것을 보면 XML 구조를 다음과 같이 추측할 수 있다.
<movies>
<movie>
<name>영화1</name>
<genre>장르1</genre>
</movie>
<movie>
<name>영화2</name>
<genre>장르1 장르2</genre>
</movie>
<movie>
<name>영화3</name>
<genre>장르1</genre>
</movie>
<movie>
<name>영화4</name>
<genre>장르1</genre>
</movie>
<movie>
<name>영화5</name>
<genre>장르1</genre>
</movie>
<movie>
<name>영화6</name>
<genre>장르1 장르2</genre>
</movie>
</movies>
이전 문제에서 확인했던 XML 구조는 다음과 같다. 아마도 같은 XML 파일을 사용할 것이다.
위와 같이 genre 태그를 보면 여러 태그가 사용되는 것을 확인할 수 있다. 내가 입력한 값이 genre 태그에 존재하는지 체크하려면 contains() XPath contains() 함수를 사용할 수 있다. 추측할 수 있는 쿼리문은 다음과 같다.
query : $xpath->query("/path1/path2/[contains(genre, '내가 입력한 값')]");
* XPath contains() Function
contains
contains 함수는 첫 번째 인수 문자열이 두 번째 인수 문자열을 포함하는지 결정하고 부울값 true 또는 false를 반환합니다.
developer.mozilla.org
low
low 레벨이다. url을 보면 genre 파라미터를 통해 값을 전달하고 있다. 이 값을 single quote로 바꿔서 전송하면 위와 같이 error가 출력되는 것을 확인할 수 있다.
추측되는 쿼리문을 참으로 만들면 위와 같이 모든 영화 정보를 출력할 수 있다. 반환 값을 참으로 만들기 위한 전달 값은 다음과 같다.
value : ') or 1][('1
쿼리문은 다음과 같다.
query : $xpath->query("/path1/path2/[contains(genre, '') or 1][('1')]");
앞부분부터 순서대로 살펴보면 contains(genre, '') 부분은 거짓이 된다. 그리고 바로 뒷부분의 1로 인해 쿼리문은 참이 된다. 그리고 마지막의 ][('1')] 부분은 의미는 없지만 쿼리문을 완성하기 위해 사용된다. 이제 소스코드에 취약한 부분이 있는 점을 알았으니, 다른 XPath 기능을 통해 노드를 조회할 수 있다.
위와 같이 Pipe와 //* 기능으로 현재 노드로부터 모든 데이터를 가져올 수 있다. 반환 값을 참으로 만들기 위한 전달 값은 다음과 같다.
value : ')] | //* | Oxe82de][('
쿼리문은 다음과 같다.
query : $xpath->query("/path1/path2/[contains(genre, '')] | //* | Oxe82de[('')]");
먼저 contains(genre, '') 부분은 거짓이 된다. 그리고 대괄호로 쿼리를 만들어주고 Pipe를 사용하여 쿼리를 이어주는데, //* 기능은 현재 노드로부터 모든 데이터를 가져오는 기능이 있다. 따라서 쿼리문은 참이 되고 모든 데이터가 출력된다. Oxe82de[('')] 부분은 의미는 없지만 정상적인 쿼리문을 완성하기 위해 사용된다.
* XPath Pipe Operators
XPath Operators
XPath Operators An XPath expression returns either a node-set, a string, a Boolean, or a number. XPath Operators Below is a list of the operators that can be used in XPath expressions: Operator Description Example | Computes two node-sets //book | //cd + A
www.w3schools.com
* XPath Syntax
XPath Syntax
XPath Syntax XPath uses path expressions to select nodes or node-sets in an XML document. The node is selected by following a path or steps. The XML Example Document We will use the following XML document in the examples below.
www.w3schools.com
실제로 서버에서 돌아가는 소스코드를 보면 쿼리문은 위와 같다.
medium, high
medium, high 레벨의 경우 single quote를 입력해도 error가 발생하지 않는다. 이전 문제와 마찬가지로 서버에서 특정 문자들을 제거해버리기 때문이다. 따라서, low 레벨처럼 XPath Injection 공격은 어렵겠다.
'Wargame > bWAPP' 카테고리의 다른 글
bWAPP A2 Broken Authentication - Forgotten Function (0) | 2020.11.16 |
---|---|
bWAPP A2 Broken Authentication - CAPTCHA Bypassing (0) | 2020.11.16 |
bWAPP A1 XML/XPath Injection (Login Form) (0) | 2020.11.06 |
bWAPP A1 SQL Injection - Blind (WS/SOAP) (0) | 2020.11.02 |
bWAPP A1 SQL Injection - Blind (SQLite) (0) | 2020.10.29 |