로그인 페이지가 존재하며
친절히 유저정보를 알려준다.
먼저 XPath에 대한 개념은 다음 포스팅으로 이해하자.
XPath에는 SQL과 비슷하게 연산자 등의 동적인 기능을 실행하는 문법이 존재하기 때문에, 정보를 모르더라도 인증을 우회하거나 특정 정보를 반환되게끔 구문을 조작할 수 있다.
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인 조건만 참이 되도록 만들었다.
해당 페이로드를 입력하면 관리자 권한으로 로그인되며, 플래그인 관리자 패스워드 값을 확인할 수 있다.