带你了解SQL注入(详细)

本篇文章给大家带来了sql注入的相关知识,SQL注入是服务端未严格校验客户端发送的数据,而导致服务端SQL语句被恶意修改并成功执行的行为,希望对大家有帮助。

(图1)

SQL是什么?

结构化查询语⾔(Structured Query Language ,SQL),是⼀种特殊的编程语⾔,⽤于数据库的标准数据查询。1986 年10 ⽉美国国家标准协会对SQL 进⾏了规范后,以此作为关系型数据库系统的标准语⾔。1987 年得到了国际标准组织的⽀持,成为了国际标准。

什么是SQL注入

SQL注入是服务端未严格校验客户端发送的数据,而导致服务端SQL语句被恶意修改并成功执行的行为
(图2)

漏洞原理

SQL 注⼊的攻击⾏为可以描述为通过⽤户可控参数中注⼊SQL 语法,破坏原有SQL 结构,达到编写程序时意料之外结果的攻击⾏为。其成因可以归结为以下两个原因叠加造成的。

  • 程序员在处理程序和数据库交互时,使⽤字符串拼接的⽅式构造SQL 语句
  • 未对⽤户可控参数进⾏⾜够的过滤,便将参数内容拼接到SQL 语句中

漏洞原因

  • 用户能够控制输入
  • 是对于输入检查不充分,导致SQL语句将用户提交的非法数据当作语句的一部分来执行

为什么会有SQL注入

  • 代码对带入SQL语句的参数过滤不严格
  • 未启用框架的安全配置,例如:PHP的magic_quotes_gpc
  • 未使用框架安全的查询方法
  • 测试接口没有删除
  • 未启用防火墙
  • 未使用其他的安全防护设备

注⼊点可能存在的位置

根据SQL 注⼊漏洞的原理,⽤户"可控参数"中注⼊SQL 与发,也就是说Web 应⽤获取⽤户输⼊的地⽅,只要带⼊数据库查询,都有存在SQL 注⼊的可能,这些地⽅通常包括:

  • GET 数据
  • POST 数据
  • Cookie 数据
  • HTTP 头部(HTTP 头部中的其他字段)

漏洞危害

  1. 数据库信息泄漏、获取、修改敏感数据:数据库中存放的用户的隐私信息(帐号、密码)的泄露
  2. 绕过登录验证:使用万能密码登录网站后台等
  3. 文件系统操作:列目录,读取、写入文件等
  4. 网页篡改:通过操作数据库对特定网页进行篡改,嵌入网马链接,进行挂马攻击
  5. 注册表操作:读取、写入、删除注册表等
  6. 执行系统命令:远程执行命令
  7. 服务器被远程控制、种植木马:黑客可以修改或控制操作系统

提交方法

提交方法有:get、post、cookie、request等
其中:request支持度较好,你把参数以get方式、post方式、cookie方式提交都是可以的

判断注入点

会在疑似注⼊点的地⽅或者参数后⾯尝试提交数据,从而进⾏判断是否存在SQL 注⼊漏洞。

测试数据测试判断攻击思路
-1或+1是否能够回显上⼀个或者下⼀个页面(判断是否有回显)联合注入
'"是否显示数据库错误信息;回显的页面是否不同(字符型还是数字型)报错注入
and 1=1 或者 and 1=2回显的页面是否不同(判断页面是否有布尔类型的状态)布尔盲注
and sleep(5)判断页面的返回时间延时注入
判断转义



注意:如果你对着一个网站测试的时候,出现404,或者页面跳转,说明网站有防护

判断字符型还是数字型

如下图,一般来说,id之类的参数后面跟的是数字型(也有可能是字符型),别的参数后面跟的是字符型
(图3)

sql注入绕过

  1. 大小写绕过
  2. 双写关键字绕过
  3. 特殊编码绕过

如果有些字符串确实被限制的很严格,我们可以尝试一些编码绕过。
如URLEncode编码,ASCII、HEX、unicode编码绕过:

  • or 1=1即%6f%72%20%31%3d%31,
  • Test也可以为CHAR(101)+CHAR(97)+CHAR(115)+CHAR(116)
  1. 空格过滤绕过
  2. 过滤函数绕过
  • sleep() ——> benchmark()
  • substr()、substring()、mid()可以相互替换
  • user() ——> @@user() 、datadir ——> @@datadir
  • ord() ——> ascii() :这两个函数在处理英文时效果一样,但处理中文时效果不一样
  • ascii ——> hex()、bin():替代之后再使用对应的进制转string即可
  • group_concat() ——> concat_ws()
  1. 内联注释绕过/*!...*/

在MySQL里,/**/是多行注释,这个是SQL的标准,但是MySQL扩张了解释的功能,如果在开头的的/*后头加了感叹号/*!50001sleep(3)*/,那么此注释里的语句将被执行。

/*!50001 select * from test */;这里的50001表示假如 数据库是5.00.01以上版本,该语句才会被执行,对于有些waf我们可以通过这种方式进行绕过。

获取网站路径

路径常见获取方法:

  1. 报错显示

(图4)

  1. 遗留文件

别用百度,用谷歌搜索inurl:phpinfo.php
(图5)

漏洞报错、平台配置文件、爆破等

SQL 注入读写文件

可以利用SQL 注入漏洞进行文件读写。
利用的前提条件:

1. 数据库支持文件读写

这里涉及到1个变量secure_file_priv,该参数在高版本的 mysql 数据库中限制了文件的导入导出操作。若要配置此参数,需要修改 my.ini 配置文件,并重启 mysql 服务【其在Phpstudy中默认是NULL,不允许读写文件】
(图6)

参数含义
secure_file_priv=NULL限制mysqld 不允许导入导出操作
secure_file_priv=‘c:/a/’会限制mysqld 的导入导出操作在某个固定目录下,并且子目录有效
secure_file_priv=不对mysqld 的导入导出操作做限制

修改配置文件,对读写不做限制,文件路径C:phpStudyMySQLmy.ini,该操作比较敏感,需要在mysql的配置文件中操作,在phpmyadmin网页中不能修改
(图7)

(图8)

2. 当前用户具有文件权限

  1. 获知当前用户和主机名
?id=-1'union select 1,current_user(),3 --+
1、本站目前拥有近 1000+ 精品收费资源,现在加入VIP会员即可全部下载。
2、本资源部分来源其他付费资源平台或互联网收集,如有侵权请联系及时处理。
SEA模板网 » 带你了解SQL注入(详细)

发表评论

加入本站VIP会员订阅计划,海量资源免费查看

目前为止共有 3654 位优秀的VIP会员加入! 立刻加入VIP会员