滲透測試
- 一、命令注入
- 二、跨站請求偽造(CSRF)
- 三、命令注入頁面之注人測試
- 四、CSRF頁面之請求偽造測試
一、命令注入
命令注入(命令執行) 漏洞是指在網頁代碼中有時需要調用一些執行系統命令的函數例如 system()、exec()、shell_exec()、eval()、passthru()
,代碼未對用戶可控參數做過濾,當用戶能控制這些函數中的參數時,就可以將惡意系統命令拼接到正常命令中,從而造成命令執行攻擊。
常見連接符如下:
A;B,# 先執行A,再執行 B。
A&B,# 簡單拼接,A、B之間無制約關系
A|B,# 顯示B的執行結果。
A&&B,# A執行成功,然后才會執行 B。
A||B,# A執行失敗,然后才會執行 B。
命令注入漏洞的分類如下:
- (1)代碼層過濾不嚴
商業應用的一些核心代碼封裝在二進制文件中,在 Web 應用中通過 system 函數來調用svstem( “bin/program – arg $arg”) 😮 - (2) 系統的洞造成命令注入
例如 Bash 破殼漏洞(CVE-2014 -6271) - (3)調用的第三方組件存在代碼執行漏洞
例如 WordPress 中用來處理圖片的ImageMagick 組件、Java 中的命令執行漏洞 (Struts2/Elasticsearch Groovy 等)、ThinkPHP 命令執行等。
對于命令注入,可從以下幾個方面進行防御:
- 1、盡量少用執行命令的函數或者直接禁用。
- 2、參數值盡量使用引號括,并在拼接調用 addslashes 函數進行轉義
- 3、在使用動態函數之前,確保使用的函數是指定的函數之一
- 4、在進入執行命令的函數方法之前,對參數進行過濾,對敏感字符進行轉義。
- 5、在可控點是程序參數的情況下,使用
escapeshellcmd
函數進行過濾;在可控點是程序參數值的情況下,使用escapeshellarg
函數進行過濾。
二、跨站請求偽造(CSRF)
跨站請求偽造(cross-site request forgery),也被稱為 one-click attack 或者 session riding.通常縮寫為 CSRF 或者XSRF,是一種挾制用戶在當前已登錄的 Web 應用程序上執行非本意的操作的攻擊方法。
跨站請求攻擊,簡單地說,是攻擊者通過一些技術手段欺騙用戶的瀏覽器去訪問一個自己曾經認證過的網站并運行一些操作 (例如發郵件、發消息,甚至財產操作,比如轉賬和購買商品)。由于瀏覽器曾經認證過,所以被訪問的網站會認為是真正的用戶操作而去運行。這利用了 Web 中用戶身份驗證的一個漏洞:簡單的身份驗證只能保證請求發自某個用戶的瀏覽器,卻不能保證請求本身是用戶自愿發出的。
三、命令注入頁面之注人測試
將安全級別調整至 Low 級別,打開“命令注人”頁面,查看源碼,可以知道 Low 級別的代碼接收了用戶輸入的 IP,對目標P 從主機服務器的角度進行 ping 測試。代碼中對用戶輸人的IP 并沒有進行任何的過濾,所以利用該漏洞進行命令注入。
網頁在編輯時,要注意編碼格式,使用UTF -8 格式時,中文相應地會出現HTML亂碼。
可以利用&、&&、|、||等命令連接符,在 ping 完后再執行系統命令,如查看IP 信息、為服務器添加用戶 等非法操作。
將安全級別調整至 Medium 級別,打開“命令注入”頁面,查看源碼,可以知道 Medium級別的代碼在 Low 級別代碼的基礎上增加了對字符“&&”和“;”的過濾,但在做 Low 級別實驗時,用的字符“&”并不在它的過濾范圍中。
&& 和&的區別在于,&& 是執行完前面的命令后,再執行后面的命令;& 是不管前面的命令是否已執行,后面的都執行。
將安全級別調整至 High 級別,打開“命令注入”頁面,查看源碼,可知道 High 級別的代碼進行了黑名單過漲,把一些常見的命令連接符給過濾了。黑名單過濾看似安全,但是如果黑名單不全,則很容易進行繞過。仔細看黑名單過濾中的“1”,其后面還有一個空格,于是用“1”或者“1”又可以繞過。
實際滲透中,命令注入可以用來修改上傳文件的文件類型。利用“重命名”命令把上傳的JPG 文件改成 PHP 文件。
四、CSRF頁面之請求偽造測試
將安全級別調整至 Low 級別,打開“CSRF”頁面。
頁面功能是用戶更新密碼,但代碼里沒有對更改代碼的合理性做驗證。在界面中輸入要修改的密碼并用 Burp Suite 軟件抓包,修改密碼的 URL為:
這時攻擊者可利用這個 URL,稍做修改,發送給受害者,并引誘受害者在登錄網站的情況下點擊,如 URL 修改為 http://192.168.217.130/dvwa/vulnerabilities/csrf/? password_new =harker&password_conf = harker&Change =%E6%9B%B4%E6%9%B9#
,受害者點擊鏈接后,就會在不知情下把登錄網站的密碼修改為“harker”。
為了隱藏攻擊者發送的URL,可將URL鏈接寫在網頁里,發布在攻擊者的網站上,當受害者無意中瀏覽攻擊者的網站時原有的密碼被修改。
將安全級別調整至 Medium 級別,打開“CSRF”頁面。
Medium 級別比Low 級別多了一個驗證:if(stripos($_SERVER HTTPREFERER門SERVER['SERVER NAME )! == false)。
驗證受害者訪問的網頁與修改密碼網頁是否同一網站。這時含有 CSRF 的網頁就不能放在攻擊者的服務器上了,而需要利用文件上傳的方式上傳至與受害者訪問修改密碼網頁的網站上進行訪問。
High 級別的代碼加入了 Anti - CSRF token 機制,用戶每次訪問修改密碼頁面時,服務器都會返回一個隨機的 token。向服務器發起請求時,需要提交 token 參數,而服務器在收到請求時,會優先檢查 token,只有 token 正確,才會處理客戶端的請求。要繞過這個機制,就需要獲得 token 值,這需要一定的網頁編程基礎,這里就不贅述了。