SlowTurtle_

천천히 그러나 끝까지 완주

Webhacking-Write-Up/DVWA

DVWA(medium) - CSP Bypass, JavaScript

SlowTurtle_ 2023. 1. 21. 08:19
728x90

1. CSP Bypass 

CSP를 우회하고 페이지의 자바스크립트를 실행하라.

low때와 비교를 위해 소스코드를 보았다.

<?php

$headerCSP = "Content-Security-Policy: script-src 'self' 'unsafe-inline' 'nonce-TmV2ZXIgZ29pbmcgdG8gZ2l2ZSB5b3UgdXA=';";

header($headerCSP);

// Disable XSS protections so that inline alert boxes will work
header ("X-XSS-Protection: 0");

# <script nonce="TmV2ZXIgZ29pbmcgdG8gZ2l2ZSB5b3UgdXA=">alert(1)</script>

?>
<?php
if (isset ($_POST['include'])) {
$page[ 'body' ] .= "
    " . $_POST['include'] . "
";
}
$page[ 'body' ] .= '
<form name="csp" method="POST">
    <p>Whatever you enter here gets dropped directly into the page, see if you can get an alert box to pop up.</p>
    <input size="50" type="text" name="include" value="" id="include" />
    <input type="submit" value="Include" />
</form>
';

$headerCSP를 보면 unsafe-inline과 nonce-TmV2ZXIgZ29pbmcgdG8gZ2l2ZSB5b3UgdXA= 라는 값을 줘서 이 값을 가지고있어야만 인라인 스크립트가 실행되도록 설정되어있다.

그렇다면 인라인 스크립트에 위 해시값을 넣어 진행해보자.

<script nonce="TmV2ZXIgZ29pbmcgdG8gZ2l2ZSB5b3UgdXA=">alert(document.cookie);</script>

위와 같이 쿠키값을 획득할 수 있었다.

 

2. JavaScript

페이지에 포함된 자바스크립트를 분석하고 조작하여 보호를 우회하여 success를 제출하라.

자바스크립트 코드를 먼저 보았다.

function do_something(e){
	for(var t="",n=e.length-1;n>=0;n--)
    		t+=e[n];
       		return t
}

setTimeout(function(){do_elsesomething("XX")},300);

function do_elsesomething(e){
	document.getElementById("token").value=do_something(e+document.getElementById("phrase").value+"XX")
}

위 코드는 자바스크립트 코드를 임의로 보기좋게 분리해놨다.

코드를 보면 do_somthing함수를 볼 수 있는데 뭔지 몰라서 알아봤더니 인자로 받은 문자열을 역순으로 재배치하는 함수였다. chageme를 인자로 받으면 emegahc로 재배치하는 함수인 것이다.

do_elsesomething을 보면 XX + 인자로 받은 문자열 + XX 이렇게 합친 후 마지막에 do_something함수를 사용하는 것을 알 수 있다. 즉 token의 값이 XX인자로받은문자열XX 의 역순으로 재배치된 값임을 알 수 있었다.

change를 문자열로 보내보자.

토큰이 hidden으로 value="XXeMegnahCXX임을 확인할 수 있었다. 위에 분석한 내용과 일치한다. 그러면 value값에 문자열이 success입력된 것처럼 바꾸면 XXsseccusXX이다. 버프슈트로 패킷을 잡고 변조하여 보내보았다.

성공적으로 실행됨을 알 수 있었다.

728x90