GetShell的姿势

0x00 什么是WebShell

渗透测试工作的一个阶段性目标就是获取目标服务器的操作控制权限,于是WebShell便应运而生。Webshell中的WEB就是web服务,shell就是管理攻击者与操作系统之间的交互。Webshell被称为攻击者通过Web服务器端口对Web服务器有一定的操作权限,而webshell常以网页脚本的形式出现。常见的WebShell使用asp、jsp和php来编写,提供了如执行系统命令、文件上传下载、数据库管理等功能。

0x01 获取WebShell的方式

获取WebShell的动作又叫做GetShell,是渗透测试各项能力的综合体现,也是渗透测试一个重要的阶段性目标。 GetShell方式众多,常见如文件上传、SQL注入、命令执行、文件包含、解析漏洞等等。有时候一个漏洞即可GetShell,有时候则需要各种漏洞打一套组合拳方可。So,多交流,才能掌握更多GetShell骚姿势。

1.文件上传漏洞GetShell


 

通过利用任意文件上传漏洞可以最快获取WebShell,一般常见有三种情况:(1)直接上传木马文件到目标服务器;(2)绕过防护(以下不包括绕过WAF防护,以后有时间再介绍绕过WAF的姿势)限制上传木马文件;(3)CMS等的通用任意文件上传漏洞。在对目标进行渗透测试时,可从前后台头像修改、文件导入、图片上传等处寻找文件上传接口。
 

此外,还需要根据识别的站点指纹寻找是否存在文件上传漏洞。以下是针对不同情况下上传WebShell的方式。

(1) 站点没有任何防护,且上传点未做安全校验,则可直接上传WebShell文件。

(2) 站点存在简单防护:

  • 前端校验文件后缀时,可先传允许的文件类型,然后抓包修改文件后缀。
  • MIME校验时,抓包修改Conten-Type为允许MIME类型。

(3) 绕过黑名单的方式:

  • 利用特殊文件后缀。如.php3、.php5、.php7、.phtml;asa、cer、cdx、aspx;jspx、 jsw、jsv、jspf等,但不一定都能被解析。
  • 配合Windows/Linux特性使用特殊字符,如上传.php::$DATA、“.php空格”等后缀的文件到Windows服务器,由于Windows的文件后缀中不能包含一些特殊符号,使得这些文件在保存在Windows服务器上时后缀只剩下.php。
  • Apache 1.x、2.2.x版本文件解析漏洞,.php.xx。
  • 后缀大小写,如pHp。
  • 在数据包中使用双filename,如filename=“1.jsp”; filename=“1.php”。

(4)绕过白名单:

  • 00截断,要求PHP<5.3.4且magic_quotes_gpc为OFF状态。
  • 配合解析漏洞(见解析漏洞getshell)。
  • 文件包含图片马(见文件包含getshell)。
     

(5)绕过文件内容检测:

  • 使用文件头绕过,如图片中使用GIF89a。
  • 使用图片马,接着配合解析漏洞或者文件包含漏洞getshell。
  • 使用元数据编辑器在图片的EXIF信息中插入一句话木马。

(6)CMS、框架等的文件上传漏洞。

如禅道<=12.4.2后台任意文件上传漏洞;编辑器漏洞、中间件的也不容忽视,如CVE-2017-12615可直接使用put写入木马文件。当然,“老洞”IIS6开启WebDAV可直接put写入文件。
 

以下两张图是禅道<=12.4.2后台任意文件上传漏洞的利用截图:

2.命令(代码)执行漏洞GetShell
 

利用命令(代码)执行漏洞写入WebShell文件从而GetShell。在此列举了以下四种常见情况作为说明。
 

(1)利用CMS、框架通用漏洞,如thinkPHP命令执行漏洞,影响范围较广,如鲶鱼CMS、ThinkCMF、yunCMS 等。Struts2远程命令(代码)执行漏洞,如S2-059、S2-057……
(2)中间件、架构通用漏洞,如:Jboss远程命令执行、weblogic未授权命令执行CVE-2020-14882……
(3)应用程序命令执行漏洞,如Redis4.x/5.x命令执行漏洞、Zabbix远程命令执行CVE-2020-11800……
(4)命令注入漏洞写入WebShell,根据Linux和Windows的不同采用不同的注入方式。如:
 

3.解析漏洞GetShell

利用解析漏洞将图片马等文件解析为恶意脚本文件从而GetShell,本文主要介绍在IIS、Nginx、Apache的解析漏洞。一般,该漏洞会配合文件上传漏洞等来获取WebShell。

(1)IIS解析漏洞。

  • IIS 5.x/6.0解析漏洞,其中文件名解析漏洞利用形式为*.asp;.jpg;目录解析漏洞利用形式为/asp/1.jpg。
  • IIS 7.0/7.5解析漏洞。其实该漏洞为cgi.fix_pathinfo的配置不当引起的解析漏洞,利用形式为x.jpg%20\0.php。

(2) Nginx解析漏洞

  • Nginx漏洞版本0.8.41 ~ 1.4.3 / 1.5.0 ~ 1.5.7默认配置导致解析漏洞,利用形式为x.jpg/.php。
  • Nginx漏洞版本0.5.、0.6.、0.7 <= 0.7.65、0.8 <= 0.8.37,利用形式为x.jpg%00.php。
  • CVE-2013-4547,利用形式为x.jpg[非空编码]\0.php
  • PHPStudy v8.1.0.7默认Nginx配置解析漏洞,利用形式为x.jpg/.php。

(3) Apache解析漏洞

  • 文件后缀x.php.ss.ss2会被解析为php文件
  • 利用配置文件。上传.htaccess配置文件,就会将.jpg解析为PHP文件,内容如下:
     

或者

4.SQL注入漏洞GetShell

在MySQL注入中,可以利用SQL注入获取WebShell,要写入WebShell文件到服务器中,需要满足以下条件:

1.网站物理路径;

2.文件写入的权限;

3.secure_file_priv条件没有设置为NULL;
要求mysql数据库的配置中,没有将secure_file_priv条件没有设置为NULL,即secure_file_priv=NULL时,无法导入导出文件;而当设置为空时,即secure_file_priv=时,则导入导出文件不受限制;如果设置为某个文件路径,如secure_file_priv=/mysql/时,则导入导出必须要在跟文件目录下完成。利用形式如下。

(1) 直接使用into outfile
 

(2) 直接使用into dumpfile

(3) 意为将数据导出到文件shell.php时,每个数据以一句话木马作为分割符

而在写入时,也可以将分隔符,即一句话木马做hex编码如:
 

(4) 设置每行数据开头为一句话木马
 


 

(5) 在字段之间的以一句话木马作为分隔符。
 

举例如下图所示:
 

5.文件包含漏洞GetShell

利用文件包含漏洞GetShell,由于面比较大,主要介绍PHP文件包含,其分为本地文件包含和远程文件包含。本地文件包含中,需要PHP的配置文件项allow_url_include和allow_url_fopen均设置为On。一般配合文件上传等漏洞GetShell,最常见的如先传图片马,再包含之。
 

远程文件包含中,需要PHP的配置文件项allow_url_fopen设置为On,利用方式是在远程服务器上存在shell.txt,内容为webshell,然后远程包含这个文件即可。笔者在文章https://sec-in.com/article/80中已经对文件包含漏洞做了详细的介绍,读者可前往阅读。

6.其他方式GetShell

将其命名为“其他方式”是因为不便将其再分类,笔者便都将其归纳至此。
 

(1) 0day、nday GetShell

0day自己挖,如一些cms黑白盒渗透、代码审计等;Nday靠收集。

(2) 后台创建模板写入WebShell

创建、修改模板时写入webshell文件。
 

(3) 修改网站配置插入WebShell

在网站设置如“网站名称”中插入一句话,但需要注意闭合,稍有不慎会将网站插坏的。
 

(4) 后台数据库备份GetShell

数据库备份时修改备份文件后缀,在数据中插入一句话。
 

(5) PHPMyadmin GetShell

开启日志文件,将日志文件的路径设置为网站的物理路径,如:

最后在执行的SQL语句中带有一句话木马,这样,日志文件内容中就包含了webshell。
 

导出数据时,将webshell导出到文件中,详见前文SQL注入GetShell。
 

(6) 组合漏洞GetShell

如DedeCMS CSRF + 任意文件写入。

(7) 后台修改文件上传类型

添加上传文件类型,如白名单中添加PHP。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

nodejs前端项目的CI/CD实现(二)jenkins的容器化部署

一、背景 docker安装jenkins&#xff0c;可能你会反问&#xff0c;这太简单了&#xff0c;有什么好讲的。 我最近就接手了一个打包项目&#xff0c;它是一个nodejs的前端项目&#xff0c;jenkins已在容器里部署且运行OK。 但是&#xff0c;前端组很追求新技术&#xff0c;不…

【STM32】STM32学习笔记-I2C通信外设(34)

00. 目录 文章目录 00. 目录01. I2C简介02. I2C外设简介03. I2C框图04. I2C基本结构05. 主机发送06. 主机接收07. 软件/硬件波形对比08. 预留09. 附录 01. I2C简介 I2C(Inter&#xff0d;Integrated Circuit)总线是一种由NXP&#xff08;原PHILIPS&#xff09;公司开发的两线式…

Web3艺术市场:NFT与数字创作的结合

在数字时代&#xff0c;随着区块链技术的崛起&#xff0c;一种新型数字资产&#xff0c;非同质化代币&#xff08;NFT&#xff09;&#xff0c;正逐渐改变传统艺术市场的格局。这种数字化的艺术品售卖方式成为了Web3艺术市场的代表&#xff0c;推动着数字创作与艺术市场的结合。…

深度学习—常见的卷积操作和卷积神经网络

各种常见的卷积操作 0、三种模式及输出矩阵尺寸计算 W输入矩阵宽&#xff0c;w是卷积核的大小&#xff0c;p是padding的数值&#xff0c;stride是滑动步幅 Full 补k-1圈 &#xff1a;w0 &#xff08; | W | - w 2p &#xff09;/ stride 1 Same 补若干圈&#xff1a;w0 …

UI组件在线预览,程序员直呼“不要太方便~”

一、介绍 以往大家如果想查看组件的使用效果&#xff0c;需要打开DevEco Studio构建工程。现在为了便于大家高效开发&#xff0c;文档上线了JS UI组件在线预览功能&#xff0c;无需本地构建工程&#xff0c;在线即可修改组件样式等参数、一键预览编译效果。程序员直呼&#xff…

使用 ClassFinal 对SpringBoot jar加密加固并进行机器绑定

写在前面&#xff1a;各位看到此博客的小伙伴&#xff0c;如有不对的地方请及时通过私信我或者评论此博客的方式指出&#xff0c;以免误人子弟。多谢&#xff01;如果我的博客对你有帮助&#xff0c;欢迎进行评论✏️✏️、点赞&#x1f44d;&#x1f44d;、收藏⭐️⭐️&#…

回溯算法篇-02:括号生成

力扣22、括号生成 题目分析 对于括号类问题&#xff0c;有以下两个性质&#xff1a; 一个“合法”的括号组合中&#xff0c;左括号数量一定等于右括号数量对于一个 “合法” 的括号字符串组合 p &#xff0c;必然对于任何 0 < i < len(p) 都有&#xff1a;子串 p[0...i…

商铺工厂119消防火灾SOS声光一键报警器平台联网

商铺工厂119消防火灾SOS声光一键报警器平台联网 1.设有火灾自动报警系统的建筑&#xff0c;宜选择符合相关现行国家技术标准的消防应急广播、火灾声光警报类产品&#xff0c;由火灾报警或消防联动控制器进行控制&#xff0c;在消防控制室应能一键启动全楼火灾声光警报或向全楼进…

phpStorm 设置终端为git bash

环境&#xff1a; windows , PhpStorm 2022 为自己的终端配置git样式的使用&#xff0c; 默认终端样式 一、打开设置&#xff0c;选择git bin 二、重新打开终端 不加--login -i 的终端 加了--login -i 的终端 最重要的一点是什么&#xff0c;他可以像mac一样支持 ctrlv 复…

【Qt5】QString的成员函数chop

2024年1月19日&#xff0c;周五下午 QString 的 chop 方法用于从字符串的末尾移除指定数量的字符。这个方法会修改原始字符串&#xff0c;并返回 void。 下面是一个简单的示例&#xff1a; #include <QString> #include <QDebug>int main() {QString originalStr…

PE解释器之PE文件结构(二)

接下来的内容是对IMAGE_OPTIONAL_HEADER32中的最后一个成员DataDirectory&#xff0c;虽然他只是一个结构体数组&#xff0c;每个结构体的大小也不过是个字节&#xff0c;但是它却是PE文件中最重要的成员。PE装载器通过查看它才能准确的找到某个函数或某个资源。 一&#xff1…

安捷伦AgilentE8363B网络分析仪

安捷伦AgilentE8363B网络分析仪 E8363B 是 Agilent 的 40 GHz 网络分析仪。网络分析仪是一种功能强大的仪器&#xff0c;可以以无与伦比的精度测量射频设备的线性特性。许多行业使用网络分析仪来测试设备、测量材料和监控信号的完整性 附加功能&#xff1a; 104 dB 的动态范围…

Redis--HyperLogLog的指令语法与使用场景举例(UV统计)

文章目录 前言HyperLogLog介绍HyperLogLog指令使用使用场景&#xff1a;UV统计 前言 Redis除了常见的五种数据类型之外&#xff0c;其实还有一些少见的数据结构&#xff0c;如Geo&#xff0c;HyperLogLog等。虽然它们少见&#xff0c;但是作用却不容小觑。本文将介绍HyperLogL…

使用KTO进行更好、更便宜、更快速的LLM对齐

KTO全称为Kahneman-Tversky Optimisation&#xff0c;这种对齐方法使在我们的数据上对大型语言模型&#xff08;LLM&#xff09;进行对齐变得前所未有地容易和便宜&#xff0c;而且不会损害性能。大型语言模型的成功在很大程度上得益于与人类反馈的对齐。如果ChatGPT曾经拒绝回…

三星刚刚将Google Gemini集成到Galaxy S24中

我的新书《Android App开发入门与实战》已于2020年8月由人民邮电出版社出版&#xff0c;欢迎购买。点击进入详情 AI手机的新时代即将到来。 三星刚刚将 Google Gemini 集成到 Galaxy S24 中&#xff01; 准备好迎接智能手机吧&#xff0c;它不仅智能&#xff0c;而且具有灵性。…

Jvm相关知识(面试高级必备)

类的实例化顺序 先静态、先父后子 先静态&#xff1a;父静态>子静态 优先级&#xff1a;父类>子类 静态代码块>非静态代码块>构造函数 一个类的实例化过程&#xff1a; ①&#xff0e;父类的static代码块&#xff0c;当前类的static; ②&#xff0e;顺序执行…

线程池的简单介绍及使用

线程池 线程池的参数介绍拒绝策略 线程池的任务处理流程使用Executors创建常见的线程池 线程池的参数介绍 corePoolSize: (核心线程数)这是线程池中始终存在的线程数&#xff0c;即使这些线程处于空闲状态。maximumPoolSize:(最大线程数) 是线程池允许的最大线程数。keepAliveT…

【动态规划】【C++算法】741摘樱桃

作者推荐 【动态规划】【数学】【C算法】18赛车 涉及知识点 动态规划 LeetCode741 摘樱桃 给你一个 n x n 的网格 grid &#xff0c;代表一块樱桃地&#xff0c;每个格子由以下三种数字的一种来表示&#xff1a; 0 表示这个格子是空的&#xff0c;所以你可以穿过它。 1 表…

EasyRecovery2024数据恢复大师最新版本下载

EasyRecovery可以从初始化的磁盘恢复损坏或删除的文件。该软有易于使用&#xff0c;即使是最缺乏经验的用户也可以轻松恢复数据。一款威力非常强大的硬盘数据恢复工具。能够帮你恢复丢失的数据以及重建文件系统。EasyRecovery 不会向你的原始驱动器写入任何东东&#xff0c;它主…

深入探索 Android 中的 Runtime

深入探索 Android 中的 Runtime 一、什么是 Runtime二、Android 中的 Runtime 类型2.1. Dalvik Runtime2.2. ART&#xff08;Android Runtime&#xff09; 三、Runtime 的作用和特点3.1. 应用程序执行环境3.2. 跨平台支持3.3. 性能优化3.4. 应用程序优化 四、与应用开发相关的重…