XML 이란 ? Extensible Markup Language 로 데이터를 저장하고 전송하기 위한 마크업 언어이다.
HTML 과 비슷하게 태그를 사용하지만 XML 은 데이터를 표현하는 데 초점을 맞추고 있고 사용자가 원하는 태그를 직접 정의 할 수 있다.
XML은 사용자가 직접 태그를 정의할 수 있어 다양한 데이터를 표현할 수 있다.
EX) <학생>김완섭</학생> 이런식으로 데이터를 구분한다.
XPath : XML 문서 내에서 특정 요소(노드)를 찾기 위한 경로 언어 특정 태그를 선택(찾기)하기 위한 언어


[login='" . $login . "' and password='" . $password . "']

이런식으로 ID와 비밀번호를 한번에 받고 두 값이 모두 참이여야 하는 방식
[login='" . $login . "' and password='" . $password . "'] 이 부분이 항상 참이 되는 값을 생각해보면
[login=' " ' or 1=1 or ' " ' and password='" . $password . "']
한 줄에서 or 연산자 보다 and 연산자의 연산 속도가 빠르기 때문에 and 연산자 먼저 계산
' " ' and password=' " . $password . " ' 항상 거짓(0)
login=' " ' or 1=1 or 0
login= 1 or 0
login= 1 으로 항상 참

그리고 데이터베이스 구조를 파악할 수 있는데 노드의 자식 노드들의 개수를 파악 하기위해 다음처럼 입력한다
neo 'and count(../child::*)=1 or 'a'='b (블라인드 인젝션 방식)
의미 해석 : 개수(상위노드(../)의 자식노드(child) == 현재 노드 )의 개수가 1개인가?
login = ' [login 폼 입력 값 ] ' and password = ' [password 폼 입력 값] '
login = ' neo' and count(../child::*)=1 or 'a'='b ' and password = ' '
and 연산자부터 계산해보면
'a'='b ' and password = ' '
의 결과는 거짓이 되므로
login = ' neo' and count(../child::*)=1 or false
login = ' neo' and count(../child::*)=1
이 결과에 따라 참/거짓이 나뉘게 된다. 위 결과가 참이면 전체 쿼리가 참이 되어 로그인이 되는 것이고, 거짓이라면 로그인에 실패하는 것이다.

노드가 총 6개인 것을 알 수 있다.
'모의해킹' 카테고리의 다른 글
| Broken Auth. - Forgotten Function (0) | 2025.02.23 |
|---|---|
| XML/Xpath injection - Search (0) | 2025.02.23 |
| SQL Injection - Blind - Time-Based (0) | 2025.02.13 |
| 페이로드 (0) | 2025.02.12 |
| SQL injection - blind (Boolean-Based) (0) | 2025.02.12 |