ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • XPath injection - Authentication
    Hacking/CTF 문제 풀이 2025. 7. 12. 19:18
    728x90
    반응형

    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
Designed by Tistory.