SSTI模版注入学习

模版引擎

模版引擎(这里特指用于Web开发的模版引擎)是为了使用户界面与业务数据(内容)分离而产生的,他可以生成特定格式的文档,利用模版引擎来生成前端的html代码,模版引擎会提供一套生成html代码的程序,然后只需要获取用户的数据,然后放到渲染函数里,然后生成模版+用户数据的前端html页面,然后反馈给浏览器,呈现在用户面前。

模版引擎也会提供沙箱机制来进行漏洞防范,但是可以用沙箱逃逸技术来进行绕过。

SSTI(模版注入)

SSTI就是服务器端模版注入(Server-Side Template Injection)

当前使用的一些框架,比如python的flask,php的tp,java的spring等一般都采用成熟的MVC模式,用户的输入先进入Controller控制器,然后根据请求类型和请求的指令发送给对应model业务模型进行业务逻辑判断,数据库存取,最后把结果返回给Vier视图层,经过模版渲染展示给 用户。

漏洞成因就是服务端接收了用户的恶意输入以后,未进过任何处理就将其作为Web应用模版的一部分,模版引擎在进行目标编译渲染的过程中,执行了用户插入的可以破坏模版的语句,因而可能导致了敏感信息泄露、代码执行、GetShell等问题。其影响范围主要取决于模版引擎的复杂性。

凡是使用模版的地方都可能会出现SSTI的问题,SSTI不属于任何一种语言,沙盒绕过也不是,沙盒绕过只是由于模版引擎发现了很大的安全漏洞,然后模版引擎设计出来的一种防护机制,不允许使用没有定义或者声明的模块,这适用于所有的模块引擎。

附表

image-20220120174838082


Frida Hook 总结

Frida 常用操作总结

Frida环境

https://github.com/frida/frida

Pyenv

python全版本随机切换,这里提供macOS上的配置方法

Frida安装

如果直接按下述安装则会直接安装frida和frida-tools的最新版本。

pip install frida-tools
frida --version
frida-ps --version

我们也可以自由安装旧版本的frida,例如12.8.0

pyenv install 3.7.7
pyenv local 3.7.7
pip install frida==12.8.0
pip install frida-tools==5.3.0

安装objection

pip install objection
objection -h

APP测试常见问题总结

平常在进行APP测试的时候发现存在了很多问题,现在总结记录一下对应的知识,都在这遍文章下记录更新,老规矩先放一张图

image-20211206111758936


CobaltSrike Shellcode分析

首先我们来看一张流程图

image-20211123201045600

首先打开IDA进行查看

进入主函数,主要看sub_401840()函数进行查看

image-20211112185819017

进入函数发现,首先获取系统时间戳,然后拼接字符串和创建线程通过管道读取shellcode,最后执行shellcode

image-20211114141830161


CobaltStrike二开环境初探

前言

我们使用CobaltStrike的时候,进行性的需要进行二次开发,使其对应的功能更加丰富,更加方便我们团队联合进行渗透的稳定性和隐蔽性。

2

反编译

IntelliJ IDEA 自带了一个反编译java的工具,有时候我们需要对 cobaltstrike 的整个 jar 包进行反编译,使用这个 IntelliJ IDEA 双击之类的反编译时要是对整个源码层面进行搜索并不是很方便,可使用其自带的反编译工具,可以做到批量的整个反编译。

这里先在 IntelliJ IDEA 安装目录找到 java-decompiler.jar 拷贝到一个准备好的目录,并且新建两个文件,一个 cs_bin 里面放未反编译的 cobaltstrike 再建一个 cs_src 文件,这个是空文件,是为了之后放反编译后的 cobaltstrike


Cobalt Strike特征隐藏与流量分析

Cobalt Strike简介

Cobalt Strike is software for Adversary Simulations and Red Team Operations. Cobalt Strike 简称CS, A-team详细介绍使用网址。CS是一款优秀的后渗透工具,可以在获取主机权限后进行长久权限维持,快速进行内网提权,凭据导出等。在后渗透中如果未修改特征,容易被流量审计设备监控,被蓝队溯源。

Cobalt Strike 是一个为对手模拟和红队行动而设计的平台,主要用于执行有目标的攻击和模拟高级威胁 者的后渗透行动。本章中会概述 Cobalt Strike 的功能集和相关的攻击流程。在本手册的剩余部分中会 详细的讨论这些功能。


常用Dict使用集合

身份证后六位:

import itertools
if __name__ == '__main__':
date = input("出生日期: ")
sex = '02468' if int(input("性别(男1女2): ")) % 2 == 0 else '13579' # 性别位
check = '0123456789X' # 校验位
other = '0123456789' # 其它位
nums = itertools.product(other, other, sex, check)
cards = []
for num in nums:
card = date + "".join(num)
cards.append(card)
print(len(cards))
print(cards)

微信小程序反编译

环境准备

Mac os 11.2.2
网易MUMU模拟器
APP文件管理器
微信开发者工具:Stable Build (1.05.2108130)

获取小程序包

1.使用自己手机上的微信打开对应的小程序,可以添加到"我的小程序"
2.打开模拟器的微信并登录
3.在模拟器微信的下拉小程序最近使用历史中打开"你所选的小程序",如果历史记录中没有就在我的小程序中找一找
4.打开小程序等待加载之后就可以去找源码包了
5.打开对应的文件管理器,进入到以下路径查找源码包(可以根据下载时间区分出你想要的源码包)
6.拷贝到mumu浏览器共享目录

小程序存放路径如下:/data/data/com.tencent.mm/MicroMsg/…/appbrand/pkg/

…部分根据时间戳或者单点击一个小程序在进行测试,大部分为03075c115f972899a1b1b8cc70506599这种

image-20210913181136982


Frida--Android逆向之动态加载dex Hook(下)

​ 上篇主要是跟着师傅学习了Robust的原理,并以做题的思路去求解了这个示例ctf,其实这是一种思路的启示,当我们在不知道怎么hook动态加载的dex,jar时候,找找是否存在能够操作动态加载出来的类的方法。

​ 这一篇我们一起来学习如何用Frida来hook DexclassLoader,如何用反射直接调用类的方法,达到跟hook一般类一样的效果。最终在虚拟机、测试机和frida中发现多种问题,之后更换测试机进行测试的时候仍然存在问题,留下了一部分搞不懂的地方,当个坑未,来找到解决问题在进行填补。

文章涉及内容以及使用到的工具

使用到的工具

ADT(Android Developer Tools)
Jadx-gui
JEB
frida
apktool
android源码包
Nexus 6p(genymotion,实体机等亦可)

涉及知识点

Java 泛型
Java 反射机制
DexClassLoader 动态加载机制
Frida 基本操作
Frida 创建任意类型数组(Java.array)
Frida 类型转换(Java.cast)
Frida 方法重载(overload)
Frida Spawn