如果無權讀取information schema庫 / 拒絕union、order by語句,只能通過猜測的方式:
猜列名
' and asd is null--+ (+代表空格)
- 當我們執行之后,通過報錯可看出來沒有這個asd
- 通過更換asd,去猜測,如果沒有報錯,說明數據庫存在這個列名
- 但是一般情況下,都是通過跑字典的方式,kali里面自帶字典文件
- 之后我們就可以通過bp進行跑字典的操作,首先執行隨便的參數,然后代理截斷下來
- 之后將截斷地發送到repeater測試服務器是否可以正常響應
- 服務器能夠正常響應之后的話,發送到intruder去
- 之后選中你想要插入地點,選擇它,然后點擊add
- 接著點擊Payloads,傳入我們的字典文件
- 之后點擊start attack
- 之后我們就可以分析出哪些是正常存在的列了
猜表名
- 列表猜出來了,就可以開始猜測表名字,剛剛我們看到確實存在user這個列名
'and table.user is null--+ (+代表空格)
- 如果表名不存在會報錯
- 之后的才做和猜列名一樣了,不做詳細概述,自己試試吧,表名的字典路徑如下
猜庫里面的其他表
'and(select count(*) from b)>0--+(+代表空格)
上面的直接爆出庫名了;
- 接著從bp里面去跑字典就行了,庫名不變,猜測表明,不做詳細步驟描述了
猜測字段內容
'or user='admin
'or user like '%a%
##包含a的user
當數據庫可寫
';update users set user='yuanfh' where user='admin
- 將用戶名修改,直接注入會報錯,原因是Sql客戶端工具的問題,直接用工具演示
同理也可以修改密碼、添加用戶、刪除表等等,熟悉SQL語句的人去嘗試下吧;
SQLi沒有通用的方法,掌握原理,了解各種數據庫特性;