Xpath 인젝션은 XPath 및 XQuery를 사용하는 어플리케이션에 대해서 발생 할 수 있는 취약점 입니다.
Xpath는 요청이나 응답을 xml형태로 구분지어 동작하는 방법 입니다.
웹 어플리케이션 서버에서 자주 사용되는 기능은 아니며 해당 기능(Xpath)을 사용하지 않는 서버라면 해당 취약점에 대해서 대비하지 않아도 됩니다.
해당 취약점을 대비하는 이유는, XML 구조에 악의적인 행위를 일으키는 내용을 삽입하거나 Xpath를 조작하여 XML의 내용을 노출할 수 있기 때문 입니다.
#방법1
Java에서 Xpath 요청을 받아서 처리하는 대표적인 코드의 모습 입니다.
requestData라는 변수는 사용자로부터 받은 데이터 입니다.
{
String requestData = "' or '1'='1";
XPathExpression expr = xpath.compile("/xmlNode1/xmlNode2[Name/data()='"+requestData+"']");
Object result = expr.evaluate(xml, XPathConstants.NODESET);
}
위 코드가 실행되면 논리연산자인 1=1에 의해서 항상 참을 반환하게 됩니다.
조건이 무조건 참이기 때문에 모든 동작에 대해서 결과를 항상 반환하게 됩니다.
이를 대비하기 위해서는 불필요한 데이터를 바로 치환해 주는 코드를 추가하여주면 됩니다.
{
String requestData = "' or '1'='1";
requestData = requestData.replaceAll("[',\\[]", "");
XPathExpression expr = xpath.compile("/xmlNode1/xmlNode2[Name/data()='"+requestData+"']");
Object result = expr.evaluate(xml, XPathConstants.NODESET);
}
대부분의 웹 취약점은 이처럼 사용자가 입력한 데이터에 대한 유효성검증(validate)을 통해서 해결 가능 합니다.
입력받고자 하는 데이터가 올바른지 항상 코드에 추가가 된 다면 취약점에 강한 어플리케이션을 만들 수 있겠네요!
이상으로 Xpath 인젝션에 대해서 간단하게 살펴보았습니다.
궁금한점 또는 틀린 부분은 언제든 연락주세요! 👻
반응형
'웹 취약점(Web vulnerability)' 카테고리의 다른 글
9. 정보 누출(Information Leakage) (0) | 2021.11.29 |
---|---|
8. 디렉토리 인덱싱(directory indexing) (0) | 2021.11.29 |
6. SSI 인젝션(Server Side Include) (0) | 2021.11.29 |
5. SQL 인젝션(OS Command Execution) (0) | 2021.11.29 |
4. 운영체제 명령실행(OS Command Execution) (0) | 2021.11.29 |
* 위 에니메이션은 Html의 캔버스(canvas)기반으로 동작하는 기능 입니다. Html 캔버스 튜토리얼 도 한번 살펴보세요~ :)
* 직접 만든 Html 캔버스 애니메이션 도 한번 살펴보세요~ :)
댓글