ROOTME] XPath injection - String

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

wargame

목록 보기
35/59
post-thumbnail

문제

별볼일없는 Home과
유저이름을 검색할 수 있는 Members
로그인할 수 있는 Login 페이지가 존재한다.


풀이

원리는 이전 문제 풀이와 크게 다르지 않다.

https://velog.io/@woounnan/Rootme.org-XPath-injection-Authentication

에러 확인

쿼터입력으로 에러가 발생하는지 확인해본다.

유저이름을 검색할 때, XPath가 사용되는 것을 확인할 수 있다.

또한, 출력된 에러 정보로 xml 형태를 예상할 수 있다.

<user>
  <username>!@#!@#!@#</username>
  <!-->guessing -->
  <password>abcdabcd</password>
</user>

XPath Injection

하지만, 태그 이름이 password라는 것은 어디까지나 추측이다.
모르는 상황이라고 가정하고 페이로드를 작성해보자.

')] | //*%00

해당 쿼리를 인젝션하면 다음의 XPath가 완성된다.

//user/username[contains(., '')] | //*%00')]

기존의 조건은 닫은 후, or 연산자를 활용하여 새로운 조건을 추가하였다.

//* %00

조건을 이해해보자.

  1. //노드이름 은 최상위 노드 아래에 있는 모든 노드를 가리킨다.
  2. 패스워드가 저장된 태그이름을 모르므로 * 와일드 카드를 사용하여 모든 노드를 가리키게 만들었으며
  3. 마지막에 %00 널 바이트를 삽입하여 뒤에 싱글쿼터의 쌍을 맞춰주지 않아도 에러가 발생하지 않고 쿼리가 정상 실행된다.

결과적으로 <user>부터 최하위 노드까지 모두 출력된다.

출력된 값을 보면 administrator로 설정된 Harry 를 확인할 수 있고, 이 패스워드 값이 플래그 값이다.

0개의 댓글