별볼일없는 Home과
유저이름을 검색할 수 있는 Members와
로그인할 수 있는 Login 페이지가 존재한다.
원리는 이전 문제 풀이와 크게 다르지 않다.
https://velog.io/@woounnan/Rootme.org-XPath-injection-Authentication
쿼터입력으로 에러가 발생하는지 확인해본다.
유저이름을 검색할 때, XPath가 사용되는 것을 확인할 수 있다.
또한, 출력된 에러 정보로 xml
형태를 예상할 수 있다.
<user>
<username>!@#!@#!@#</username>
<!-->guessing -->
<password>abcdabcd</password>
</user>
하지만, 태그 이름이 password
라는 것은 어디까지나 추측이다.
모르는 상황이라고 가정하고 페이로드를 작성해보자.
')] | //*%00
해당 쿼리를 인젝션하면 다음의 XPath가 완성된다.
//user/username[contains(., '')] | //*%00')]
기존의 조건은 닫은 후, or
연산자를 활용하여 새로운 조건을 추가하였다.
//* %00
조건을 이해해보자.
//노드이름
은 최상위 노드 아래에 있는 모든 노드를 가리킨다.*
와일드 카드를 사용하여 모든 노드를 가리키게 만들었으며 %00
널 바이트를 삽입하여 뒤에 싱글쿼터의 쌍을 맞춰주지 않아도 에러가 발생하지 않고 쿼리가 정상 실행된다.결과적으로 <user>
부터 최하위 노드까지 모두 출력된다.
출력된 값을 보면 administrator
로 설정된 Harry 를 확인할 수 있고, 이 패스워드 값이 플래그 값이다.