一、SQLi-labs靶場搭建
首先我們需要在本地安裝好Apache、MySQL和PHP環境。
<VirtualHost *:80>
ServerName sqlilabs.local
DocumentRoot /var/www/sqlilabs
<Directory /var/www/sqlilabs>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
</VirtualHost>
接著,在MySQL中創建一個名為sqli-labs的資料庫,並執行資料庫初始化腳本。
mysql> create database `sqli-labs`;
mysql> use `sqli-labs`;
mysql> source /path-to-your-sqli-labs/sqli-labs/sql-connections/db-creds.inc
最後,下載並解壓sqli-labs,並將其放置在Apache的虛擬主機根目錄下,此時就完成了SQLi-labs靶場的搭建。
二、基礎注入
基礎注入是SQLi-labs中最簡單的級別,我們通過構造特定的SQL語句,獲取資料庫內部信息。
除了在Web應用程序中輸入「普通的」注入字元串外,還可以採用空格、字元轉義和其他技術來繞過輸入過濾。
http://localhost/sqlilabs/Less-1/?id=1\'
這樣舉個例子,我們在Less-1中探測一個單引號,看看程序如何響應。
在頁面中輸入
http://localhost/sqlilabs/Less-1/?id=1\'
就會得到一個SQL語句,因為單引號沒有被轉義且跟在數字1的後面,導致SQL語句錯誤。
You have an error in your SQL syntax; check the manual that corresponds
to your MySQL server version for the right syntax to use near '\'' at line 1
這表明單引號沒能被過濾,那麼我們就可以構造出自己的SQL語句。
http://localhost/sqlilabs/Less-1/?id=1' or 1=1 --+
攻擊者成功注入了一個SQL語句,從而繞過了應用程序的輸入過濾,實現查詢全部信息的目的。
三、盲注
當應用程序不返回真正的錯誤信息,而只是簡單地發布了一個頁面時,就發生了盲注漏洞。強制應用程序在查詢結果方面發出明確的「是」或「否」響應。
通過判斷響應的時間或頁面上的特定元素,來獲取內部資料庫信息。
http://localhost/sqlilabs/Less-11/?id=1' and sleep(10) or '1'='1
攻擊者構造了一段SQL語句,當id為1,而且表達式「and sleep(10)」返回True的時候,這就會導致應用程序等待10s,否則一下就跳過繼續執行,最後表達式得到True。
四、聯合注入
使用聯合注入技術,攻擊者可以在單個請求中查詢多個表並從中檢索信息。
聯合SQL語句允許開發人員從多個表中選擇數據,並返回鏈接結果。攻擊者可以使用這個SQL聯合語句來輕鬆繞過用戶輸入過濾。
http://localhost/sqlilabs/Less-5/?id=-1' union select 1,2,3,4,5#
攻擊者構造了一段SQL語句,它使用了UNION SELECT語法,詢問資料庫提供每個被選列的數據,列的數量必須與另一個select語句中的列的數量匹配。
其中在Less-5中,我們把id變成了負數,以避免查詢原有數據並直接執行我們的SQL語句。這時候我們就可以利用union select,往其他表查詢信息,得到了一張新的匹配結果表。
原創文章,作者:SKEEB,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/334871.html