欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

看俺怎样开始Python对象注入的运用哦

来源:本站整理 作者:佚名 时间:2017-09-22 TAG: 我要投稿

在本日的 Defencely Lab 中,咱们将具体先容和演示 Python 工具注入进击(Python Object Injection)的细节。全部演示将应用咱们专门编写的易受进击的应用程序和破绽,源码能够在这里找到 - Github – Python Object Injection。
需要的基础知识
懂得根本的 OOP 观点
Python 类和工具简介
甚么是类?
类是一个模板,你能够在其中存储变量和办法。
甚么是工具?
工具能够是任何器械,一个类的实例,一个变量或许一个类中的函数。
让咱们来看一个现实的例子:

在这里,你能够看到咱们创立了一个名为 Test 的类实例,并将它分派给了一个名为 simpleapp 的变量,将变量 rony 的值通报给了该实例。
输入以下:

1
simpleapp = Test(rony)
当履行此代码时,python 会创立一个工具,而后将咱们的值通报给第一个参数。每当 python 创立一个工具时,__init__ 函数就会被挪用。__init__ 像 python 中的结构函数同样工作。
伴跟着咱们的输入,打印出了一个随机的数字,这是由于咱们间接打印出了实例分派的变量,以表现 python 是若何看待一个工具的。
 
甚么是工具注入?
工具注入是一种应用程序级的安全破绽,它容许进击者依据上下文履行严重的进击。
Python 专门将某原生模块命名为“Pickle”,它在特定情况下轻易遭到工具注入进击。
危险产生在当用户节制的数据被通报时,Python 曾经在其民间文档中指出 pickle 是一个存在危险的模块。

咱们能够将“Pickle”模块与 PHP 中的 serialize/unserialize() 原生函数停止比拟,当存在用户输入时该 PHP 函数也轻易遭到工具注入进击。
在 Python 中,与 PHP 分歧的是,咱们不需要一个把戏办法作为注入到工具的前提。
在 python 中停止序列化和反序列化仅仅是对数据的 Pickling 和 Unpickling。
除非用户输入的数据被通报到 Unpickling 的过程当中,不然,Python 中数据的 Unpickling 并不一定是危险的。
下面是 Python 中 Pickled 和 Unpickled 的数据的模样:

检测工具注入进击
要完成工具注入,你必须在应用程序上履行一个白盒 Pentest。由于每当你在繁杂工具上 pickling 时,Python 中的序列化数据都邑带有类名、变量和值。
Pickle 模块供给了四种简略和疾速 pickling 和 unpickling 的办法。
dump()
dumps()
load()
loads()
您能够在 Python 民间文档中找到它们各自的功效。
正如我曾经提到的,Unpickling 数据并不一定是危险的,但假如你是在后端处置,那末 pickling 和 unpickling 用户输入的数据便是危险的。永久不要信任用户的输入。
假如所供给的数据是由用户节制的,那末很显著会被窜改。
是以,假如你看到 pickled 的数据正在经由过程 HTTP 办法传输,则能够存在工具注入。
 
懂得易受进击应用程序的工作流
文件名:pickle.py

咱们将研讨上述代码,并据此完成一个工具注入。
疏忽下面代码上写的一切内容,让咱们集中精力在三件工作上。
在这里,arg 变量是用户的输入。
类 simpleApp 中的 final_workout() 办法将运转一个 python 文件。
app.secureaApp() 办法用于 unpickling 输入的数据。
如今,让咱们更深上天懂得这些办法正在饰演的脚色。
simpleApp() 类中的 secureApp() 办法:
我假定你曾经浏览了 Python 的民间文档,而且晓得了这篇文章应用的一切办法的输入输入。
办法:
dump()
dumps()
load()
loads()
secureApp() 办法所做的是将文件名作为参数。应用 pickle 模块的 load() 办法 Unpickling 文件中的数据,并将 unpickled 的数据付与变量 workDone。以后该变量会作为 final_workout() 办法的参数。
咱们看看 final_workout() 办法的内容。
simpleApp() 类中的 final_workout() 办法:
该办法创立一个名为 code.py 的 python 文件,将 unpickled 的数据写入文件并运转它。
咱们来看看,当应用曾经天生的序列化数据来运转易受进击的应用程序 pickle.py 时,会产生甚么。

正如咱们看到的,它打印出了序列化数据的内容,并胜利运转,打印出字符串。
下面咱们将进修若何结构本身的序列化数据,以在雷同的应用程序上胜利地停止工具注入。
编写破绽应用
如今咱们晓得 pickle.py 正在应用序列化的数据,是以,咱们将应用 dumps() 办法 pickle 咱们结构的 payload。
文件名:exploit_pickle.py

咱们将序列化一条包括了编码后体系敕令的代码, 并在它工作时对其停止测试。
如今咱们就胜利地注入了本身经心结构的代码。

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载