Python sqlalchemy ORM注入漏洞的分析过程
Python sqlalchemy ORM注入漏洞的分析过程,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
介绍:
SQLAlchemy是一个Python的SQL工具包以及数据库对象映射框架。
影响:
SQLAlchemy 1.3.3 版本存在ORM注入漏洞,攻击者可利用该漏洞获取数据库敏感信息。
安全等级:
高
漏洞编号:
CNVD-2019-17301
分析:
1、对于不合规的SQL语句为进行过滤和拦截。
2、所谓的SAQL注入,就是指在SQLAlchemy中没有对数据进行有效的验证导致恶意数据进入应用程序中造成的。
复现环境:
PHPStudy 2018 php 5.4.45
SQLAlchemy 1.3.3
Python3
环境搭建:
PHPStudy 2018
https://www.cr173.com/soft/838278.html
SQLAlchemy 1.3.3
pip install MySQL-pythonPip install SQLAlchemy
漏洞分析:
在sqlalchemy.orm.session.sessionmaker之中,这里是数据库连接会话。
漏洞入口定位:sqlalchemy\orm\session.py 第608行,这里是数据会连接会话的对象。
漏洞入口方法定位:sqlalchemy\orm\session.py 第1137行,进入到执行SQL语句的方法。
继续往下来看方法代码,第1267行将SQL语句进行执行。
Execute() 是SQL语句执行的一个接口,允许执行任意的SQL语句,没有对于SQL注入进行有效的过滤。
验证:
POC_01
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
import sqlalchemy
print("sqlalchemy_version:",sqlalchemy.__version__)
engine = create_engine('mysql://root:123456@192.168.56.101:3306/mysql?charset=utf8')
DB_Session = sessionmaker(bind=engine)
session = DB_Session()
session.execute('use mysql;')
print(
session.execute(
"""select * from user where User='root'
*********;"""
).fetchall()
)
截图_01
POC_02
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
import sqlalchemy
print("sqlalchemy_version:",sqlalchemy.__version__)
engine = create_engine('mysql://root:123456@192.168.56.101:3306/mysql?charset=utf8')
DB_Session = sessionmaker(bind=engine)
session = DB_Session()
session.execute('use mysql;')
print(
session.execute(
"""
select * from user where User='root' ********;
"""
).fetchall()
)
截图_02
修复建议:
1、过滤非预定义中的拼接字符,比如过多的引号、@、冒号、分号等等;
2、使用有效的安全防护设备;
3、开发管理中禁止使用该接口;
关于Python sqlalchemy ORM注入漏洞的分析过程问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。