-
XPath injection - AuthenticationHacking/CTF 문제 풀이 2025. 7. 12. 19:18728x90반응형
Working through problems
이 문제는 DOM 기반의 XML 인증 로직에서 발생할 수 있는 XPath Injection 취약점을 활용하여 인증 우회를 수행하는 문제입니다.
서버는 내부적으로 PHP의 SimpleXMLElement::xpath() 메서드를 이용해 XPath 표현식을 평가합니다.
DOM 방식은 XML 전체를 메모리에 적재한 뒤 XPath를 사용하여 특정 노드를 탐색하며 이때 사용자 입력이 XPath 쿼리에 삽입되는 구조라면 Injection이 가능합니다.
동작 방식 유추
오류 메시지 및 함수 이름을 통해 내부적으로 사용된 XPath 구문은 다음과 유사할 것으로 추정됩니다:
xpath("//user[username/text()='$id' and password/text()='$pw']");
이 구조에서 사용자 입력인 $id 또는 $pw가 적절한 escaping 없이 XPath 구문에 직접 삽입된다면 조건 조작이 가능합니다.
풀이 초기 payload
ID : John' or 1=1 -- Password : 1
해당 입력은 실패했으며 아래와 같은 오류를 출력했습니다.
SimpleXMLElement::xpath(): Invalid predicate in /challenge/web-serveur/ch23/index.php
- 에러는 XPath 문법 오류로 주입한 쿼리가 파싱되지 못했음을 의미합니다.
XPath는 SQL과 달리 문자열 비교에 '1'='1' 같은 구조를 사용하며 논리 연산자는 or, and로 직접 표현할 수 있습니다.
이를 바탕으로 조건을 강제로 참으로 만들기 위해 다음 payload를 구성했습니다.
ID : John' or ''=' Password : 1
XPath로 변환될 경우 아래와 같이 해석됩니다.
//user[username/text()='John' or ''='' and password/text()='1']
- or ''='' 는 항상 참(true) 이므로 password가 무시되며 우회됩니다.
728x90반응형'Hacking > CTF 문제 풀이' 카테고리의 다른 글
PHP - Serialization (0) 2025.07.11 CRLF (0) 2025.07.10 File upload - Double extensions (0) 2025.07.09 File upload - MIME type (0) 2025.07.08 Nginx - Root Location Misconfiguration (0) 2025.07.07