Web安全——命令注入漏洞詳解

點贊後看,養成習慣
喜歡的話 可以點個關注喲
你們的點贊支持對博主們來說很重要哦 !!!

本文將針對以下問題逐條進行解答:

01 命令執行漏洞是什麼?

02 爲什麼會有命令執行漏洞?

03 命令執行漏洞可以用來做什麼?

04 我們該如何使用命令執行漏洞?

05 修復方案是什麼?

06 什麼情況下考慮命令執行漏洞?

在這裏插入圖片描述

01 命令執行漏洞概念

簡單來說, 命令執行漏洞就是黑客能夠通過控制外部參數可以達到執行系統命令的效果。

在這裏插入圖片描述
相較於代碼執行漏洞來說,代碼執行漏洞是靠執行腳本代碼調用操作系統命令,而命令執行漏洞是直接調用系統命令的漏洞,也叫做os命令執行漏洞。


02 命令執行漏洞產生的原因

原因主要有二:

1.外部參數可控

應用程序調用了執行系統命令的函數,比如服務器程序通過system、eval、exec等函數直接或者間接地調用 cmd.exe

在這裏插入圖片描述
黑客能控制這些函數中的參數,比如可以通過瀏覽器或者其他客戶端軟件提交一些cmd命令(或者bash命令)至服務器程序。

2.內部拼接命令

服務器將 輸入的惡意參數拼接到正常命令中 ,從而執行命令造成攻擊


03 命令執行漏洞的危害

黑客如果能夠利用命令執行漏洞,那麼黑客就可以像電腦用戶控制自己電腦一樣,自由地對電腦進行操作,比如開啓防火牆、添加路由、開啓遠程服務等等操作

在這裏插入圖片描述


04 命令執行漏洞的利用方式

這裏以一道CTF題舉栗子

1.找到一個可以自己輸入參數的頁面

如攻防世界中的一道Web題目

在這裏插入圖片描述
頁面場景如下:

在這裏插入圖片描述
嘗試輸入本地地址127.0.0.1,觀察回顯內容

在這裏插入圖片描述

發現返回內容相似命令行下ping命令返回結果,初步判斷可能存在命令執行漏洞

2.利用管道符輔助測試

在場景利用前,我先岔開話題分享一下有關於管道符的一些知識

在操作系統中,“&、|、||”都可以作爲命令連接符使用,用戶通過瀏覽器提交執行命令,由於服務器端沒有針對執行函數做過濾,導致在沒有指定絕對路徑的情況下就執行命令。

下面列舉windows系統linux系統支持的管道符命令:

windows系統支持的管道符:

示例 用法
a | b 直接執行命令b
a || b a爲假 ,才執行b
a & b a可真可假,若爲假則直接執行b
a &&b a爲真,b才能執行

linux系統支持的管道符:

示例 用法
a;b 執行完再執行b
a | b 直接顯示b的執行結果
a || b a錯,b才執行
a & b a可真可假,若爲假則直接執行b
a && b a爲真才能執行b

很多時候,我老是忘記符號之間的區別,於是我花心思想了個小技巧記憶,在這裏也分享給大家:

|是棍子,單打獨鬥:
a | b : b是主角,一根棍子的時候不在意a的死活,執行自己的就完事
a || b :b是主角,兩根棍子的時候,戾氣很重,非要打死a,只有a死了才能執行自己的

在這裏插入圖片描述

&是拉手,和諧共處:
a & b : b是主角,一次拉手是表面朋友,不管你a是死是活,我都會執行
a & b : b是主角,兩次拉手是死黨,只有a過得好好的,我纔會也執行的好好的

在這裏插入圖片描述
好,回到這個web場景。我們在第一步的時候判斷此處存在系統命令執行漏洞,於是我們使用管道符|進行測試,發現果然可以執行系統命令。

在這裏插入圖片描述
經過了後續的命令執行,我們很容易的獲得了本題的flag

在這裏插入圖片描述
在這裏插入圖片描述

總結一下,這道題就是簡單考察我們對命令注入漏洞中管道符的使用,較爲簡單。


05 修復命令執行漏洞漏洞的方案

1.設計者儘可能少設計使用一些命令執行函數,

2.若有必要使用,那麼必須對特殊函數做過濾,對用戶輸入的命令做檢查,對客戶端提交的變量在進入執行命令前做好過濾和檢查等



06 什麼情況下考慮命令執行漏洞?

作爲一個安全老司機,當我們看到一個可輸入參數的位置,心裏就要有點癢癢

這時候我們可以嘗試使用SQL注入、命令注入試試手,然後查看返回結果,如果返回的內容是命令執行返回的內容,那我們嘗試使用管道符輔助測試,比如 127.0.0.1 | whoami

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章