簡單更點漏洞知識吧,這幾天寫密碼學太多了,簡單介紹幾個常見的網站漏洞。特別聲明,本文只介紹基礎原理和思想,不深入探究某漏洞的修復和深層利用。
命令注入
先從最愚蠢的開始,
拿DVWA的靶場來舉例子(為啥拿這個舉例子,我也想問山大網安院的老師為啥選這個),當用戶提交內容時,可以在正確內容後面利用“&”或“|”等符號級聯上攻擊命令,或者提交按照特定結構構造的內容,從而使目標服務器誤認並執行惡意命令,達到攻擊目的。
最基礎的版本,毫無防護的執行上傳的命令
DVWA給出了好幾個安全級別的例子,安全性越來越強,從Low 級別的沒有輸入審查;到Medium級別將把”&&”和”;”轉為空””,即刪除帶有級聯符號的命令;再到High等級把所以代表多命令的符號全部禁用(不過留下了帶空格的“| ”符作為後面);直到Impossible 級別完全嚴格審查輸入,只允許數字和點以IP 的形式輸入。
這教會我們一個很重要的預防措施,即對用戶輸入進行嚴格的驗證和過濾,只允許合法的字符和命令,避免用戶注入附加的惡意命令
文件上傳
很多網站都可允許用戶上傳文件,如果處理不當,也會存在文件上傳漏洞,File Upload 漏洞的基本原理是開發在開發 Web 的文件上傳功能時,沒有嚴格識別和控制上傳文件的類型和大小,導致攻擊者利用文件上傳向服務器發送能被服務器解析並運行的惡意腳本和文件。
以DVWA提供的Low代碼為例,Web應用沒有完全限制上傳應用的類型和大小:
當上傳的文件為 PHP 腳本時,由存儲路徑我們可以訪問到該腳本,則可以利用GET、POST 等方式向服務器提交惡意命令或直接在腳本中寫入惡意攻擊。
如果可以上傳腳本,那麼完全可以上傳一句話木馬,以獲得該服務器的Webshell,從而控制服務器得到操作權限。更進一步的,上傳圖片馬,不死馬等,都可以對服務器採取更深層攻擊。(一句話木馬是啥,改天詳細介紹)。
文件包含
第三個漏洞,文件包含漏洞,File Inclusion 攻擊產生的根本原因為,服務器開啟了 allow_url_include 選項,可以將文件作為Web應用的調用變量(簡單來說就是可以通過網站來訪問服務器中的文件),進行動態調用,同時,服務端又沒有對調用的文件做合理審查(或者審查被攻擊者繞過),導致文件中包含的惡意代碼被編譯運行。
比如,在DVWA中,在URL地址裡輸入file1-3,可以訪問三個文件,但是這個時候我們如果輸入file4,當輸入不存在文件的地址後,界面會返回錯誤信息,可能會因此暴露服務端文件存儲的位置,
這裡服務器搭載在本地D盤,可以看到報錯信息裡有文件地址
如果攻擊者利用該部分代碼訪問包含PHP的文件,該文件就會被當作PHP文件執行,例如,如果在該目錄下創建帶有打開計算器功能代碼的txt文件,當在URLpage裡輸入該txt 地址時,可以看到其依然被當作PHP運行併成功打開了計算器:
一個很自然的想法,利用第二個漏洞文件上傳漏洞和本漏洞結合,先上傳,再定位,最後執行,就可以使服務端運行攻擊者的代碼以及進行其他攻擊。
遠程文件包含
遠程包含的原理和本地文件上傳原理類似,均為“讓服務器訪問指定文件”,區別在於本地文件包含利用的是服務器本地的文件,需要攻擊者設法上傳至服務器,危害相對較小可控,但遠程包含漏洞利用的是網絡上的第三方文件(也有可能是攻擊者的共享文件),相較於本地文件包含漏洞危害更大。
SQL注入
SQL注入即是指web應用程序對用戶輸入數據的合法性沒有判斷或過濾不嚴,攻擊者可以在web應用程序中事先定義好的查詢語句的結尾上添加額外的SQL語句,在管理員不知情的情況下實現非法操作,以此來實現欺騙數據庫服務器執行非授權的任意查詢,從而進一步得到相應的數據信息(和前面提到的命令注入很像)。
比如我們使用的登錄接口:在登錄界面包括用戶名和密碼輸入框,以及提交按鈕,輸入用戶名和密碼,提交。登錄時調用接口/user/login/ 加上參數username、password,首先連接數據庫,然後後臺對請求參數中攜帶的用戶名、密碼進行參數校驗,即sql的查詢過程。
sql中會將#及–以後的字符串當做註釋處理,如果我們使用“’ or 1=1 #” 作為用戶名參數,#會忽略後面的語句,由於'1'='1'始終為真,攻擊者將能夠繞過身份驗證並獲得訪問權限。
翻譯過程
如果是引入了一些功能性的sql,殺傷性更大,比如上面的登陸接口,如果用戶名使用“’ or 1=1;delete * from users; #”,那麼在";"之後相當於是另外一條新的sql,這個sql命令會刪除全表,導致服務器數據庫清空。
剩下的漏洞類型有人看再繼續更。