摘要:在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文件