Python ctypes 溢出漏洞分析(CVE

访客4年前黑客文章719

简介

Python是一款快速、优雅的编程语言。ctypes 是Python的外部函数库,它提供了与 C 兼容的数据类型,并允许调用 DLL 或共享库中的函数,可使用该模块以纯 Python 形式对这些库进行封装。在ctypes之中存在栈溢出问题。漏洞影响范围:小于3.9.1版本,影响模块_ctypes/callproc.c。

分析环境

系统版本:Win10 x64? ? ? 环境版本:VS2019? ? ? Python源码版本:3.8.7rc1

环境搭建

1、安装VS2019,访问?https://visualstudio.microsoft.com/zh-hans/vs/按照安装步骤即刻安装。

2、访问?https://github.com/python/cpython/tree/v3.8.7rc1/下载CPython源码。

3、在管理员权限下执行 cpython-3.8.7rc1\PCbuild\build.bat 等待其执行成功。

4、执行 cpython-3.8.7rc1\PCbuild\pcbuild.sln。

5、启动vs2019之后,右键选择 解决方案 找到 属性->配置属性。因为其他模块不需要分析,所以就不用编译。按照图中勾选。

6、选择菜单栏之中 生成->生成解决方案。

7、环境启动后,在需要调试的 *** 上设置断点。

代码分析

先来看到 _ctypes\callproc.c PyCArg_repr *** 。这个函数的作用将数据类型转换为C数据类型进行传递。 该 *** 内定义变量 buffer[256]用于存放字符。

问题代码位于 cpython-3.8.7rc1\Modules_ctypes\callproc.c Line:521。使用sprintf作为字符串格式化,由于双精度长度超过预期。当给予超长字符串时候将会触发字符串超长溢出。

咱们执行POC之后观察DEBUG情况

>>> from ctypes import * 
>>> c_double.from_param(1e300)

Debug情况表示已经触发溢出,漏洞实际影响较小,buffer 256长度无法继续利用。如果大佬有什么好思路,欢迎补充。

修复情况

咱们访问 https://github.com/python/cpython/blob/master/Modules/_ctypes/callproc.cLine:488 PyCArg_repr()。

在新版本之中该问题已经得到修复,已经将sprintf换成PyUnicode_FromFormat。

温馨提示:最新版已修复,需要使用C\C++开发Python模块的大佬要注意更新。

总结

Python作为胶水语言为了结合各类语言的优势,安全问题相对涉及面较为广泛。虽然问题影响不大,但是挖掘漏洞的思路非常好。

相关文章

登录密码重置漏洞分析溯源

登录密码重置漏洞分析溯源

0x01背景介绍1、通过“朝阳群众”的举报,证实手机号“17101304128”在系统平台从事非法集资、诈骗活动。2、请重置“17101304128”登录密码,以便登录获取完整的数字证据0x02漏洞利...

微信视频没有提示音怎么回事

在4g/5G移动互联网的普及化下,语音聊天语音通话愈来愈多人到应用。有时会碰到语音聊天语音通话拨电话不响的状况,造成危害了沟通交流。应对这类状况,我们可以依照下边方式来处理。 1、查验手机音量 语...

上线前,请先准备好这份 Checklist

上线前,请先准备好这份 Checklist

编辑导语:任何一件事在完成之前,都需要做一个Checklist,从而查抄错误,规避风险。这对付上线来说,尤其重要,稍不留意就大概损害到用户的体验感。本文作者从筹备阶段、宣布阶段、验证阶段和异常处理惩罚...

大连高端男士养生会所 ,超好的私人之所

大连市高端男士健康养生会所,非常好的个人之所 茶可雅心,亦能车行道,心里平静,修身养性养德。【枫韵】 【枫韵】高端个人会所,专为现代都市精锐男士倾情打造出的技术专业高端SPA会所,承袭历史悠久欧州S...

杭州高端商务群是多少【李凡】

杭州高端商务群是多少【李凡】 今天给大家分享的内容是“杭州高端商务群是多少【李凡】”,我是李凡,来自九龙坡区,今年21岁,作为职业:房地产,我热爱我的职业:房地产。三圍:胸64腰89臀67 鞋碼:38...

黑客的qq号多少钱-求ps大神联系方式-Web程序流程漏洞攻击

求ps大神联系方式-Web程序流程漏洞攻击 1、指令注入(Command Injection) 2、eval注入(Eval Injection) 3、手机客户端脚本制作攻击(Script Ins...