目錄
1、數字型注入(post)
2、字符型注入(get)
3、搜索型注入
4、XX型注入
5、"insert/update"注入
Insert:
update:
6、"delete"注入
7、"http header"注入
8、盲注(base on boolian)
9、盲注(base ontime)
10、寬字節注入
最近在學習SQL注入,這里使用pikachu靶場中的SQL注入來復習+練習一下SQL注入的方法
進入SQL模塊中可以看到有好幾種注入的類型,我們先點擊到概述:
可以看到是這樣介紹SQL注入的:
哦,SQL注入漏洞,可怕的漏洞。
?????在owasp發布的top10排行榜里,注入漏洞一直是危害排名第一的漏洞,其中注入漏洞里面首當其沖的就是數據庫注入漏洞。
一個嚴重的SQL注入漏洞,可能會直接導致一家公司破產!
SQL注入漏洞主要形成的原因是在數據交互中,前端的數據傳入到后臺處理時,沒有做嚴格的判斷,導致其傳入的“數據”拼接到SQL語句中后,被當作SQL語句的一部分執行。 從而導致數據庫受損(被脫褲、被刪除、甚至整個服務器權限淪陷)。
在構建代碼時,一般會從如下幾個方面的策略來防止SQL注入漏洞:
1.對傳進SQL語句里面的變量進行過濾,不允許危險字符傳入;
2.使用參數化(Parameterized Query 或 Parameterized Statement);
3.還有就是,目前有很多ORM框架會自動使用參數化解決注入問題,但其也提供了"拼接"的方式,所以使用時需要慎重!
1、數字型注入(post)
點擊來到第一個模塊這里,可以看到是一個下列選項,選擇不同的id會返回不同的用戶的信息:
但是url中沒有顯示,是POST型的傳參,因此這里我就使用Burpsuite抓包查看,可以看到傳入的id=1返回頁面如下
下面嘗試使用? and 1=1 和 and 1=2測試:
可以看到兩個頁面顯示的不同,說明存在注入點,那么下面就可以嘗試使用聯合查詢,查詢數據庫中的列數和數據庫名稱:
通過多次嘗試就會發現數據庫是兩列的,那么下面查詢數據庫名稱和用戶名稱:
可以看到成功的查詢出了數據名稱和用戶名稱,后面就可以通過information_schema數據庫查詢出數據庫中的表名,列明,數據
2、字符型注入(get)
來到第二關,可以看到是一個輸入框,判斷應該是字符型注入
嘗試輸入輸入查詢一下看看結果,結果如下:
嘗試閉合:
可以看到閉合后報錯了說明是存在注入點的
下面就是判斷列數了:
通過反復嘗試也可以判斷出列數是2列的
下面就可以嘗試對數據庫名稱和用戶名進行注入了:
可以看到成功的查詢出了數據名稱和用戶名稱,后面就可以通過information_schema數據庫查詢出數據庫中的表名,列明,數據
3、搜索型注入
來到搜索注入頁面可以看到也是有一個輸入框讓我們搜索,然后查看提示發現%%,這說明在閉合時需要用到%
嘗試搜索:
嘗試閉合:
可以看到報錯了,并且從報錯信息中可以看到,閉合字符時%,那么下面還是先嘗試判斷數據庫中的列數:
通過多次嘗試就會發現數據庫的列數是3列
那么下面就可以嘗試注入出數據庫名稱和用戶名稱了:
可以看到成功的查詢出了數據名稱和用戶名稱,后面就可以通過information_schema數據庫查詢出數據庫中的表名,列明,數據
4、XX型注入
下面來到了XX型注入這一關,可以看到也是一個輸入框
嘗試查詢:
嘗試閉合:
輸入'可以看到報錯了,這里報錯的信息中可以看到閉合是')
嘗試查詢列數:
通過不斷地嘗試就可以發現數據庫的列數為2列
查詢數據庫名稱和用戶名稱:
可以看到成功的查詢出了數據庫的名稱和用戶名稱
5、"insert/update"注入
來到這一關,可以看到如下頁面,是一個登錄框
首先來復習一年mysql中的insert和update的語法:
- INSERT語法:
INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...);
其中,table_name是要插入記錄的表名,column1、column2等是表中的列名,value1、value2等是要插入的值。
- UPDATE語法:
UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE condition;
其中,table_name是要更新記錄的表名,column1、column2等是要更新的列名和對應的值,condition是更新記錄的條件。
Insert:
既然是insert注入,插入數據,那么一般就在網數據庫新增數據時會使用到,因此我們點擊注入頁面
對該頁面進行抓包嘗試尋找漏洞點:
通過測試發現在username/password/sex/phonenum/email/add/中任意一個變量后面加'都會導致數據庫報錯
那么下面就可以嘗試對數據進行查詢了,但是從上面的操作可以看出來,注冊頁面是沒有sql結果回顯的,而且畢竟也不是select語句,也不能采取聯合查詢注入了。
不過從上一步的操作可以看出來,注冊的時候如果sql語句有問題是會報錯的,因此報錯注入行得通。
這里可以在再回憶一下報錯注入:SQL注入:報錯注入-CSDN博客
下面就可以利用報錯注入,注入出數據庫名稱和用戶:
可以看到成功的注入出了數據庫名稱和用戶名
update:
既然是update,一般在修改信息處,因此這里需要先登錄到系統中才能修改信息,我們先登錄到系統中:
這里登錄那就使用上面剛剛注冊頁面先注冊一個admin用戶唄,登錄完成后的頁面如下:
點擊修改個人信息也就是在數據庫中使用update修改了,我們對修改信息頁面抓包:
可以看到修改信息頁面如上,我們嘗試對可控字段進行閉合:
通過測試可以發現,定義sex,phponenum、add、email四個字段后面添加'都會導致數據庫報錯,都存在SQL注入的風險,因此我們嘗試注入,這里因為還是數據還是沒有回顯,因此使用報錯注入:
可以看到,成功的注入出了數據庫名稱和用戶名
6、"delete"注入
來到這一關可以看到如下頁面,是一個留言板
還是首先來看看Mysql中delete的語法:
DELETE FROM table_name WHERE condition;
其中,table_name是要刪除記錄的表名,condition是刪除記錄的條件。
知道了delete的語法后,我們來看看這一關有什么可疑的地方:
在點擊刪除時抓包查看:
可以看到這里有id,嘗試閉合:
可以看到報錯了,說明可能存在注入,但是嘗試查詢發現無回顯,這里嘗試使用報錯注入注入出數據庫名稱和用戶名稱:
通過多次嘗試就可以看到成功的注入出了數據庫名稱和用戶名稱
7、"http header"注入
來到這一關,可以看到如下頁面時一個登錄框:
這里再介紹一下http header:HTTP頭是HTTP請求或響應的一部分,包含有關請求或響應的元數據,例如發送的內容類型、內容長度、使用的編碼以及其他相關信息。HTTP頭由Web服務器和瀏覽器使用,用于在通過互聯網發送和接收數據的過程中進行通信和交換信息。
知道了http header是啥了后,現在來找找這一關有什么可疑的地方:
(點擊提示,可以看到登錄賬號密碼為admin 123456)
登錄后的頁面:
可以看到頁面顯示出了ip user agent http accept 和端口號,既然可以顯示在頁面那么我們就可以嘗試對其進行注入看是否可以從將數據回顯到這些字段中
user agent:
accept:
可以看到對這兩個字段進行閉合都成功報錯了,都可以注入,嘗試注入數據庫:
可以看到兩個字段都成功的注入出了數據庫?
8、盲注(base on boolian)
來到這一關,可以看到是一個查詢框
這一關怎么閉合,數據庫都無法報錯,因此之前的聯合查詢,報錯注入都無法使用了,這里需要使用SQL盲注
可以看到輸入用戶名存在是返回用戶的信息,不存在時返回“您輸入的username不存在,請重新輸入”,可以利用這一點來進行布爾盲注
可以判斷數據庫長度延時一下:
通過不同的顯示可以知道數據庫的長度是7
后面就可以通過盲注來注入出數據庫名稱和其他數據
9、盲注(base ontime)
來到這一關可以看到,還是一個查詢框
這里嘗試輸入用戶名查詢,發現無論輸入任何的用戶都只會輸出:
因此這里布爾盲注也無法使用了,只能使用時間盲注了,就是通過不同的判斷條件來判斷頁面是否延時顯示來判斷是否存在注入點:
admin' and if(1=1,sleep(2),1)#
后面就可以通過盲注來注入出數據庫名稱和其他數據
10、寬字節注入
來到SQL注入的最后一關,是寬字節注入,這個是“中文”限定的SQL注入方法
可以看到頁面如下,依舊是一個查詢框
不知道寬字節注入是什么的小伙伴可以參考:SQL注入:寬字節注入_sql寬字節注入-CSDN博客
簡單來說:
一個gbk編碼漢字,占用2個字節。
一個utf-8編碼的漢字,占用3個字節。
addslashes函數的作用就是讓'
變成\'
,讓引號變得不再是原本的“單引號”,沒有了之前的語義,而是變成了一個字符。那么我們現在要做的就是想辦法將'前面的\給它去除掉,那就是在前面加上一個字符讓其與吼吼的轉義字符組合成一個漢字就逃過了addslashes函數的過濾
那么在pikachu靶場中看一看:
嘗試進行閉合發現滅有報錯,這時因為我們輸入的'被過濾了
那么現在嘗試“吃掉”\:
可與看到,利用寬字節成功的注入出了數據庫名稱和用戶名
到此,pikachu靶場中的SQL注入相關知識就學習完畢了!
參考鏈接:pikachu SQL注入 (皮卡丘漏洞平臺通關系列)_pikachusql注入闖關hackbar-CSDN博客