玖叶教程网

前端编程开发入门

1.什么是SQL注入

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()

单击运行按钮,将打印当前表中的内容。在上面的程序中,我们建立了一个test.db数据库和一个Student数据表,并将四个学生信息写入该表。

然后SQL注入怎么了?让我们尝试插入另一段恶意数据。数据的内容是漫画中的“罗伯特”); DROP TABLE学生;-”,看看会发生什么。

SQL数据库注入示例:

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语句可以插入名称信息:

将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

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言