ROOTME] XPath injection - Authentication

노션으로 옮김·2020년 3월 26일
0

wargame

목록 보기
25/59
post-thumbnail

문제

로그인 페이지가 존재하며

친절히 유저정보를 알려준다.


풀이

먼저 XPath에 대한 개념은 다음 포스팅으로 이해하자.

https://velog.io/@woounnan/WEB-XPath

XPath Injection

XPath에는 SQL과 비슷하게 연산자 등의 동적인 기능을 실행하는 문법이 존재하기 때문에, 정보를 모르더라도 인증을 우회하거나 특정 정보를 반환되게끔 구문을 조작할 수 있다.

Server side code

OWASP - XPath Injection 문서를 보면, XML을 통해 인증정보를 확인하는 로직에서 XPath 표현식을 어떻게 작성하는지 확인할 수 있다.

FindUserXPath = "//Employee[UserName/text()='" & Request("Username") & "' And
        Password/text()='" & Request("Password") & "']"

SQL과 마찬가지로 싱글쿼터를 이용해서 인자값을 삽입하며, And 연산자를 통해 ID와 패스워드의 조건을 연결시켜주고 있다.

페이로드 작성

SQL Injection에서 'or 1=1 -- 와 같은 XPath Injection 구문은 ' or 1=1 or 'a'='a 이라고 한다.

하지만 문제에서 필요한 것은 관리자 계정에 로그인하는 것이므로, 관리자 권한을 가지고 있는 John으로 제한을 둬야한다.

또한 테스트 결과 1=1 or 'a'='a처럼 논리 연산을 두번 시킬 필요는 없었다.

익스플로잇

모든 조건을 고려해 작성한 페이로드는 다음과 같다.

John' or 1='

아이디가 John인 조건만 참이 되도록 만들었다.

해당 페이로드를 입력하면 관리자 권한으로 로그인되며, 플래그인 관리자 패스워드 값을 확인할 수 있다.

0개의 댓글