千家信息网

Python sqlalchemy ORM注入漏洞的分析过程

发表于:2024-12-12 作者:千家信息网编辑
千家信息网最后更新 2024年12月12日,Python sqlalchemy ORM注入漏洞的分析过程,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。介绍:SQLAlchemy
千家信息网最后更新 2024年12月12日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_enginefrom sqlalchemy.orm import sessionmakerimport sqlalchemyprint("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_enginefrom sqlalchemy.orm import sessionmakerimport sqlalchemyprint("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注入漏洞的分析过程问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。

0