pikachu-sql注入(6-10)

文章详细介绍了各种SQL注入技术,包括delete类型的无回显注入,通过报错获取信息;HTTP头注入,展示如何利用请求头信息进行SQL注入;基于布尔和时间的盲注技巧,以及如何利用SQLmap工具;最后讲解了宽字节注入,绕过防御机制的方法。每种注入都提供了payload示例和利用策略。

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

delete注入

delete的sql语句的形式大致是:delete from 表名 where 列名=值

其实这个跟上一个类型差不多,没有回显,但是有报错的显示,于是我们就可以使用报错型注入,通过报错中的回显来得到信息。

首先我们能看到这就是一个留言页面,可以将留言信息进行删除,那么我们点击删除,可以看到bp中的抓包:

 这个猜测就是根据id这一列来删除留言信息的。那么我们可以使用payload

 ?id=1 and updatexml(1,concat('.',(select database()),'.'),1) 

 我在用bp请求的时候会显示400错误,但是将payload直接放在请求的url里就正常了,用hackbar也能正常返回。

 后面就可以上之前几个类型一样爆数据了。

http头注入

 可以看到返回的页面中有展示了我们的http请求头中的信息,那么服务器肯定是收集了我们的http请求头的信息,于是我们尝试改一下user agent:

 发现返回信息报错了,那么也就表示其存在sql注入;于是我们尝试进行闭合;在用')尝试闭合的过程中发现它的报错有:

 那么他应该是个insert型的sql,我们就可以按照之前insert型的套路来注入就可以了:

基于boolian的盲注

这一关是基于布尔的盲注。也就是说在回显时,他只会有true和false两种情况的回显。当只有两种回显,同时没有任何报错的回显时,我们就可以使用盲注。

手动注的话就是先知道为真的情况,然后后面“与”一个我们猜的数据,然后看返回的是真还是假。

比如我们已经知道了存在一个“lili”的账号,那么我们就可以猜测数据库名。首先来猜数据库名的长度,payload:

?name=lili' and length(database())>=7%23 # 回显正常

逐字符猜数据库的值:

lili' and ascii(substr(database(),1,1))>113#

后面猜表的个数,表名长度,表名的值也都是这样。所以最好遇到盲注这种情况就直接上sqlmap(但是这个他用的是时间盲注):

基于时间的盲注

当没有报错回显,不管对错返回结果只有一种时,我们就可以用这个类型的注入方式。我们在查询的同时可以设置睡眠时间,当查询成功即会睡眠一定时间再将结果显示出来,若查询失败则会按正常时间来回显,我们就可以根据这个时间差来看我们的注入是否成功。

这个题目无论输入什么都会显示一句话,那么我们可以设置先设置payload找闭合(当然这个额可能也和上一个一样得提前知道一个数据库里有的name):

lili' and sleep(3)#    //延迟3秒加载

把这个输入进去,点击查询发现成功发生延迟,所以那么我们就能够确定他的闭合方式,之后基本上的猜测顺序和上一个基于布尔的盲注是一样的,猜数据库名的长度,逐字符猜它的值;猜表的个数,表名的长度······因为这个也很浪费时间,所以一般都会使用sqlmap来跑:

wide byte注入

在这里宽字节注入的原理我就不细说了,主要是因为在php中开启了防御函数magic_quotes_gpc,使在返回的数据中的特殊字符被添加了‘\’防止转义,预防构造出的恶意解析;那么在使用gbk编码时,我们就可以利用它双字节编码的特性,在php中自动添加的‘\’(编码为%5c)前面再加一个字节,让他们两个字节组成在gbk中能正常编码的一个双字节汉字"運"(编码为%df%5c),这样就能成功绕过‘\’了。(那么肯定有两个条件,一是数据库用了gbk编码或者其他非英文编码,二是php中开启了magic_quotes_gpc防御函数)。

详细的可以看下面这篇文:

宽字节注入(Sql)

那么我们按照这种方式的话,就可以使用payload:

1%df' or 1=1#

其中%df'在gbk编码中会变成“運”,于是就变成了:1運' or 1=1#,这样就凑成了单引号的闭合,后面也变成了永真式,所以就可以回显出整个表的信息。。

后续我们在尝试闭合成功后,后面也可以使用union联合查询来进行爆库爆表。

那么这个如果使用sqlmap的话,要使用脚本tamper:

python sqlmap.py -u "http://localhost:8088/pikachu/vul/sqli/sqli widebyte.php” --data="name=l&submit-%6%9F%A5%E8%AF%A2" -p name --batch --tamper unmagicquotes

 跑完之后可以看到数据库类型以及php和apche的版本。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值