代碼審計學習之命令注入


0x01 起因及想法

起因:剩下這假期這十幾天,沒人玩了,所以想學點東西並記錄到自己的博客里。前陣子在烏雲社區看到一篇代碼審計的整體學習思想如下:

學習代碼審計目標:能獨立完成對一個CMS代碼安全的監測

思路:

A、通讀全文代碼,從功能函數代碼開始閱讀,例如include文件夾下的comm_fun.php,或者類似關鍵字的文件。

B、看配置文件,帶有config關鍵字的文件,找到mysql.class.php文件的connect()函數,查看在數據庫連接時是否出現漏洞。

C、跟讀首頁文件,了解程序運行時調用那些函數和文件,以首頁為基線,一層層去擴展閱讀所包含的文件。

0x02 命令注入學習

形成原因:對一些危險函數沒有做過濾。

相關函數:system()、exec()、passthru()、‘‘反引號、shell_exec()、popen()、proc_open()等等。

0x03 利用演示

由於用法差不多,這里以system()為例進行演示。

演示代碼:

 

查看權限:

 

添加用戶:

寫入一句話菜刀連接:

 

其他利用在自行摸索。

0x04 防護

PHP中命令注入攻擊漏洞帶來的危害和影響很嚴重。防范命令注入攻擊漏洞的存在可以通過以下幾種方法。

1.、盡量不要執行外部的應用程序或命令。

2.、使用自定義函數或函數庫實現外部應用程序或命令的功能。

3、 在執行system、eval等命令執行功能的函數前,確定參數內容。

4、escapeshellcmd()函數會轉義命令中的所有shell元字符來完成工作。這些元字符包括:#&;`,|*?~<>^()[]{}$\\。例如寫入一句話可被過濾 ,所以命令無法執行成功,無法生成一句話文件。

5、使用escapeshellarg函數處理相關參數。Escapeshellarg函數會將任何引起參數或命令結束的字符進行轉義,如單引號“’”會被轉義為“\’”,雙引號“””會被轉義為“\””,分號“;”會被轉義為“\;”,這樣escapeshellarg會將參數內容限制在一對單引號或雙引號里面,轉義參數中所包含的單引號或雙引號,使其無法對當前執行進行截斷,實現防范命令注入攻擊的目的。 

6、使用safe_mode_exec_dir執行可執行的文件路徑。將php.ini文件中的safe_mode設置為On,然后將允許執行的文件放入一個目錄中,並使用safe_mode_exec_dir指定這個可執行的文件路徑。這樣,在需要執行相應的外部程序時,程序必須在safe_mode_exec_dir指定的目錄中才會允許執行,否則執行將失敗。

0x05 聲明

本文僅供學習參考,由於本人水平有限,如發現錯誤歡迎指出,謝謝!

                                                                                 第一天  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM