Code::Security/비박스(BWAPP)

비박스(bWAPP) XML/XPath Injection (Search)

태군 코드 2021. 8. 12. 16:21
반응형
반응형

이 도구를 이용하여 허용받지 않은 서비스 대상으로 해킹을 시도하는 행위는 범죄 행위 입니다. 해킹을 시도할 때에 발생하는 법적인 책임은 그것을 행한 사용자에게 있다는 것을 명심하시기 바랍니다.

 

xmli_2.php

'xmli_2.php' 페이지는 영화를 장르별로 분류하여 영화 제목만 테이블 형태로 출력합니다. 여기서 'Search' 버튼을 눌러 살펴 보도록 하겠습니다.

 

Search 버튼을 눌렀을때 화면

'Search' 버튼을 눌렀을때 영화의 제목리 리스트 형식으로 나오며, URL에 변수가 노출되는 것을 확인할 수 있습니다. 여기서 SQL Injection 취약점이 있는지 알아보기 위하여 'genre' 변수에 작은따옴표를 입력해 보도록 하겠습니다.

 

SQL Injection 취약점 확인

작은따옴표를 입력시 XML과 관련된 경고 내용을 확인할수 있습니다.

 

모든 영화 제목 출력

위에 보시는 그림 처럼 URL의 genre 변수에 항상 참인 쿼리를 입력 하였습니다.

 

') or 1=1 ][(' or

 

정상 쿼리에서 contains 함수를 호출하므로 소괄호와 '[]'를 사용하여 정상 쿼리를 강제로 닫는 쿼리를 만들어 줍니다. 특히 XML을 호출할 때는 중간에 주석 문자를 입력하지 못하므로 정상 쿼리의 나머지 부분도 문법 오류가 발생하지 않게 쿼리를 입력해 주어야 합니다. 'contains' 함수는 인자를 두 개 받으면 첫 인자에 입력한 문자열이 두 번째 인자에 있으면 true 값을 반환하고 아니면 false 값을 반환합니다.

 

evil 테이블의 모든 내용 출력

XML 데이터베이스의 내용을 출력하는 쿼리를 입력해 보도록 하겠습니다.

 

')]|//*|evil[('

 

'|' OR 연산자를 사용하여 Xpath 쿼리를 생성합니다. Xpath에서 '|' OR 연산자는 AND 연산자 처럼 서로 다른 쿼리를 연결할 때 사용합니다. 다음 페이지의 정상 쿼리를 닫고 | 연산자로 '//*'를 연결한 쿼리 입니다. '//*' 쿼리는 현재 노드로부터 모든 노드를 조회하는 Xpath 쿼리이고 정상 쿼리의 나머지 부분 때문에 문법 오류가 발생하므로 '|' 연산자로 쿼리를 연결 합니다.

 

위의 그림 처럼 XML 익젝션 공격이 성공하여 heroes 테이블에 존재하는 모든 사용자의 정보를 테이블 형태로 출력하는 것을 확인할 수 있습니다.

반응형