代码审计实战—DWVA-xss-Medium(存储)

0x00 前言

如饥似渴的学习ing。
你可能需要看一看这个:
https://blog.****.net/qq_36869808/article/details/83029980

0x01 start

1.黑盒

详细请看:
https://blog.****.net/qq_36869808/article/details/83308395

<img src=1 onerror=alert(/du/)>

代码审计实战—DWVA-xss-Medium(存储)
代码审计实战—DWVA-xss-Medium(存储)
这里发现出了问题,这里不能够进行xss,出现的弹窗是之前测试留下来的。
现在我们在name段使用exp

<img src=1 onerror=alert(/du/)>

出现一个新的问题就是长度不够。
代码审计实战—DWVA-xss-Medium(存储)
现在我们有两种解决方案,f12和抓包,我们使用f12的方式吧。
代码审计实战—DWVA-xss-Medium(存储)
这里调整一下,然后看效果。
代码审计实战—DWVA-xss-Medium(存储)
现在就成功了。

2.白盒

然后我们来看看源码

$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)) ? "" : ""));

可以先参考一下这篇文章
https://blog.****.net/qq_36869808/article/details/83340707

首先来看看message。
首先上来就是一个addslashes
代码审计实战—DWVA-xss-Medium(存储)
代码审计实战—DWVA-xss-Medium(存储)
干掉了引号啥的。干掉string型的sql注入。

然后来看看strip_tags
代码审计实战—DWVA-xss-Medium(存储)
这里直接把标签给去掉了。

然后接着来看mysqli_real_escape_string
代码审计实战—DWVA-xss-Medium(存储)
把sql注入搞死。

然后接着来htmlspecialchars()
代码审计实战—DWVA-xss-Medium(存储)
htmlspecialchars() 函数把一些预定义的字符转换为 HTML 实体。
这里把xss搞死。
好吧,这个参数是没啥利用价值了。

我们来接着看看name。

第一重防御
代码审计实战—DWVA-xss-Medium(存储)
过滤<script>
这种一般都会被绕过,还是转化实体厉害。
第二重防御
代码审计实战—DWVA-xss-Medium(存储)
防止sql注入,这个倒是防住了。
我们的exp是这个样子的。

<img src=1 onerror=alert(/du/)>

没有script所以防不住。