返回顶部
首页 > 资讯 > 后端开发 > Python >Python代码审计中的SQL和ORM注入是怎样的
  • 956
分享到

Python代码审计中的SQL和ORM注入是怎样的

2023-06-17 05:06:56 956人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

本篇文章为大家展示了python代码审计中的sql和ORM注入是怎样的,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Python代码审计方法多种多样,但是总而言之是根据前人思路的迁移融合扩展而形成。

本篇文章为大家展示了python代码审计中的sqlORM注入是怎样的,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

Python代码审计方法多种多样,但是总而言之是根据前人思路的迁移融合扩展而形成。目前Python代码审计思路,呈现分散和多样的趋势。Python微薄研发经验以及结合实际遇到的思路和技巧进行总结

SQL注入和ORM注入

这两者注入相似度较高,所以打算放在一起分析和总结。它们所用原理OWASP TOP TEN  中的描述非常合适,“将不受信任的数据作为命令或查询的一部分发送到解析器时,会产生诸如SQL注入、NoSQL注入、OS注入和LDAP注入的注入缺陷。攻击者的恶意数据可以诱使解析器在没有适当授权的情况下执行非预期命令或访问数据。”。

1. SQL注入

Python  中常见存在风险SQL语句,在id或者Name可控的情况下存在安全隐患。可控参数可以将咱么期望他执行的代码按照语法进行拼接,从而执行原本预期之外的代码。

sql = "select id,name from user_table where id = %s and name = %s" % (id, name) cur.execute(sql)

然而在实际案例中,这种执行SQL语句并不多,比较典型的案例。实例代码如下:

import urllib import MySQLdb import SocketServer from Simplehttpserver import SimpleHttpRequestHandler class MyHandler(SimpleHTTPRequestHandler):     def _set_headers(self):         self.send_response(200)         self.send_header('Content-type', 'text/html')         self.end_headers()     def do_GET(self):         print("Got get request %s" % (self.path))         hql = urllib.splitquery(self.path)[1]         uri_c = str(hql)         print('cmd===%s' % (uri_c))         sql = "select id from user_table where id = %s" % uri_c         db = Mysqldb.connect("localhost", "testuser", "test123", "TESTDB", charset='utf8')         cursor = db.cursor()         cursor.execute(sql)         data = cursor.fetchone()         self.wfile.write(data) def start_server():     httpd = SocketServer.tcpServer(("127.0.0.1", 8090), MyHandler)     print('Starting httpd...')     httpd.serve_forever() if __name__ == "__main__":     start_server()

这是一个简单的HTTP服务器,目前在Python2中可以正常运行。通过urllib.splitquery获取GET请求的参数,uri_c  里面为请求参数的值。用值传递到SQL语句中拼接,从而产生注入问题。这是比较简单的一种,正常情况下调用链可能会比较长,长短取决于平台的设计架构

2. ORM注入

(1) sqlalchemy ORM注入(CNVD-2019-17301)

考虑到的理解上比较容易,用模块进行举例,并不涉及到框架。ORM注入是SQL注入的一种特殊情况,ORM模块将SQL语句进行模板化,所以找SQL语句字符串的办法不好用了。那么应该怎么办?根据模块来找寻执行方法,如果模块存在问题和未妥善过滤或转义、存在可控变量则可能会产生问题。如何去发现和查找Python  ORM模块,展现朋友们搜索技能的时候到了,不再老生常谈。下面进入案例:

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' and 11=1;             """     ).fetchall() )

这个是使用sqlalchemy的ORM注入,它存在任意执行SQL语句的接口。道理上讲这个是功能,实际情况大多数程序员都会认为ORM是能够防御SQL注入,这个可能会成为漏洞。通过转义可以更好的解决问题,但是官方可能并不重视。另外还有sqlalchemy几个问题利用order_by注入、利用”limit”和”offset”关键词向”select()”函数传递注入等等,方法一样利用模块过滤不严,暂不多论。

(2) Django JSON SQL注入(CVE-2019-14234)

咱们继续看来 Django jsON  SQL注入,关于这个漏洞已经有前人分析过了。这个分析有些难度需要咱们了解Django和postgresql,如果感觉吃力不妨先去学习一番。了解在PostgreSQL之中关于JSON数据的查询主要使用ArrayField、JSONField、HStoreField,通过Django如何进行查询PostgreSQL,Json.objects.filter()和QuerySet.filter()实现,准备工作就绪。

查询使用方法如下:

# 查询方法 # 查询data数据下名称为test的内容为'user'的整个字段 Json.objects.filter(data__test='user') or Json.objects.filter(**{"data__test":'user'})

通过补丁判断实现方法使用了 self.key_name ,QuerySet.filter()的调用和self.key_name传递有关。

Python代码审计中的SQL和ORM注入是怎样的

紧接着发现类 KeyTransformFactory 调用了 KeyTransform 传入了 self.key_name  ,后续是字符串拼接。这里不多详细阐述感兴趣的朋友跟下流程。

class KeyTextTransform(KeyTransform):     operator = '->>'     ...     # 字符串拼接     (%s %s %s)" % (lhs, self.operator, lookup)

结合注入的知识进行实施测试,结果如下。

# 使用注入 # 拼接补全SQL语法 Json.objects.filter(**{"""data__breed'='"a"') OR 11=1 OR('d""":'x',})

ORM注入为两个案例,分别是关于模块和框架。

上述内容就是Python代码审计中的SQL和ORM注入是怎样的,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注编程网Python频道。

--结束END--

本文标题: Python代码审计中的SQL和ORM注入是怎样的

本文链接: https://lsjlt.com/news/287421.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Python代码审计中的SQL和ORM注入是怎样的
    本篇文章为大家展示了Python代码审计中的SQL和ORM注入是怎样的,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Python代码审计方法多种多样,但是总而言之是根据前人思路的迁移融合扩展而形成。...
    99+
    2023-06-17
  • Python安全编码与代码审计是怎样的
    这篇文章给大家介绍Python安全编码与代码审计是怎样的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1 前言现在一般的web开发框架安全已经做的挺好的了,比如大家常用的django,但是一些不规范的开发方式还是会导致...
    99+
    2023-06-17
  • DM7审计中的语句序列审计是怎样的
    DM7审计中的语句序列审计是怎样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。审计机制是DM数据库管理系统安全管理的重要组成...
    99+
    2024-04-02
  • 防御SQL注入的方法是怎样的
    本篇文章给大家分享的是有关防御SQL注入的方法是怎样的,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。SQL 注入是一类危害极大的攻击形式。虽然...
    99+
    2024-04-02
  • 怎么分析Python代码审计中的反序列化和命令执行
    这篇文章给大家介绍怎么分析Python代码审计中的反序列化和命令执行,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一、介绍Python代码审计方法多种多样,但是总而言之是根据前人思路的迁移融合扩展而形成。目前Pytho...
    99+
    2023-06-17
  • SQL注入全过程的深入分析是怎样的
    这篇文章将为大家详细讲解有关SQL注入全过程的深入分析是怎样的,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。分析了SQL注入全过程,具体如下:初步注入--绕...
    99+
    2024-04-02
  • Python代码风格是怎样的
    小编给大家分享一下Python代码风格是怎样的,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Python主要用来做什么Python主要应用于:1、Web开发;2、...
    99+
    2023-06-14
  • Python中装饰器代码是怎么样的
    这篇文章主要为大家展示了“Python中装饰器代码是怎么样的”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Python中装饰器代码是怎么样的”这篇文章吧。一、理解装饰器所有东西都是对象(函数可以...
    99+
    2023-06-25
  • 怎么样把gitee中的代码导入
    Github,解决代码托管平台迁移问题随着互联网技术的不断发展,代码托管平台也在不断涌现和更新。在使用过程中,有时可能会需要将自己的代码从一个平台转移到另一个平台,比如把Gitee中的代码导入Github中。本文将介绍如何实现这个过程,帮助...
    99+
    2023-10-22
  • python注释和运算符是怎样的
    python注释和运算符是怎样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1.多文件项目演练在day02下创建两个python文件先点中一个文件,右键运行;右上角会出现文件...
    99+
    2023-06-22
  • 如何处理PHP开发中的代码审计和漏洞修复
    随着互联网的快速发展,PHP作为一种被广泛应用的编程语言,在网站和应用程序的开发中占据着重要地位。然而,由于其开源的特性,PHP代码也容易被黑客利用,造成安全漏洞。对于PHP开发者而言,代码审计和漏洞修复是必须要重视的问题。本文将详细介绍如...
    99+
    2023-10-21
    代码审计 PHP开发 漏洞修复
  • Python中提高代码效率技巧是怎么样的
    这篇文章将为大家详细讲解有关Python中提高代码效率技巧是怎么样的,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。对象相等。您认为type(a) == type(b)和type(a) is ...
    99+
    2023-06-17
  • Python的输入,输出和标识符是怎样的
    这篇文章给大家介绍Python的输入,输出和标识符是怎样的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一、标识符何为标识符?标识符是用来标识某个实体的一个符号。在编程语言中,标识符是计算机语言中作为名字的有效字符串集...
    99+
    2023-06-22
  • sql中in和exists的使用情况是怎样的
    本篇文章给大家分享的是有关sql中in和exists的使用情况是怎样的,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。in 和 exists的区...
    99+
    2024-04-02
  • 网页制作过程中代码注释书写规范是怎么样的
    小编给大家分享一下网页制作过程中代码注释书写规范是怎么样的,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!总结了一下自己工作中使用到的注释书写规范,没有什么技术含量...
    99+
    2023-06-08
  • Python asyncio 终极教程:为你的代码注入速度和效率
    简介 asyncio 是 Python 中一个异步 I/O 框架,旨在通过并发性提升应用程序的性能和可伸缩性。在 asyncio 中,I/O 操作不会阻塞主线程,而是由一个事件循环负责在后台调度。这使得应用程序可以处理大量并发请求,而无...
    99+
    2024-03-03
    Python asyncio 并发异步编程 I/O 操作 非阻塞
  • 剖析Python源代码编制过程是怎么样的
    剖析Python源代码编制过程是怎么样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Python语言中提供的re模块能支持正则表达式,还提供SGML,XML分析模块,大多数的...
    99+
    2023-06-17
  • SQL语句中的数据删除和更新是怎样的
    SQL语句中的数据删除和更新是怎样的,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1.删除1)删除记录 Delete from ...
    99+
    2024-04-02
  • Mysql SQL优化中执行计划连接方式是怎样的
    这期内容当中小编将会给大家带来有关Mysql SQL优化中执行计划连接方式是怎样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。关系库SQL...
    99+
    2024-04-02
  • sql server中的任务调度与CPU深入讲解是怎样的
    本篇文章为大家展示了sql server中的任务调度与CPU深入讲解是怎样的,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一. 概述我们知道在操作系统看来, sql...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作