命令執行和代碼執行的原理分析

由於這個兩個的漏洞和文件包含的漏洞的原理差不多,我就兩個一塊整理吧,我知道我自己整理分析的沒有網上其他人整理的想詳細,甚至從,發生,利用,復現,危害,防禦,等等方面總結到一起的,畢竟我寫這個也只是強迫我自己讓我自己對原理更加深入的理解。

好了我先從命令執行這個漏洞開始說。

在某些應用時,有些會需要調用一些執行系統命令的函數,比如PHP中的:

system , exec , shell_exec , passthru , popen , proc_popen 等函數...

如果用戶可以控制這些函數的參數,那麼把參數替換成自己的惡意命令,是不是就可以操作系統一些命令了?這就是命令執行。

這裡我用 shell_exec 這個函數來演示。

參數是 a ,並傳參給 $cmd 這個變數,然後用 shell_exec 這個函數來執行,並讓 echo 輸出到頁面上來,就是顯示到網頁當中。

我把CMD命令里的 whoami 這個查詢當前用戶的命令,傳參給 a ,然後 a 賦值給變數 $cmd ,然後 shell_exec這個函數,就執行了,所以就如上圖一樣, 執行了我的命令。

這個就是簡單的命令執漏洞的原理,雖說總結完命令執行這個漏洞了,但是還是真的如我說的有點總結的太少,那我就貼一個大神的總結吧,如果大神看到了,覺得侵權了,不想讓我貼的話,可以私信我,我自己刪除。

print 點擊圖片放大,然後右鍵在新標籤里繼續放大,這樣就是最大化的放大,可以完全和原頁面一樣的大小觀看。

#上圖圖片地址: pic1.zhimg.com/v2-74495

好了,下面我開始說說這個代碼執行,這個漏洞。

代碼執行,同樣的道理,就是某些應用在應用中可能需要調用一些能將字元串轉為代碼的函數,然後執行,如果用戶發現了一個存在這個函數的頁面,那用戶自己輸入一些惡意代碼,是不是就可以達到控制這個網站了?這就是代碼執行。

PHP中常見的這類函數如 eval , assert 這兩個,這裡我就以 eval 這個函數進行演示。

在某個PHP文件里寫下以下代碼:

以字元串 a 作為參數,然後傳參給變數 $b ,然後 eval 這個函數進行執行了變數 $b 帶過來的參數,並以PHP代碼的形式執行了。

是不是我把 a 這個參數寫成PHP的代碼,就能直接運行了啊?那我再添加個命令函數,在看看。

雖然我不知道為什麼第一行會顯示報錯,,,但是,看第二句,是不是執行成功了,這就是代碼執行漏洞的原理。

我擦擦,瞬間又想在貼一下某大神他總結的代碼執行,,,,感覺我是和他的真愛粉了,,,,

print 點擊圖片放大,然後右鍵在新標籤里繼續放大,這樣就是最大化的放大,可以完全和原頁面一樣的大小觀看。

#上圖圖片地址:pic2.zhimg.com/v2-bddeb

自己本地復現一下,這樣是對漏洞原理能更好的理解,話說我為啥我老是喜歡貼這個大神總結的啊!!!

看了下他的簡書博客,,,也是把常用的漏洞都自己總結了一遍, 而且總結的還是這麼詳細,話說不會當初的他也是和我一樣,復現漏洞原理,理解和深入吧。。。

總結:

命令執行,代碼執行,都是程序員在設計網站中,對函數沒有好好的使用,從而導致用戶能直接使用,如果程序員在設計時思考到這點,加過濾,加判斷,價限制,那這個就不會存在這個漏洞。


推薦閱讀:

北京上海等地軌交安檢有著怎樣的意義與作用?
藍牙配對模式?
如何看待 2018 年 F1 引入 HALO 座艙保護裝置?

TAG:漏洞 | 程序漏洞 | 安全 |