论坛首页 Web安全讨论区 阅读主题

[原创]dwva靶场-- xss

163 浏览 0 回复
#1 楼主 2026-06-01 21:09:07
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 是:913K9s2c8@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 将恶意内容写入DOM,document.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> 标签包裹,并被浏览器当作纯文本内容来渲染。     


传播安全知识、拓宽行业人脉——看雪讲师团队等你加入!


#XSS

---
来源: 看雪论坛
原文链接: https://bbs.kanxue.com/thread-290687.htm

暂无回复,快来抢沙发吧!

请登录后参与讨论

立即登录 注册账号