Tomcat内存马
浅析Tomcat内存马
Web应用初始化流程
部署描述文件中由<listener>元素标记的事件监听器会被创建和初始化,事件监听器如果实现了ServletContextListener接口,将会调用其实现的contextInitialized()方法
部署描述文件中由<filter>元素标记的过滤器会被创建和初始化,并调用其init()方法,每一次请求时都只调用doFilter()方法进行处理
部署描述文件中由<servlet>元素标记的Servlet会根据<load-on-startup>的权值按顺序创建和初始化,并调用其init()方法,Servlet一旦被装入到Web容器之后,一般会长久驻留,直到Web容器停止运行或重新装入Servlet时结束生命周期,Servlet在第一次访问之后都只调用doGet()或doPost()方法
TomcatTomcat体系结构
Server:表示一个Tomcat实例(单例),即整个catalina servlet容器,主要是用来管理容器下各个Serivce组件的生命周期
Servi ...
Handlebars AST注入
详细分析Handlebars AST注入
原理图
handlebars的parser在解析NumberLiteral类型的字符串时会使用Number()函数进行强制转换,正常情况下这个字符串只能数字,但是用过原型链污染我们可以构造一个非数字型的字符串
// node_modules\handlebars\dist\cjs\handlebars\compiler\parser.jscase 35: this.$ = { type: 'StringLiteral', value: $$[$0], original: $$[$0], loc: yy.locInfo(this._$) }; break;case 36: this.$ = { type: 'NumberLiteral', value: Number($$[$0]), original: Number($$[$0]), loc: yy.locInfo(this._$) }; break;
在将AST编译为函数时,ha ...
Dubbo反序列化漏洞研究
分析一下CVE-2019-17564和CVE-2020-1849两个漏洞
前置知识简介
Apache Dubbo是一个分布式框架,致力于提供高性能透明化的RPC远程服务调用方案,以及SOA服务治理方案。Apache Dubbo在实际应用场景中主要负责解决分布式的相关需求。
dubbo
dubbo支持多种序列化方式并且序列化是和协议相对应的。比如:Dubbo支持dubbo、rmi、Hessian、http、webservice、thrift、redis等多种协议。
Hessian
Hessian是一种跨语言的高效二进制序列化方式。但这里实际不是原生的Hessian2序列化,而是阿里修改过的Hessian lite,Hessian是二进制的web service协议,官方对Java、Flash/Flex、Python、C++、.NET C#等多种语言都进行了实现。Hessian和Axis、XFire都能实现web service方式的远程方法调用,区别是Hessian是二进制协议,Axis、XFire则是SOAP协议,所以从性能上说Hessian远优于后两者,并且Hessian的J ...
Yii2最新反序列化POP链分析
Yii2 <= 2.0.42
研究Yii2最新的反序列化RCE,并参考作者思路挖掘新的Gadget
安装环境composer create-project --prefer-dist yiisoft/yii2-app-basic yii2
把目录放到网站下,访问http://127.0.0.1/yii2/web即可
然后在controllers/SiteController.php文件下添加我们的测试路由:
public function actionTest(){ return unserialize(base64_decode($_GET["data"]));}
漏洞利用<?phpnamespace Faker;class DefaultGenerator{ protected $default ; function __construct($argv) { $this->default = $argv; }}class ValidGe ...
Laravel Debug mode RCE复现
CVE-2021-3129
Laravel <= 8.4.2
Ignition <= 2.5.1
环境搭建
在kali2020下复现
git clone https://github.com/laravel/laravel.git # 下载laravel源码cd laravel # 切换到laravel目录git checkout -b e849812 # 切换到存在漏洞的分支composer update # 更新composercomposer install # composer安装依赖composer require facade/ignition==2.5.1 # 下载存在漏洞版本组件mv .env.example .env # 更改.env文件php artisan key:generate # 生成Application keyphp artisan serve # 启动服务器
创建resource/vi ...
Fastjson反序列化漏洞研究
研究Fastjson各版本系列反序列化漏洞
源码:https://github.com/alibaba/fastjson/wiki/Quick-Start-CN
安装依赖推荐在maven中配置,在pom.xml中添加
<dependencies> <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.24</version> </dependency></dependencies>
前置知识漏洞原理fastjson通过parse、parseObject处理以json结构传入的类的字符串形时,会默认调用该类的共有setter与构造 ...
内网穿透
记录内网穿透的一些知识
前置知识内网穿透
利用各种隧道技术,以网络防火墙允许的协议,绕过网络防火墙的封锁,实现访问被封锁的目标网络。
隧道技术
隧道技术是一种通过使用互联网络的基础设施在网络之间传递数据的方式。使用隧道传递的数据(或负载)可以是不同协议的数据帧或包。隧道协议将这些其他协议的数据帧或包重新封装在新的包头中发送。新的包头提供了路由信息,从而使封装的负载数据能够通过互联网络传递。被封装的数据包在隧道的两个端点之间通过公共互联网络进行路由。被封装的数据包在公共互联网络上传递时所经过的逻辑路径称为隧道。一旦到达网络终点,数据将被解包并转发到最终目的地。注意隧道技术是指包括数据封装、传输和解包在内的全过程。
隧道分类
网络层隧道:ICMP等
传输层隧道:TCP、UDP等
应用层隧道:HTTP、DNS、SSH、RDP等
实战环境
在实战环境中,我们要考虑目标机器的出入网情况,有可能只允许ICMP出入网,抑或是只允许HTTP出网,我们需要视特定情况选择对应的隧道,选择反弹shell、代理或者端口转发,选择正向代理或者反向代理等等。
环境目标机器:
Win7
192.168 ...
babyvm-vm逆向
题目源于【GWCTF 2019】,考点为vm逆向
记录一道比较典型的vm题
主函数程序主函数如下,下面我们对调用到的3个函数进行分析
vm自定义方法sub_55BE054DCCD1()函数用于存储需要调用到的方法,也可以观察到每调用完一次操作,a1就会自增跳到下一个命令,类似RIP功能
unsigned __int64 __fastcall sub_55BE054DCCD1(__int64 a1){ unsigned __int64 v2; // [rsp+18h] [rbp-8h] v2 = __readfsqword(0x28u); *(_DWORD *)a1 = 0; *(_DWORD *)(a1 + 4) = 0x12; *(_DWORD *)(a1 + 8) = 0; *(_DWORD *)(a1 + 12) = 0; *(_QWORD *)(a1 + 16) = &unk_55BE056DE060; *(_BYTE *)(a1 + 24) = 0xF1; *(_QWORD *)(a1 + 32) = sub_55BE054DCB ...
Login-py反编译
题目源于【羊城杯 2020】,主要考点为exe文件反编译为py文件,以及z3解方程
记录一下Reverse中的exe反编译为py文件
反编译exeinfo分析
把文件放到exeinfo看到是用py3.6版本的pyinstaller打包的
exe->pyc
pyinstxtractor下载地址:https://github.com/countercept/python-exe-unpacker.git
使用pyinstxtractor把exe里的pyc提取出来,py环境要尽量贴合源代码
python pyinstxtractor.py attachment.exe
找到和与题目对应的文件login,并添加后缀修改为login.pyc,因为pyinstaller在反编译时会把对应的py版本、时间戳等信息去掉,所以我们需要使用010 Editor或其他十六进制编辑器打开login.pyc和同目录下的struct,把struct的前12个字节填补到login.pyc前面
pyc->py
安装uncompyle6:pip install uncompyle ...
Reverse中Unity的逆向
记录一下关于Unity程序的基本逆向思路
Who is he
题目源于【SCTF2019】,考点为Unity程序逆向
dnspy分析题目是Unity程序,只有一段视频,一个输入框和一个点击按钮
因为.NET应用把所有的C#代码都打包在了Assembly-CSharp.dll,所以把Who is he/Who is he_Data/Managed/Assembly-CSharp.dll文件放入到dnspy分析
可以看到程序只是判断了提交的数据与程序某一段密文的解密结果是否相同,其中数据加密流程如下,是一个CBC模式的DES,而且给出了key,iv(和key一样)和密文
直接写解密脚本
这里需要注意的是C#里面字符串默认是Unicode,每个字符后面补”\x00”,所以这里的key为”1\x002\x003\x004\x00”
import base64from Crypto.Cipher import DESkey = "1\x002\x003\x004\x00"des = DES.new(key, DES.MODE_CBC, key)cipher = ...