SQL注入学习笔记

1.什么是SQL注入

SQL注入攻击是目前web应用网络攻击的最常见手段之一,其攻击方法为,用户在可能需要访问数据库的网页api上,输入恶意sql代码,植入数据库。sql注入攻击范围广、容易实现、破坏性大。

<?p select * from users where username = ‘${username}’ and password = ‘${password}’ ?>

以上php代码是常见的用户登录所使用的数据库查询代码,假设username和password是用户输入框,不难发现可以构造以下payload:

username= x' or 1 = 1#
select * from users where username = ‘root’ and password = ‘12345’                      //正常代码
select * from users where username = ‘x' or 1 = 1#’ and password = ‘${password}’        //恶意代码

可以看出,构造的payload能够闭合单引号,且注释了后面的SQL代码。

2.SQL注入的危害

目前,大多数Web编程语言提供了操作SQL的接口,以方便与数据库进行交互。但是在开发Web应用的过程中,由于忽视了代码的健壮性和安全性,攻击者可以构造巧妙的SQL语句从而获取到敏感数据,因此导致了SQL这种攻击方式的流行。

SQL注入可以盗取数据库信息,获取用户敏感信息,更改用户数据。通过一些提权操作,安装后门,对用户进行远程操控。

3.常见SQL注入手段

1.联合查询

前提要求:数据会进行回显,页面有显位符,在一个在一个网站的正常页面,服务端执行SQL语句查询数据库中的数据,客户端将数据展示在页面中,这个展示数据的位置就叫显示位。

select * from user order by ?

上述代码用来判断回显位,假设存在3个回显位。

select * from user union select 1,2,3

则1,2,3会显示在对应位置。

2.报错注入

SQL报错注入就是利用数据库的某些机制,人为地制造错误条件,使得查询结果能够出现在错误信息中。这种手段在联合查询受限且能返回错误信息的情况下比较好用,目前对于各种不同类型数据库,不同版本数据库报错注入时可能并不能通用,常用可以通用的报错注入的方式有两种,xpath注入和主键重复导致的报错。

利用xpath语法错误来进行报错注入主要利用extractvalueupdatexml两个函数。

extractvalue函数

  • 函数用法:extractvalue(xml_document,Xpath_string)

  • 第一个参数:xml_document是string格式,为xml文档对象的名称

  • 第二个参数:Xpath_string是xpath格式的字符串

  • 作用:从目标xml中返回包含所查询值的字符串

pyload:id='and(select extractvalue("anything",concat('~',(select语句))))

updatexml函数

  • 函数用法:updatexml(xml_document,xpath_string,new_value)

  • 第一个参数:xml_document是string格式,为xml文档对象的名称

  • 第二个参数:Xpath_string是xpath格式的字符串

  • 第三个参数:new_value是string格式,替换查找到的负荷条件的数据

  • 作用:改变文档中符合条件的节点的值

payload:id='and(select updatexml("anything",concat('~',(select语句())),"anything"))

3.布尔盲注

当网页没有回显信息时,也不存在报错信息时,可以利用length和substr函数进行盲注。

' and (length(databse())=a) --+

可以根据返回包的网页大小判断数据库名的字符长度是否为a。

' and (substr(select databse(),a,1))=b --+

可以根据返回包的网页大小依次判断数据库名a位置的字符是否等于b。

4.时间盲注

当网页没有回显信息时,也不存在报错信息时,且返回网页字节数也相同,可以采用sleep函数。

' and if(length(select database() > 1 ,1 ,sleep(5)) --+

如果回显时间小于1,则数据库名长度大于1,长度猜测完,再依次猜测对应字符。

5.宽字节注入

当编码格式为GBK时,中文字符占两字节,正常输入单引号会被转移,此时可以拼接一个特殊中文字符的GBK编码,使该中文字符的前半段和前一个编码拼接,后半段为单引号的编码被截断,转义为单引号,造成注入。

6.堆叠注入

堆叠注入需要数据库后台允许多条SQL语句同时执行,多语句之间以;隔开。利用这个特点可以在后面的语句中构造自己要执行的语句。

4.SQL注入常见防御

  • 使用转义函数等安全函数

  • 预编译语句,绑定变量,攻击者无法改变SQL的结构

  • 检查数据类型

  • 提升代码安全逻辑

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值