目录
XSS跨站脚本攻击
XSS定义
跨站脚本攻击(Cross Site Scripting)是指攻击者利用网站程序对用户输入过滤不足,输入可以显示在页面上对其他用户造成影响的HTML代码,从而盗取用户资料、利用用户身份进行某种动作或者对访问者进行病毒侵害的一种攻击方式。为了与层叠样式表(Cascading Style Sheets)的缩写CSS区分开,跨站脚本攻击通常简写为XSS。
XSS攻击类型
-
反射型XSS
反射型XSS只是简单地将用户输入的数据直接或未经过完善的安全过滤就在浏览器中进行输出,导致输出的数据中存在可被浏览器执行的代码数据。由于此种类型的跨站代码存在于URL中,所以黑客通常需要通过诱骗或加密变形等方式将存在恶意代码的链接发给用户,只有用户点击以后才能使得攻击成功实施。 反射型XSS是最为常见的一种XSS类型 只要见到有交互的地方均可进行尝试
-
存储型XSS
存储型XSS脚本攻击是指由于Web应用程序对用户输入数据的不严格,导致Web应用程序将黑客输入的恶意跨站攻击数据信息保存在服务端的数据库或其他文件形式中,当网页进行数据查询展示时(浏览web界面时),会从数据库中获取数据内容(直接写进数据库),并将数据内容在网页中进行输出展示,进而导致跨站脚本代码的执行 存储型XSS脚本攻击最为常见的场景就是在留言板、博客或新闻发布系统中,恶意代码的数据信息直接写入文章、评论、留言中,浏览时即会执行相应的脚本代码。
-
DOM Based XSS
基于DOM的XSS跨站脚本攻击是通过修改页面DOM节点数据信息而形成的XSS跨站脚本攻击。不同于反射型XSS和存储型XSS,基于DOM的XSS跨站脚本攻击往往需要针对具体的Javascript DOM代码进行分析,并根据实际情况进行XSS跨站脚本攻击的利用。
XSS攻击方式绝不是弹窗这么简单……
XSS攻击方式
XSS偷取用户信息 XSS盗取Cookie XSS钓鱼攻击 XSS蠕虫攻击
cookie信息
定义:
Cookie是一种存储在计算机浏览器目录中的文本文件。当用户浏览某个站点并注册帐号,就会生成一个Cookie文件用于记录登录信息。目前,大多数网站都会应用Cookie技术,这既能给用户提供一个好的网络环境,又能方便收集访客信息。 通俗来讲:Cookie等于一个存储你账号密码的凭证,可以直接给网站提供使用,无需每次都输入账号密码。
获取cookie信息的方式
如何获取cookie信息 1. 进入浏览器(firefox),f12进入调试模式 2. 找到console选项 3. 在下面执行javascript:alert(document.cookie)
如何利用cookie信息进行登录
利用火狐浏览器的插件HackBar 加载url信息 勾选cookie信息,将收集到的cookie信息放上去。或者在post data下输入cookie也可以 点击execute(执行) 即可绕过登录界面,进入后台
XSS跨站脚本攻击防御方法
标签过滤 事件过滤 敏感字符过滤 设置httponly防止Cookie被获取 在将不可信数据插入到HTML标签之间时,对这些数据进行HTML 编码
靶场练习
靶场:dvwa
反射型XSS:
LOW模式:
正常输入下:
检验是否有弹窗:
有弹窗说明可以获取此界面的cookie信息
接下来我们打开HackBar复制url,进入到登录login界面:
点击execute执行后即可跳转到后台,绕过登录界面
验证:
成功绕过登录界面。
中级medium:
中级中,正常输入语句不会有弹窗,源码中发现,对其做了限制,我们想办法绕过,可以使用大小写交替的方式进行绕过。
获取cookie信息
下面的操作和low模式下一样。
高级high:
观察源码:
High级别的代码,preg_replace()函数用于正则表达式的搜索和替换,这使得双写绕过、大小写混淆绕过(正则表达式中i表示不区分大小写)不再有效。
换一种标签再次尝试:
<img src=1 onerror=alert('lc')>
<img src=1 onerror=alert(document.cookie)>
可以绕过,出现弹窗
获取cookie信息:
<img src=1 onerror=alert(document.cookie)>
检验并验证是否可以绕过登录,方法同low一致。
存储型XSS
存储型XSS和反射型XSS的区别就是在于: 反射型XSS是当攻击者输入攻击代码后,用户去点击才会去生效(需要去诱篇用户去点击) 存储型XSS是当我们输入攻击的代码后(直接写进数据库),当用户进行查询或者浏览时,每次用户的流量信息都会被记录,从而获取cookie信息和用户信息
low模式:
正常情况下:
输入代码后,验证可弹窗:
存储型,回退当前界面,再回到当前界面,还会弹窗
获取cookie信息:
验证方式和反射型low一样,使用HackBar工具进行操作。
查看源码:发现没有任何的限制条件
中级medium:
正常下:
输入代码,查看是否有弹窗出现:
查看源码:
我们可以尝试一种方法,我们可以在输入Name时,观察到有长度的限制,我们可以再次修改代码,修改长度,将代码写入到Name当中:
输入代码:查看是否有弹窗
提交确认以后:有弹窗
相同的方法,获取cookie信息:
验证是否有弹窗,获取cookie信息成功:
存储型XSS,当你回退到别的页面,再次回到或者点击此页面时,还会继续弹窗。
检验并验证是否可以绕过,和反射型的low方法一样。
还有一种方法,使用burp抓包:修改数据表信息
修改Name值,放包即可。
输入代码,进行抓包:
修改后,放包
放包以后,出现弹窗:
同样的方法获取cookie信息,使用HackBar工具进行操作即可。
(low模式也适用)
高级high:
查看源码可知道,使用正则表达式将该标签全部替换成了空值,大小写交替无法绕过,我们可以尝试其他标签。
方法同反射型XSS一致。
<img src=1 onerror=alert(111)>
<img src=1 onerror=alert(document.cookie)>
也可以使用burp抓包修改数据信息,再放包。
对于dvwa靶场的反射型和存储型XSS,不同难度等级都可尝试三种不同的绕过方式:
low: 反射型 可以直接在对应的输入框内输入<script>标签代码,看是否有弹窗,若有,进行XSS攻击 存储型XSS 检查代码,发现对Name输入长度有限制,可以修改输入时的Name字段长度来进行绕过 可以直接在内容处输入相应的<script>标签代码,抓包修改数据信息 使用burp抓包,修改数据包中的Name输入信息 medium: 反射型 <script>标签大小写交替使用,进行绕过限制 存储型 可以修改Name的默认输入长度,将代码输入进去即可 使用burp抓包,修改数据表信息,修改Name值 hige: 反射型 使用其他标签进行绕过限制 存储型 查看代码,修改Name输入的长度 使用其他标签,抓包修改数据
文章内容不妥之处,欢迎批评指正!