dvwa-XSS (Reflected)

XSS攻击需要具备两个条件:需要向web页面注入恶意代码;这些恶意代码能够被浏览器成功的执行
XSS反射型漏洞

反射型XSS,顾名思义在于“反射”这个一来一回的过程。反射型XSS的触发有后端的参与,而之所以触发XSS是因为后端解析用户在前端输入的带有XSS性质的脚本或者脚本的data URI编码,后端解析用户输入处理后返回给前端,由浏览器解析这段XSS脚本,触发XSS漏洞。因此如果要避免反射性XSS,则必须需要后端的协调,在后端解析前端的数据时首先做相关的字串检测和转义处理;同时前端同样也许针对用户的数据做excape转义,保证数据源的可靠性

基本原理 就是通过给别人发送带有恶意脚本代码参数的URL,当URL地址被打开时,特定的代码参数会被HTML解析,执行,如此就可以获取用户的COOIKE,进而盗号登陆。

特点是 非持久化 必须用户点击带有特定参数的链接才能引起。
XSS反射型攻击,恶意代码并没有保存在目标网站,通过引诱用户点击一个链接到目标网站的恶意链接来实施攻击的。

XSS存储型攻击,恶意代码被保存到目标网站的服务器中,这种攻击具有较强的稳定性和持久性,比较常见场景是在博客,论坛、OA、CRM等社交网站上,比如:某CRM系统的客户投诉功能上存在XSS存储型漏洞,黑客提交了恶意攻击代码,当系统管理员查看投诉信息时恶意代码执行,窃取了客户的资料,然而管理员毫不知情,这就是典型的XSS存储型攻击

LOW

dvwa-XSS (Reflected)_第1张图片
image.png

随便输入 admin 出现hello admin


dvwa-XSS (Reflected)_第2张图片
image.png

输入 试试


dvwa-XSS (Reflected)_第3张图片
image.png

php 输出已经变成了,'

Hello 
' 然后输出到页面时,直接运行 这就是 XSS,原本这个地方应该是输入数据的,但是却变成运行代码了
源码

Hello ' . $_GET[ 'name' ] . '
'; } ?>

没有对传入的数据进行任何处理

medium

输入


dvwa-XSS (Reflected)_第4张图片
image.png

应该是过滤了


dvwa-XSS (Reflected)_第5张图片
image.png

另一种方法,大小写混淆绕过:
输入:

源码

', '', $_GET[ 'name' ] );

    // Feedback for end user
    $html .= "
Hello ${name}
"; } ?>

high

输入


dvwa-XSS (Reflected)_第6张图片

ipt>
发现无法提交 猜测对提交的数据长度做了限制
看一下源码

Hello ${name}
"; } ?>

。。。。。。发现猜测错误
源码对任何形式的script做了过滤
所以可以采用不使用 script 的方式。

比如利用 img 的 onerror 函数 ,意思是说,如果图片的地址是错误的,就执行alert(1)

函数使用正则表达式的搜索和替换,这样使得双写绕过和大小写混淆不可行。
我们可以考虑通过img、body等标签的事件或者iframe等标签的src注入恶意的js代码。
输入:


dvwa-XSS (Reflected)_第7张图片
image.png

impossible

Hello ${name}
"; } // Generate Anti-CSRF token generateSessionToken(); ?>

不可能级别添加了 anti-token 防御机制,和htmlseecialchars函数来防御


dvwa-XSS (Reflected)_第8张图片
image.png

那么什么是HTML实体?
1、 在 HTML 中,某些字符是预留的。
2、在 HTML 中不能使用小于号(<)和大于号(>),这是因为浏览器会误认为它们是标签,当然在HTML中还有其他实体
3、如果希望正确地显示预留字符,我们必须在HTML源代码中使用字符实体(character entities)。
4、如需显示小于号,我们必须这样写:< 或 <使用实体名而不是数字的好处是,名称易于记忆。不过坏处是,浏览器也许并不支持所有实体名称(对实体数字的支持却很好)。

所以输入的语句不会被执行

dvwa-XSS (Reflected)_第9张图片
image.png

你可能感兴趣的:(dvwa-XSS (Reflected))