欢迎大家来到IT世界,在知识的湖畔探索吧!
在OWASP在发布的Top10排名中SQL注入漏洞它一直是一个高度脆弱的漏洞,数据库注入一直是网络上的头疼问题。
OWASP,开放式Web应用程序安全性项目,开放式Web应用程序安全性项目:
该组织提供有关计算机和Internet应用程序的公平,实用和具有成本效益的信息。其目的是帮助个人,企业和机构发现和使用受信任的软件。
严重的SQL注入漏洞可能直接导致公司破产!
这不是一个玩笑。实际上,形成SQL注入漏洞的主要原因是在数据交互期间,当前端的数据传递到后端进行处理时,由于没有严格的判断,传入的“数据”被拼接在SQL语句之后,由于其特殊性,它作为SQL语句的一部分执行,从而导致数据库损坏(从库中移出,删除,甚至整个服务器都具有权限)。
1.什么是SQL注入
SQL注入是一个很常见的数据库攻击方法SQL注入漏洞也是在线世界中最常见的漏洞之一。每个人都可能听说过,有些高年级学生会通过攻击学校数据库来修改成绩。这些老年人通常使用SQL注入方法。
SQL注入实际上,恶意用户以表格的形式填写了包含SQL关键字的数据,以使数据库执行非常规代码。简而言之,它意味着数据“月历生成”完成了代码可以完成的工作。
这个问题的根源在于,SQL数据库的操作是由SQL语句执行的,并且必须在SQL语句中写入它是执行代码还是数据项,这导致我们是否向数据项中添加某些SQL语句。 (例如SELECT,DROP等),这些关键字很可能在数据库写入或读取数据时执行。
二,生成SQL注入需要满足以下两个条件
1.用户可控制的参数:从前端传递到后端的参数可由用户控制。
2.将参数带入数据库查询:将传入的参数拼接成SQL语句并带入数据库进行查询。
正是这种拼接过程导致了代码的注入
言语毫无用处,让我们谈谈实际案例。下面我们首先使用SQLite创建一个学生文件表。
SQL数据库操作的示例:
导入sqlite3以连接到数据库:conn = sqlite3.connect('test.db')创建一个新的数据表:conn.executescript('
CREATE TABLE students
(id INTEGER PRIMARY KEY AUTOINCREMENT,
名称TEXT NOT NULL);''')插入学生信息:学生= ['Paul','Tom','Tracy','Lily']
for name in students:
query = "INSERT INTO students (name) VALUES ('%s')" % (name)
conn.executescript(查询);查看现有的学生信息:cursor = conn.execute(“ SELECT ID,来自学生的姓名”)
print('IDName')
for row in cursor:
print('{0}{1}'.format(row[0], row[1]))
conn.close()
欢迎大家来到IT世界,在知识的湖畔探索吧!
单击运行按钮,将打印当前表中的内容。在上面的程序中,我们建立了一个test.db数据库和一个Student数据表,并将四个学生信息写入该表。
然后SQL注入怎么了?让我们尝试插入另一段恶意数据。数据的内容是漫画中的“罗伯特”); DROP TABLE学生;-”,看看会发生什么。
SQL数据库注入示例:
欢迎大家来到IT世界,在知识的湖畔探索吧!conn = sqlite3.connect('test.db')
插入包含注入代码的信息:name =“ Robert'); DROP TABLE students;-”
query = "INSERT INTO students (name) VALUES ('%s')" % (name)
conn.executescript(query)查看现有的学生信息:cursor = conn.execute(“ SELECT id,来自学生的名字”)
print('IDName')
for row in cursor:
print('{0}{1}'.format(row[0], row[1]))
conn.close()
您会发现运行后,该程序不会输出任何数据内容,但会返回错误消息:找不到学生表格!
为什么是这样?问题是我们插入的数据项包含SQL关键字DROP TABLE。这两个关键字的含义是从数据库中清除表单。
关键字之前的Robert’)使SQL执行程序认为最后一条命令已经结束,因此执行了危险的命令DROP TABLE。
换句话说,此包含DROP TABLE关键字的数据项使原始的简单SQL语句可以插入名称信息:
欢迎大家来到IT世界,在知识的湖畔探索吧!将INSERT INTO学生(姓名)VALUES(“罗伯特”)变成一个语句,其中还包含另一个明文命令:INSERT INTO学生(姓名)VALUES(“罗伯特”); DROP TABLE学生;
SQL数据库执行上述操作后,将清除学生表单,因此找不到该表单,并且所有数据项都将丢失。当然,现在很多网站都有这里不介绍防止SQL注入的操作。
关于如何防止和防止SQL注入,Anzai将在以后进行安排。如果您有急事,可以在百度上搜索以找到答案。
SQL注入直言不讳,也就是说,通过将SQL命令插入WEB表单提交中或输入域名或页面请求的查询字符串,服务器最终被诱骗执行恶意SQL命令。
三,SQL注入类型:
1.按注入点分类:
(1)数字注入:许多网页链接具有类似的结构http://xxx.com/users.php?id=1根据这种注入形式,注入点id是一个数字,通常称为数字注入点,并通过后台查询背景此表单将数据库信息返回到前台进行显示,并且可以构建类似于以下内容的SQL语句进行爆炸:从表名称中选择***,其中id = 1和1 = 1。
(2)字符注入:Web链接具有类似的结构
http://xxx.com/users.php?name=admin这种形式的注入点名称是一个字符串,称为字符注入。您可以使用:从表名中选择***,其中name =’admin’和1 = 1。
(3)搜索注入:主要是指在数据搜索过程中没有过滤器搜索参数。通常,链接地址中包含“ keyword =“ keyword””。 SQL语句在注入点提交,从表名中选择*,其中“%keyword%”和“%1%” =“%1%”之类的字段。
2.按执行效果分类:
(1)基于布尔的盲:根据页面返回判断条件是否正确注入。
(2)基于时间的失明:也就是说,您无法根据页面返回的内容来判断任何信息。使用条件语句来检查是否执行了时间延迟语句(即,页面返回时间是否增加)。
(3)基于错误报告的注入:也就是说,页面将返回错误消息,或直接将注入语句的结果返回给页面。
-
撇号
-
双引号
-
数字注入
(4)联合查询注入:可以使用联合注入。
4. SQL注入的常见绕过方法
(1)忽略大小写关键字(UNiOn)
(2)双重关键字绕过(工会)
(3)编码旁路(base64,url)
(4)内联注释绕过(/ *!Union * /)
SQL注入工具推荐
掌握了SQL注入的原理和方法后,可以尝试使用工具注入,手动注入的成本较高。推荐工具SQLmap
工具下载地址:https://github.com/sqlmapproject/sqlmap
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/17972.html