目录
一、Python序列化反序列化相关函数
二、Python魔术方法
三、魔术方法实例详解
<__reduce__>
<__setstate__>
<__getstate__>
四、反序列化安全漏洞的产生
五、真题实例
六、CTF-CISCN华北-JWT&反序列化
七、代码审计自动化工具——bandit
1.代码。
2.运行结果。
1.代码。
2.运行结果。
1.代码。
2.运行结果。
1.代码。
2.运行结果。
3.当我们将调用计算器的代码更改为“ipconfig”后,执行代码可以看到成功执行了命令。
4.总结:
魔术方法执行调用下面的代码,如果下面的代码可控的话,就可能存在反序列化漏洞。
1.环境介绍:
利用Python-fask搭建的web应用,获职当前用户的信息,进行展示,在获取用户的信息时,通过对用户数据进行反序列化获取导致的安全漏洞!
2.代码片段。
3.打开。
4.攻击思路:
在cookie内植入user值,user值就是生成的恶意序列化数据。
5.构造exp。
7.在源代码中得知其会进行一次base64解码,所以我们需要对上面得到的序列化代码进行一次编码。对代码进行下面的修改。
9.抓取数据包,在数据包内添加下面的内容。
10.放包后可以看到计算器成功弹出。
1.通过提示:
寻找LV6 -> 购买修改支付逻辑 -> 绕过admin限制需修改jwt值 -> 爆破jwt密匙 -> 重组jwt值成为admin -> 购买进入会员中心 -> 源码找到文件压缩源码 -> Python代码南计反序列化 -> 构造读取flag代码进行序列化打印 -> 提交获取。
2.考点:
3.找到并将靶场环境打开。
4.打开后页面如下。
5.可以看到目的是买到v6。
6.因为它分好多页,所以可以使用脚本来爬取找到v6。
7.用来爬取的代码如下图所示。
9.点击购买后跳转到了登陆页面。
10.注册好后再次点击购买可以看到调换到了下面的页面。
11.但是点击结算后就又跳转到了下面的页面。
12.这是因为我们的存款不够购买v6的。
13.我们重新点击结算后抓包。
14.将上面数据包内的0.8(打的折)改成超级小的数。
15.放包后却又得到了下面的返回结果。
16.重新抓取数据包后我们注意到了数据包内的JWT值。
19.将破解后的密匙填入后将username更改成admin,得到新的JWT值。
20.将其粘贴到数据包内后再次放包。
21.可以看到这次网站成功进行了执行。
22.但是当我们点击下面的一键成为大会员后网页却没有反应。
23.此时查看网页源代码后可以看到下面的内容。
24.将其进行下载解压后打开,可以看到下面的内容。
25. 可以得知是网站原码,我们将其打开后进行分析。
26.我们直接使用搜索功能搜索序列化相关内容。
27.定位后可以看到调用序列化的函数。
28.经过分析得知其是python2进行编码的,因此我们使用python构造payload。
29.执行后可以看到成功构造了payload。
30.将value值改成我们刚刚生成的payload。
31.更改后再次点击一键成为大会员,可以看到成功获取到了flag。
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
安装后会在当前Python目录下bin
使用: bandit-r 需要审计的源码目录
安装后会在当前Python目录下script
使用: bandit -r 需要审计的源码目录
3.实操示例。