DVWA Writeup Part X (XSS (Reflected))
XSS (Reflected)
反射型 XSS
Low
源码解析
使用 array_key_exists
判断是否存在名为 name
键和值,若存在则输出,否则不进行输出;没有进行过滤和检查。
1 |
|
漏洞利用
直接注入一段 JavaScript 代码。
1 | name=<script>alert("Hello Reflected XSS!")</script> |
参阅
Medium
源码解析
在 Low 级别的基础上过滤 <script>
字符串。
1 |
|
漏洞利用
可以使用拼接的方法,过滤 <script>
后形成 <script>
;
1 | name=<script<script>>alert("Hello Reflected XSS!")</script> |
也可以使用其他标签,比如 <img>
。
1 | name=<img src=1 onerror=alert("Hello!")> |
参阅
High
源码解析
使用 preg_replace
进行正则匹配和替换。
1 |
|
漏洞利用
script
相关的代码注入失败,使用 <img>
标签成功注入。
1 | name=<img src=1 onerror=alert("Hello!")> |
参阅
Impossioble
源码解析
首先使用 array_key_exists
和 is_null
判断是否存在名为 name
键和值;检查 Anti-CSRF Token ,避免 CSRF 攻击;使用 htmlspecialchars
将特殊字符转换为 HTML 实体,避免浏览器对其进行解析。
字符 | 替换后 |
---|---|
& (& 符号) |
& |
" (双引号) |
" ,除非设置了 ENT_NOQUOTES |
' (单引号) |
设置了 ENT_QUOTES 后, ' ; (如果是 ENT_HTML401) ,或者 ' (如果是 ENT_XML1、 ENT_XHTML 或 ENT_HTML5)。 |
< (小于) |
< |
> (大于) |
> |
1 |
|
参阅
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Jckling's Blog!
评论