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.代码。

2.运行结果。 

<__setstate__>

1.代码。

 2.运行结果。 

<__getstate__>

1.代码。

 2.运行结果。 

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

1.代码。

​​​

2.运行结果。

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

4.总结:

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

五、真题实例

1.环境介绍:

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

2.代码片段。

3.打开。

4.攻击思路:

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

5.构造exp。

6.执行得到序列化代码。

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

8.再次执行得到编码后的序列化代码。

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

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

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

1.通过提示:

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

2.考点:

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

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

4.打开后页面如下。

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

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

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

8. 可以看到在第180页内找到了。

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

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

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

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

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

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

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

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

17.我们将其粘贴到官网后进行解密,得到下面的结果。

18.使用脚本破解密匙。

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

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

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

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

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

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

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

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

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

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

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

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

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

七、代码审计自动化工具——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.实操示例。

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ranzi.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值