首页
社区
课程
招聘
[原创]dwva靶场-- xss
发表于: 4天前 458

[原创]dwva靶场-- xss

4天前
458

xss

 

DOM

有过滤,出现<script 就重定向到English

 

f12一下

 

</option></select><body onload=alert(1)>

先闭合option标签,再闭合select标签,再利用一个非<script>标签,

<img src=1 onerror=alert(1)>,<body onload=alert(1)>,

 

 

如果设置了白名单,如

 

利用DOM特性,default=French #<script>alert(1)</script>   (注意#前要有空格)

 

流程如下:

1.浏览器发送请求,用户访问的 URL 是:220K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8U0p5J5y4#2)9J5k6e0m8Q4x3X3f1H3i4K6u0W2x3g2)9J5c8Y4k6#2L8r3&6W2M7X3q4T1K9h3I4A6N6r3W2W2M7#2)9J5c8Y4S2K6M7#2)9#2k6X3c8Q4x3V1k6Q4x3@1k6V1k6h3k6S2N6h3I4@1i4K6y4p5c8Y4u0W2L8X3y4Z5 #<script>alert(1)</script>

浏览器只将?default=French发送给服务器(#后的内容被丢弃)。服务器收到 default=French,该值在白名单中,因此正常返回页面。

 

2.浏览器接收页面并解析,服务器返回的html中包含一段javascript代码如下

 

 

3.javascript读取 location.href,此时 location.href 的值是 #<script>alert(1)</script>,因此 lang 被赋值为 <script>alert(1)</script>

4.document.write 将恶意内容写入DOMdocument.write 直接将字符串写入页面,其中的 <script>alert(1)</script> 被浏览器当作html解析,于是弹出对话框

 

反射型

有过滤,如

 

1. 使用非script标签

2. script大小写绕过

 

使用其他标签

 

存储型

message字段做了严格过滤

// 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 ); // 层:HTML实体编码(主要)
由于message是在html标签体中,要注入只能通过新建标签,htmlspecialchars()把路给锁死了

 

所以只能在name字段进行注入
    // Sanitize name input
    $name = str_replace( '<script>', '', $name );
   

 

 

总结一下思路

先知道输入在哪儿,才能知道用什么payload

先输入hahaha,打开f12检索hahaha在哪

1. 在标签体中,只能通过创建新的标签实现注入

 

 

2. html属性中,如在 <input type="text" value="hahaha">

那就通过先闭合value=",再闭合<,然后再新建标签,如"><script>alert(1)</script>

标签就变成了<input type="text" value=""><script>alert(1)</script>">

也可以不新建标签,新建事件处理器,如" onclick="alert(1)

标签变为<input type="text" value="" onclick="alert(1)">

 

或者在  <a href="hahaha">文本</a>

通过闭合再构造新标签仍然可以,但此时利用href可以执行javascript代码的属性

<a href="javascript:alert(1)">

 

3.在在 <script> 标签内部,如

<script>

    var username = "hahaha";

</script>

闭合后alert(1)再加个注释

 

impossible

代码核心防护机制分析

htmlspecialchars

$name = htmlspecialchars( $_GET[ 'name' ] );

这是防御xss的黄金标准。htmlspecialchars 函数会将用户输入中的特殊字符转换为对应的html实体。攻击者输入的 <script>alert(1)</script> 会被转换成 <script>alert(1)</script>。当浏览器接收到这段 html时,它会原样将 <script>... 作为文本显示在页面上,而不会将其解析和执行。

 

上下文安全输出

echo "<pre>Hello ${name}</pre>";

作用: 将经过编码的 $name 变量输出到html页面中。由于 $name 已经被 htmlspecialchars 处理过,它被安全地嵌入到html主体上下文中。无论 $name 的内容是什么,它都被 <pre> 标签包裹,并被浏览器当作纯文本内容来渲染。

 

 

 

 

 



[培训]Windows内核深度攻防:从Hook技术到Rootkit实战!

收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回