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作为胶水语言为了结合各类语言的优势,安全问题相对涉及面较为广泛。虽然问题影响不大,但是挖掘漏洞的思路非常好。
心情随笔 肠炎的症状(肠炎的症状有哪些?)大家都了解,日常饮食会马上伤害肠菌。在现实生活中,很多人全是有肠胃病的经历,其对身体造成 的伤害是十分大的。对于患有这类症状的人来讲,无法马上接受治疗,前期...
聊天记录误删后是没有办法找回的,但是如果之前在电脑端登录过有记录是可以恢复的 怎么导出微信聊天记录?不知道大家在使用微信的过程中,有没有定期备份聊天记录的习惯,现在各项数据都直接保存于手机。 如何恢复...
你报警没有多少用处,网络上取证非常困难,对方只要更换其他微信账户,你无法查询到对方,这个对于破案非常不利,所以你报警没有多少意义。 当然不可靠。没准打算还骗你一把。被骗了当然报警啊。网上的人最好还是...
家庭安装监控摄像头设备,在当下是已经普遍的现象,一方面可以在任何角落了解家里小孩或者老人的情况,还可以为偷盗事件做个取证。但是很多人还感觉安装监控这个事情仍处于需专业人员安装,今天我就在这里告诉大家根...
北京时间3月28日消息,据国外媒体报道,据安全专家们称,互联网在遭受到历史上最大规模的网络攻击之后,全球各地的连网速度普遍有所减慢。 反垃圾信息组织Spamhaus是一家旨在帮助电子邮箱服务供应商过...
我们在做SEO优化的时候,最基本的就是挖掘自己需要的关键词,然后更具自己需要的关键词来优化。那么我们做SEO优化如何挖掘关键词呢?我在这里整理了几个细节,希望文章对做SEO的朋友有所帮助。 一、确定...