web311-CVE-2019-11043-PHP-fpm远程代码执行漏洞
提示:似曾相识,就这一个文件,不用扫描
注释中只有一个<!-- cve-->
用burp抓包发现响应行中的X-Powered-By字段很可疑
谷歌之后发现该PHP版本存在漏洞:PHP 远程代码执行漏洞(CVE-2019-11043
漏洞原理
CVE-2019-11043 是一个远程代码执行漏洞,使用某些特定配置的 Nginx + PHP-FPM 的服务器存在漏洞,可允许攻击者远程执行代码
向Nginx + PHP-FPM的服务器 URL发送 %0a 时,服务器返回异常。
该漏洞需要在nginx.conf中进行特定配置才能触发。具体配置如下:
location ~ [^/]\.php(/|$) { ... fastcgi_split_path_info ^(.+?\.php)(/.*)$; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_pass php:9000; ... }
攻击者可以使用换行符(%0a)来破坏
fastcgi_split_path_info
指令中的Regexp。 Regexp被损坏导致PATH_INFO为空,从而触发该漏洞影响范围
在 Nginx + PHP-FPM 环境下,当启用了上述 Nginx 配置后,以下 PHP 版本受本次漏洞影响,另外,PHP 5.6版本也受此漏洞影响,但目前只能 Crash,不可以远程代码执行:
- PHP 7.0 版本
- PHP 7.1 版本
- PHP 7.2 版本
- PHP 7.3 版本
漏洞复现存在的问题是漏洞利用工具(phuip-fpizdam)需要安装go环境,安装教程
安装好之后进行以下操作
- 创建工作工作空间(Workspaces),官方建议目录
$HOME/go
- 将你的工作空间路径声明到环境变量中
- 在你的工作空间创建你的第一个工程目录
- 下载并运行漏洞利用工具phuip-fpizdam
如果出现这种情况是因为默认使用的代理是proxy.golang.org,在国内无法访问
解决方法
然后重新build,生成可执行文件phuip-fpizdam
- 利用工具写入shell
写入成功
然后访问index.php?a=ls,就可以执行命令了,有可能执行失败,多刷新几次就行了
web312-CVE-2018-19518-PHP imap_open函数任意命令执行漏洞
前端是邮箱登录
题目也没有给出提示,使用burp抓取数据包,从响应中找线索
服务器是Debian系统,而且前端是与邮箱有关,有没有一个漏洞与两者有关呢,答案是肯定的
CVE-2018-19518
漏洞原理
IMAP协议(因特网消息访问协议)它的主要作用是邮件客户端可以通过这种协议从邮件服务器上获取邮件的信息,下载邮件等。它运行在TCP/IP协议之上,使用的端口是143,在php中调用的是imap_open函数来实现功能
imap_open(string $mailbox,string $user,string $password)
其中参数mailbox,是用来连接邮箱服务器的,它会调用rsh来连接远程shell而,debian/ubuntu中默认使用ssh来代替rsh
又因为ssh命令中可以通过设置oProxyCommand来调用第三方命令,所以攻击者通过注入这个参数,最终将导致命令执行漏洞影响系统:Debian/ubuntu
生成shell之后就可以执行命令了
web313-CVE-2012-1823-PHP-CGI远程代码执行漏洞
还是用burp抓包,PHP版本是PHP/5.4.1
谷歌到该版本对应的漏洞,PHP-CGI远程代码执行漏洞(CVE-2012-1823)分析
漏洞原理
上边链接,p神博客已经给出了详细说明
漏洞简单来说,就是用户请求的querystring被作为了php-cgi的参数
影响版本:php < 5.3.12 php < 5.4.2
用到的cgi模式下的参数
-
-s
显示文件源码 -
-d
指定配置项
通过使用-d
指定auto_prepend_file
来制造任意文件包含漏洞,执行任意代码
构造payload
web314-session文件包含
传入的参数中不能出现冒号,也就是不能用伪协议,可以使用PHP_SESSION_UPLOAD_PROGRESS文件包含,去执行命令
查看flag
web315-XDebug 远程调试漏洞
提示:debug开启,端口9000
提示既然这么明显了,那肯定找关于debug的漏洞,XDebug 远程调试漏洞
漏洞原理
XDebug是PHP的一个扩展,用于调试PHP代码。如果目标开启了远程调试模式,并设置
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代码
因为需要使用dbgp协议与目标服务器通信,所以无法用http协议复现漏洞,p神给了脚本下载地址
成功执行命令