今天給大家講解一下命令執(zhí)行和代碼執(zhí)行漏洞的危害以及詳解步驟。
代碼執(zhí)行和命令執(zhí)行是有區(qū)別的,一個叫命令,一個叫代碼,代碼執(zhí)行的話,一般指的是執(zhí)行代碼
命令執(zhí)行的話,一般都是執(zhí)行我們電腦上面的cmd命令,也就是dos命令,所以它們是有這種區(qū)別的
1、首先是代碼執(zhí)行漏洞
1)、代碼執(zhí)行漏洞詳解
代碼執(zhí)行漏洞造成的原理是由于服務(wù)器端沒有針對執(zhí)行函數(shù)做過濾,導(dǎo)致在沒有指定絕對路徑的情況下就執(zhí)行命令,可能會允許攻擊者通過改變 $PATH 或程序執(zhí)行環(huán)境的其他方面來執(zhí)行一個惡意構(gòu)造的代碼。
造成代碼執(zhí)行相關(guān)的函數(shù)分別是:eval、assert函數(shù),它和我們前段日子講的一句話木馬是一樣的。
都帶有eval這個函數(shù),那這個eval能干嘛呢?它就是能將后門代碼給執(zhí)行。
、eval函數(shù)的作用
然后可以看到,只要把php代碼放到eval函數(shù)里面,它就可以執(zhí)行,它和assert的作用是一樣的,都是執(zhí)行代碼的一個函數(shù),我們上次講的一句話木馬,一句話木馬不只是只有eval函數(shù)去執(zhí)行代碼,也有很多方法去執(zhí)行。
代碼執(zhí)行的詳細(xì)操作
那我們就直接寫一個代碼,比如說他這個,我們先$id = $_GET['x']; 然后用eval包含他這個$id變量,然后我們打開網(wǎng)站,然后傳個值
比如說echo 1;然后它就輸出1出來了
那我們像上次叫一句話木馬的時候一樣,直接輸出一個phpinfo,它都可以成功的輸出在頁面中,說明執(zhí)行phpinfo()函數(shù)代碼成功。
那我們可以像上次講到的一樣,通過直接調(diào)用執(zhí)行命令的函數(shù),那么就可以做到提權(quán)的一個效果,當(dāng)然,當(dāng)前的權(quán)限要夠大的情況下才可進行一方面的提權(quán)操作
不僅僅是這樣的去提權(quán),那假如說我們怎么寫入一句話木馬???
那我們的話,可以通過file_put_contents函數(shù)寫入一個文件,那么的話,前面寫上一句話木馬,通過file_put_contents定義一個絕對路徑,絕度路徑的話我們可以通過system函數(shù)執(zhí)行命令去查看
然后就可以看見我們的一句話木馬成功的寫入了上去。
所以說它這個漏洞是相當(dāng)?shù)拇?/p>
程序員在開發(fā)cms網(wǎng)站的時候,eval,assert等等函數(shù)后存在可控變量,會導(dǎo)致代碼執(zhí)行漏洞,這幾個漏洞都是存在一個可控變量,就是當(dāng)它存在一個可控制的變量,我們控制它,就可以顯示其它的內(nèi)容,那這樣的話,我們想干嘛就干嘛,寫入一句話也行,這些等等
如何去挖掘出代碼執(zhí)行的漏洞?
還是一樣,我們前期的一個信息收集可以使用掃描工具,發(fā)現(xiàn)有eval這些東西,第二個,我們上網(wǎng)百度一下他這個網(wǎng)站cms程序的時候,因為進行信息收集之后,我們可以看看當(dāng)前的cms有沒有存在一個代碼執(zhí)行的一個漏洞,那么這個就是一個代碼執(zhí)行的漏洞一個全部步驟
接下來是命令執(zhí)行
命令執(zhí)行漏的詳解
命令執(zhí)行的話,一般都是執(zhí)行我們電腦上面的cmd命令,也就是dos命令,所以它們是有這種區(qū)別的,Exec, shell_exec , system等函數(shù)引起的漏洞,程序員在開發(fā)cms網(wǎng)站時,函數(shù)后存在可控變量,會導(dǎo)致命令執(zhí)行漏洞,代碼執(zhí)行執(zhí)行的是代碼,命令執(zhí)行執(zhí)行的是電腦上面的cmd
那我們還是一樣,定義一個變量,然后用shell_exec函數(shù)包含起來。
在這里我們執(zhí)行一個ipconfig的命令,它成功的輸出了,我們執(zhí)行命令,前提要搞清楚當(dāng)前的服務(wù)器是什么系統(tǒng),是windows還是linux,因為兩者不同的系統(tǒng)要著不同的命令,所以我們在Windows上面執(zhí)行的是dos命令,命令不同,要區(qū)分開
比如說net user 它都可以執(zhí)行的
所以說,這些函數(shù)要引用的話,是非常容易出現(xiàn)漏洞的,只要說這個函數(shù)引用的話,它的對象要去執(zhí)行什么東西的時候,它的對象是存在一個可控變量的,如果說它這里可以控制這個變量,就指定去輸出你想要的東西,那完全可以對這個網(wǎng)站進行入侵的吧
我們寫入一個文件 到d盤,文件名可以任意取,然后我們可以看到,d盤有寫入了一個文件,那這樣說的話,我們不是可以上傳一句話等等一些操作,這和代碼執(zhí)行是不一樣的,代碼執(zhí)行是執(zhí)行php代碼,而命令執(zhí)行是執(zhí)行dos命令。
那我們就了解一下linux通過命令寫入文件
我們可以看到,在這里';'的用法就是先執(zhí)行他前面的命令,直到前面命令執(zhí)行完(無論對與錯)就立即執(zhí)行后面的命令
我們輸入錯誤看看
我們也可以用'|'的
上一條命令的輸出,作為下一條命令參數(shù)
當(dāng)然我們?nèi)ネ诰蜻@方面漏洞時候,前期的信息收集很重要,因為這些漏洞一般都出現(xiàn)在腳本語言自帶的框架、cms以及一些未知的插件上面,那么的話,我們?nèi)ナ占水?dāng)前網(wǎng)站的一些架構(gòu)之后,那么我們就可以利用這些已經(jīng)出來的漏洞進行檢測有沒有存在危害漏洞。
那么的話,命令執(zhí)行和代碼執(zhí)行漏洞,就是因為這些函數(shù)引起來的,我們要看一下有沒有這個函數(shù),有了這個函數(shù),它不一定有漏洞,要看這個函數(shù)的后面有沒有存在可控制的變量,就是有沒有變量去控制想輸出什么和執(zhí)行什么?有的話,它沒有過來,我們就可以去執(zhí)行這些命令。
最后喜歡我文章的朋友請加圈子關(guān)注我們,私信關(guān)鍵詞:加群。
就會自動分享給你群號。歡迎大家加入我們的安全大家庭。提高大家的安全意識,提升大家的網(wǎng)絡(luò)安全技能一直是我們的初衷和愿景,讓我們共同成為守護信息世界的"SaFeMAN"。
還有可以關(guān)注我們微信公眾號,在公眾號上輸入安界網(wǎng),就可以關(guān)注到我們。