所谓盲注就是在正常页面没有输入点,或者无法影响页面输出的内容~ 然后我们无法借助页面来返回数据库中我们想要注出的数据,这时候就要构造sql语句让它报错,或者进行一系列的判断。 这一篇讲的基于布尔的盲注。
科普文,给学弟妹的...大牛绕过绕过...
一、字符串返回字符函数
不得不提的是ord函数和ascii函数的用法一样,假如str为空字符串,则返回值为 0 。假如str 为NULL,则返回值为 NULL。 ASCII()用于带有从 0到255的数值的字符。
二、字符串截取三剑客
1、substr()函数
Substr和substring是一样的
用法:
substr(string, start, length);
string为字符串;
start为起始位置;
length为长度。mysql中的start是从1开始的
查看我当前的数据库是security
截取第一个字符串
第二个
2、mid()函数
mid()函数
此函数为截取字符串一部分。MID(column_name,start[,length])
参数 | 描述 |
---|---|
column_name | 必需。要提取字符的字段。 |
start | 必需。规定开始位置(起始值是 1)。 |
length | 可选。要返回的字符数。如果省略,则 MID() 函数返回剩余文本。 |
其实和substr大同小异…..
3、left()和right()函数
用法:
Left()得到字符串左部指定个数的字符
Left ( string, n) string为要截取的字符串,n为长度。
同理可知,right也是这样子的。有时候碰到奇葩的环境可能left用不了,right就可以用了。
同样一件事….我们习惯性的都用left,左撇子们可能用right,比如我。
那么介绍完一大堆有的没得是时候该介绍重头戏了。
所谓的盲注就是没有输出点。就是你和数据库产生了交互,但是在页面上去没有显示数据库的内容。具体可以参考sqli labs 基础练习5~
上面的代码虽然将id带入了数据库查询,但是没有echo在页面上。于是我们就要用到我们前面介绍的几个函数来注入了。
具体如下:
对比以下的ascii码表,我们发现注入出来的数据库名是无误的。
但是如果是传参的语句呢?
那么我们就没有办法像mysql客户端一样的回显了…不然怎么叫盲注。
输入:http://localhost/sqli-labs/Less-5/?id=1
可以看到这个是正常页面。
加上' 报错
加上' and 1--+
又返回正常了。这下我们可以用到我们上几篇学过的了。
http://localhost/sqli-labs/Less-5/?id=1' andascii(substr((select database()),1,1))=115--+
返回正常,说明数据库的第一位是ascii码115,对应—>s。
以此类推,但是一个个手注太过sb。我们可以用python实现自动化脚本来获取数据。
Sql注入工具就是这个原理的,哈哈。自己写的程序比不过sqlmap速度快,但是可控性强。有需要留言吧。代码贴上来太丑了,另一方面自己动手写也是一种提高。代码提示:用二分法。