Python反序列化漏洞及魔术方法详细全解(链构造、自动审计工具bandit)

目录

一、Python序列化反序列化相关函数

二、Python魔术方法

三、魔术方法实例详解

<__reduce__>

<__setstate__>

<__getstate__>

四、反序列化安全漏洞的产生

五、真题实例

六、CTF-CISCN华北-JWT&反序列化

七、代码审计自动化工具——bandit


一、Python序列化反序列化相关函数

  • pickle.dump(obj, file) :将对象序列化后保存到文件
  • pickle.load(file) :读取文件, 将文件中的序列化内容反序列化为对象。
  • pickle.dumps(obj) :将对象序列化成字符串格式的字节流
  • pickle.loads(bytes_obj) :将字符串格式的字节流反序列化为对象。

二、Python魔术方法

  • __reduce__() :反序列化时调用。
  • __reduce_ex__() :反序列化时调用。
  • __setstate__() :反序列化时调用。
  • __getstate__() :序列化时调用。

三、魔术方法实例详解

<__reduce__>

1.代码。

Python反序列化漏洞及魔术方法详细全解(链构造、自动审计工具bandit)_第1张图片

2.运行结果。 

Python反序列化漏洞及魔术方法详细全解(链构造、自动审计工具bandit)_第2张图片

<__setstate__>

1.代码。

Python反序列化漏洞及魔术方法详细全解(链构造、自动审计工具bandit)_第3张图片

 2.运行结果。 

Python反序列化漏洞及魔术方法详细全解(链构造、自动审计工具bandit)_第4张图片

<__getstate__>

1.代码。

Python反序列化漏洞及魔术方法详细全解(链构造、自动审计工具bandit)_第5张图片

 2.运行结果。 

Python反序列化漏洞及魔术方法详细全解(链构造、自动审计工具bandit)_第6张图片

四、反序列化安全漏洞的产生

1.代码。

Python反序列化漏洞及魔术方法详细全解(链构造、自动审计工具bandit)_第7张图片

​​​Python反序列化漏洞及魔术方法详细全解(链构造、自动审计工具bandit)_第8张图片

2.运行结果。

3.当我们将调用计算器的代码更改为“ipconfig”后,执行代码可以看到成功执行了命令。

Python反序列化漏洞及魔术方法详细全解(链构造、自动审计工具bandit)_第9张图片

4.总结:

        魔术方法执行调用下面的代码,如果下面的代码可控的话,就可能存在反序列化漏洞。 

五、真题实例

1.环境介绍:

        利用Python-fask搭建的web应用,获职当前用户的信息,进行展示,在获取用户的信息时,通过对用户数据进行反序列化获取导致的安全漏洞! 

2.代码片段。

Python反序列化漏洞及魔术方法详细全解(链构造、自动审计工具bandit)_第10张图片

Python反序列化漏洞及魔术方法详细全解(链构造、自动审计工具bandit)_第11张图片

3.打开。

Python反序列化漏洞及魔术方法详细全解(链构造、自动审计工具bandit)_第12张图片

4.攻击思路:

        在cookie内植入user值,user值就是生成的恶意序列化数据。

5.构造exp。

Python反序列化漏洞及魔术方法详细全解(链构造、自动审计工具bandit)_第13张图片6.执行得到序列化代码。

Python反序列化漏洞及魔术方法详细全解(链构造、自动审计工具bandit)_第14张图片

7.在源代码中得知其会进行一次base64解码,所以我们需要对上面得到的序列化代码进行一次编码。对代码进行下面的修改。

Python反序列化漏洞及魔术方法详细全解(链构造、自动审计工具bandit)_第15张图片8.再次执行得到编码后的序列化代码。

9.抓取数据包,在数据包内添加下面的内容。

Python反序列化漏洞及魔术方法详细全解(链构造、自动审计工具bandit)_第16张图片

10.放包后可以看到计算器成功弹出。

Python反序列化漏洞及魔术方法详细全解(链构造、自动审计工具bandit)_第17张图片

六、CTF-CISCN华北-JWT&反序列化

1.通过提示:

        寻找LV6 -> 购买修改支付逻辑 -> 绕过admin限制需修改jwt值 -> 爆破jwt密匙 -> 重组jwt值成为admin -> 购买进入会员中心 -> 源码找到文件压缩源码 -> Python代码南计反序列化 -> 构造读取flag代码进行序列化打印 -> 提交获取。

2.考点:

  • 考点一:JWT 身份验证
  • 考点二:Python 代码审计 反序列化

3.找到并将靶场环境打开。

Python反序列化漏洞及魔术方法详细全解(链构造、自动审计工具bandit)_第18张图片

4.打开后页面如下。

Python反序列化漏洞及魔术方法详细全解(链构造、自动审计工具bandit)_第19张图片

5.可以看到目的是买到v6。

Python反序列化漏洞及魔术方法详细全解(链构造、自动审计工具bandit)_第20张图片

6.因为它分好多页,所以可以使用脚本来爬取找到v6。

7.用来爬取的代码如下图所示。

Python反序列化漏洞及魔术方法详细全解(链构造、自动审计工具bandit)_第21张图片8. 可以看到在第180页内找到了。

Python反序列化漏洞及魔术方法详细全解(链构造、自动审计工具bandit)_第22张图片

Python反序列化漏洞及魔术方法详细全解(链构造、自动审计工具bandit)_第23张图片

9.点击购买后跳转到了登陆页面。

Python反序列化漏洞及魔术方法详细全解(链构造、自动审计工具bandit)_第24张图片

10.注册好后再次点击购买可以看到调换到了下面的页面。

11.但是点击结算后就又跳转到了下面的页面。

Python反序列化漏洞及魔术方法详细全解(链构造、自动审计工具bandit)_第25张图片

12.这是因为我们的存款不够购买v6的。

13.我们重新点击结算后抓包。

Python反序列化漏洞及魔术方法详细全解(链构造、自动审计工具bandit)_第26张图片

14.将上面数据包内的0.8(打的折)改成超级小的数。

15.放包后却又得到了下面的返回结果。

16.重新抓取数据包后我们注意到了数据包内的JWT值。

Python反序列化漏洞及魔术方法详细全解(链构造、自动审计工具bandit)_第27张图片17.我们将其粘贴到官网后进行解密,得到下面的结果。

Python反序列化漏洞及魔术方法详细全解(链构造、自动审计工具bandit)_第28张图片18.使用脚本破解密匙。

19.将破解后的密匙填入后将username更改成admin,得到新的JWT值。

Python反序列化漏洞及魔术方法详细全解(链构造、自动审计工具bandit)_第29张图片

20.将其粘贴到数据包内后再次放包。

Python反序列化漏洞及魔术方法详细全解(链构造、自动审计工具bandit)_第30张图片

21.可以看到这次网站成功进行了执行。

Python反序列化漏洞及魔术方法详细全解(链构造、自动审计工具bandit)_第31张图片

22.但是当我们点击下面的一键成为大会员后网页却没有反应。

23.此时查看网页源代码后可以看到下面的内容。

Python反序列化漏洞及魔术方法详细全解(链构造、自动审计工具bandit)_第32张图片

24.将其进行下载解压后打开,可以看到下面的内容。

Python反序列化漏洞及魔术方法详细全解(链构造、自动审计工具bandit)_第33张图片

25. 可以得知是网站原码,我们将其打开后进行分析。

26.我们直接使用搜索功能搜索序列化相关内容。

Python反序列化漏洞及魔术方法详细全解(链构造、自动审计工具bandit)_第34张图片

27.定位后可以看到调用序列化的函数。

Python反序列化漏洞及魔术方法详细全解(链构造、自动审计工具bandit)_第35张图片

28.经过分析得知其是python2进行编码的,因此我们使用python构造payload。

Python反序列化漏洞及魔术方法详细全解(链构造、自动审计工具bandit)_第36张图片

 29.执行后可以看到成功构造了payload。

30.将value值改成我们刚刚生成的payload。

Python反序列化漏洞及魔术方法详细全解(链构造、自动审计工具bandit)_第37张图片

Python反序列化漏洞及魔术方法详细全解(链构造、自动审计工具bandit)_第38张图片

31.更改后再次点击一键成为大会员,可以看到成功获取到了flag。 

Python反序列化漏洞及魔术方法详细全解(链构造、自动审计工具bandit)_第39张图片

七、代码审计自动化工具——bandit

1.参考:

GitHub - PyCQA/bandit: Bandit is a tool designed to find common security issues in Python code.

Test Plugins — Bandit documentation

2.安装: pip install bandit

  • linux

        安装后会在当前Python目录下bin

        使用: bandit-r 需要审计的源码目录

  • windows

        安装后会在当前Python目录下script

        使用: bandit -r 需要审计的源码目录

3.实操示例。

Python反序列化漏洞及魔术方法详细全解(链构造、自动审计工具bandit)_第40张图片

你可能感兴趣的:(序列化与反序列化漏洞,开发语言,web安全,python,序列化反序列化,代码审计)