2017. 5. 9.

[웹 취약점] XML 취약점 관련

취약점 점검을 하던 중 파로스 툴로 reponse 값을 확인하면 body 부분에 아래와 같은 내용을 확인 할 때가 있다. 때문에 평소 관심있었던 xml 에 대해 간단히 정리해보려 한다.

<?xml version="1.0" encoding="UTF-8" ?> 
<root>

1. 개요


XML 은 HTML과 비슷하게 데이터를 표현하는 방식의 고전적 언어이다. 그러나 기존 HTML 이 가지고 있는 태그(tag)의 한계와 SGML의 복잡성을 보완하기 위해 만들어진 것으로, 웹에서의 데이터 및 구조화된 문서들을 위한 보편적인 표준이다.

고정된 태그를 가지고 있던 HTML 과 달리 문서의 내용에 관련된 태그를 사용자가 정의하여 확장할 수 있도록하여 내용 정보의 중요성을 강조한다.

hello 라는 말을 웹페이지에 출력하려면 다음과 같이 코딩될 수 있다.
<h1><font=bold>hello!!</font></h1>

그런데 XML 이라면  <greeting>Hello </greeting> 이라고 쓸 수 있다는 것이다.

즉, html를 사용한 경우 컴퓨터가 hello를 단순한 문자의 배열로 인식하겠지만, XML을 사용한 경우, greeting 이라는 태그정보를 통해 인사말이라는 정보를 컴퓨터가 얻을 수 있다는 것이다. 컴퓨터가 태그에 대한 데이터를 얻게되면 보다 더 간편하고 많은 일을 처리 할 수 있을 것이다.

2. 사용 예제


<?xml vertsion="1.0" encoding="EUC-KR"?>
<?xml-stylesheet type="text/css" href="sam.scc"?>
<Bookinfo>
   <BookTitle>미움받을 용기</BookTitle>
   <Author> 기시미 이치로 </Author>
   <Publisher> 인플루엔셜</Publisher>
   <Price> 10000 </Price>
</Bookinfo>




XPATH 예제를 보면 데이터 구조가 트리구조로 되어 있다.

여기서 Person1의 NUM을 표시하려면 /Class/Person1/Num 와 같은 방식으로 지정할 수 있다.

3. 취약점 점검


테스트 사이트 : http://demo.testfire.net/bank/queryxpath.aspx

해당 사이트에 XPath 취약점이 있는지 확인하기 위해 검색란에 SQL Injection 취약점 검색 방법과 비슷하게 싱글쿼터(') 하나를 입력하면, 다음과 같은 메시지가 출력된다.

'string(/news/publication[contains(title,''')
and (isPublic/text()='True')]/title/text())'

이를 토대로 이 페이지의 XML Path 구조가 다음과 같음을 알 수 있다.
<News>
<Publication>
<Title = >
<isPublic = TorF>
<Title = >
<isPublic = TorF>
</Publication>
<Title = >
<isPublic = TorF>
<Title = >
<isPublic = TorF>
</Publication>
</News>

아래와 같이 타이틀에 Unix') or ('1=1 라고 입력할 수 있다.
'string(/news/publication[contains(title,'Unix') or ('1=1')
and (isPublic/text()='True')]/title/text())'


참고

  • http://blog.naver.com/jaewook376/220567034404



Popular Posts

Recent Posts

Powered by Blogger.