dvwa xss通关

反射型XSS通关

low难度

选择难度:

dvwa xss通关_第1张图片

直接用下面JS代码尝试:


通关成功:

dvwa xss通关_第2张图片

medium难度

直接下面代码尝试后失败


发现这段代码直接被输出:

dvwa xss通关_第3张图片

尝试修改

通关成功:

dvwa xss通关_第4张图片

high难度

查看源码,做代码审计:

Hello ${name}
"; } ?>

发现源码中用preg_replace函数和正则过滤了任意script字符,并且防大小写,这时候可以用onerror事件,由于引用的链接是错误的,所以onerror事件会返回错误信息alert(/xss/)>,并加载一个错误的图片:


通关成功:

dvwa xss通关_第5张图片

存储型XSS通关

low难度

直接用下面代码尝试


如图:

dvwa xss通关_第6张图片

通关成功:

dvwa xss通关_第7张图片

medium难度

查看源码,做代码审计:

', '', $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( '
' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '
' ); //mysql_close(); } ?>

trim() 方法用于删除字符串的头尾空白符

strip_tags() 函数剥去字符串中的 HTML 标签

htmlspecialchars()函数将><单引号双引号做HTML实体化

发现

$message = trim( $_POST[ 'mtxMessage' ] );
$message = strip_tags( addslashes( $message ) );
$message = htmlspecialchars( $message );

$name = trim( $_POST[ 'txtName' ] );
$name = str_replace( '

由于name的字符长度有限制,可以在源码中进行修改:

dvwa xss通关_第8张图片

通关成功:

dvwa xss通关_第9张图片

high难度

查看源码

' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '
' ); //mysql_close(); } ?>

发现这一关比上一关多了对name的正则匹配过滤大小写和script任意字符:

$name = preg_replace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i', '', $name );

用onerror事件即可:


通关成功:

dvwa xss通关_第10张图片

DOM型XSS通关

low难度

打开后发现没有输入框,只有一个选择语言的选项:

dvwa xss通关_第11张图片

打开hackbar,在URL中输入


通关成功:

dvwa xss通关_第12张图片

medium难度

查看源代码,做代码审计:


stripos函数:查找 双引号中的字符在字符串中第一次出现的位置

发现这关对script标签有一个过滤,所以不用script标签

尝试输入


并查看页面的前端代码,发现它输出中有一个标签闭合,还有一个标签:

dvwa xss通关_第13张图片

我们需要让

/option>