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


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

函數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中造成文件包含的四個函數 

1、include(),require()

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

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

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

當上述的四個函數包含一個新文件時,該文件將作為PHP代碼執行,php內核並不在意該被包含的文件是什么類型,如果被包含的是txt文件,圖片文件,遠程URL,也都將作為PHP代碼執行

○ 本地文件包含,遠程文件包含的區別
1、本地文件包含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文件


免責聲明!

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



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