low 레벨과 구성 창은 똑같다.
<?php
if( isset( $_POST[ 'btnSign' ] ) ) {
// Get input
$message = trim( $_POST[ 'mtxMessage' ] );
$name = trim( $_POST[ 'txtName' ] );
// Sanitize message input
$message = strip_tags( addslashes( $message ) );
$message = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"], $message ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));
$message = htmlspecialchars( $message );
// Sanitize name input
$name = str_replace( '<script>', '', $name );
$name = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"], $name ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));
// Update database
$query = "INSERT INTO guestbook ( comment, name ) VALUES ( '$message', '$name' );";
$result = mysqli_query($GLOBALS["___mysqli_ston"], $query ) or die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>' );
//mysql_close();
}
?>
구성 코드이다.
여기서도 low 레벨과 다른 점은 <script> 태그를 필터링하는 부분이다.
XSS의 medium레벨 실습들은 전부 <script> 태그 필터링 우회로 풀면 되는 것 같다.
코드를 보면 message는 strip_tags 함수로 모든 태그를 지워버리기 때문에 아예 태그를 입력할 수가 없다.
하지만 name은 str_replace 함수로 <script> 태그만 필터링하기 때문에 이전의 XSS 문제들에서 했던 방법을 사용할 수 있다.
name 부분에 스크립트를 입력하려고 하면 길이 제한 때문에 안되는데 이렇게 maxlength 부분을 찾아서 지워주면 된다.
<sc<script>ript> alert(1)</script>
이렇게 <sc<script>ript>로 우회할 수 있다.
<script> 태그 말고 <img> 태그를 사용하는 방법도 있다.
<img src="" onerror='alert(1)'>
이렇게 작성하면 된다.
'웹해킹 > DVWA' 카테고리의 다른 글
DVWA JavaScript(medium) 롸업 (0) | 2023.11.17 |
---|---|
DVWA CSP Bypass(medium) 롸업 (0) | 2023.11.17 |
DVWA XSS(Reflected)(medium) 롸업 (0) | 2023.11.16 |
DVWA XSS(DOM)(medium) 롸업 (0) | 2023.11.16 |
DVWA Weak Session IDs(medium)롸업 (0) | 2023.11.16 |