Less-1
(1)判断注入点类型:在url后写入1asd,如果结果报错则为数字型,没有报错则为字符型,结果如下,因此Less1为字符型
(2)判断闭合方式:在后方加入单引号或双引号,即1asd'或1asd";如果单引号页面正常则尝试双引号,如果双引号页面也正常,可能就不存在SQL注入
输入单引号后的页面显示为:
''1asd'' LIMIT 0,1' 其中,红色部分为输入的内容,蓝色部分为一对引号,因此在输入的内容右边只剩下一个单引号,闭合方式就为单引号
在url中加入注释,即1asd' --+后,原先的''1asd'' LIMIT 0,1'就被视为'1asd' --+ ' LIMIT 0,1;注释的内容都不执行,因此只会执行'1asd';页面显示正常
在输入order by 排序后,可以得知该表中只有3列数据(order by n,n大于3页面都会报错)
如图所示,联合查询中的1,2,3都没有回显;在数据库中输入查询语句select * from users where id = '1' union select 1,2,3;得到结果
想让网页上显示期望的数据,只需将联合查询中左边的查询语句返回结果设置为空,即匹配一个不存在的值,即把其中的1改为-1,这样的操作就使得返回结果仅有联合查询的结果,就是期望显示的数据。
然后就可以使用数据库的函数查找所需的信息,比如当前数据库,所有的数据库,所有的表等待
Less-2
同Less-1,在参数id后添加单引号,查看报错的原因是不需要添加这个单引号,删除单引号后页面正常,同理输入1asd后页面报错,因此Less-2是数字型注入
Less-2同Less-1,区别在于一个是数字型注入,一个是字符型注入。其他操作也同Less-1
?id=1 order by 3 --+ 查看有多少列
?id=-1 union select 1,2,3 --+ 查看有多少数据可以回显
?id=-1 union select 1,2,group_concat(schema_name) from information_schema.schemata --+ 查看所有数据库
?id=-1 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema --+查看所有的表
#查看所有数据库
select schema_name from information_schema.schemata;
#查找security数据库下的所有表
select table_name from information_schema.tables where table_schema='security';
#查找数据表的列名
select column_name from information_schema.columns where table_name='users';
#查找该表的所有字段
select id,username,password from security.users;
Less-3
同Less-1,url后写入id=1’,可以得知闭合方式为'),且为字符型注入
因此,其他操作同Less-1
Less-4
同前面步骤,发现单引号页面正常,就改为双引号,页面错误;且为字符型注入;根据报错的提示来看,闭合方式就为"),即
Less-5
同理可得,闭合方式为单引号
页面只会显示You are in……,无法输出具体信息,所有这里不能使用联合查询
(1)left方法
left的意思是提取字符串左侧的字符,比如left('security',3)从security的左侧提取3位,结果为'sec'
可以用这种方式查找到数据库名称,后续使用脚本,burp suite软件等完成
(2)ascii方法
substr(1,2,3)的意思是从1中的第2个位置提取出3个字符,如图所示,从数据库名称的第1位提取出1个字符,默认使用的数据库是'security',因此提取出's','s'的ascii码是115,所以可以比对提取出的值与ascii码,从而得到数据库的名称。
Less-6
同Less-5,闭合方式为双引号。即?id=1" --+
判断数据库名称的长度
Less-7
同理可得,闭合方式为'))
使用蚁剑添加数据后即可
Less-8
发现有延迟,所以可以使用时间盲注
Less-9
返回值均为you are in……,只能使用时间盲注
Less-10
同Less-9,时间盲注