危險函數
mixed eval (string $code) 把字符串做爲PHP代碼執行
bool assert (mixed $assertion [,string $description]) 替代eval函數。相同功能。
mixed preg_replace(mixed $pattern,mixed $replacement,mixed $subject[,int $limit=-1 [,int&$count]])
/e修正符使preg_replace()將replacement參數看成PHP代碼
preg_replace("/test/e",$_GET["V"],"jutst test");
提交?h=phpinfo(),phpinfo()將會被執行
string create_function(string $args,string $code)
建立一個匿名函數,並返回獨一無二的函數名
$newfunc = create_funciton('$v','return system($v);')
$newfunc('whoami');就至關於system('whoami')
call_user_func(callable $callback [,mixed $parameter [,mixed $....]])
第一個參數callback 是被調用的回調函數,其他參數是回調函數的參數
function test($var){echo "callable test $var";}
call_user_func('system','whoami')
call_user_func_array(callable $callback,array $param_arr)
把第一個參數做爲回調函數(callback)調用,把參數數組做(param_arr)爲回調函數的參數傳入
複製代碼
包含函數
include $file;
變量$file 可控的狀況下咱們就能夠包含任意文件。從而getshell目的
另外再不一樣的配置環境,能夠包含不一樣的文件,所以分爲遠程文件包含和本地文件包含。
包含函數能夠讀取任意文件內容,這就須要用到【支持的協議和封裝的協議】以及【過濾器】
include($_GET['file']);
?file=php://file/convert.base64-encode/resource=index.php
file是協議 convert.base64-encode 是過濾器
include_once
require
require_once
複製代碼
命令執行函數
exec():執行一個外部程序
passthru():執行外部程序而且顯示原始輸出
proc_open() :執行一個命令,而且打開用來輸入/輸出的文件指針
shell_exec():經過shell環境,而且將完整的輸出以字符串方式返回
system():執行外部程序,而且返回輸出
popen():經過popen()參數傳遞一條命令,並對popen()所打開的文件進行執行。
複製代碼
文件操做函數
copy : 拷貝文件
file_get_contents:將整個文件讀入爲一個字符串
file_put_contents:將字符串寫入文件
file:把整個文件讀入一個數組中
fopen:打開文件或者url
move_uploaded_file:將上傳的文件移動到新位置
readfile:輸出文件
rename:重命名一個文件或目錄
rmdir:刪除目錄
unlink&delete :刪除文件
複製代碼
特殊函數
信息泄露
bool phpinfo([int $what = INFO_ALL]):輸出php當前狀態的大量信息包含啓用的擴展php版本服務器信息
軟連接-讀取文件內容(liunx)
bool symlink(string $target ,string $link)
symlink()對於已有的target 創建一個名爲link的符號連接
string readlink(string $path)
readlink()和同名的C函數作一樣的事情,返回符號鏈接的內容
環境變量
string getenv(string $varname)
獲取一個環境變量的值
bool putenv(string $setting)
添加setting 到服務器環境變量。環境變量僅存活與當前請求期間,再請求結束時恢復初始狀態
加載擴展
bool dl(string $library)
載入指定參數library的php擴展
配置相關
string ini_get():成功時返回配置選項的值
string ini_set():設置指定配置選項的值,這個選項會在腳本運行時保持新的值,而且腳本結束恢復
string ini_alter:同上
string ini_restore:恢復指定配置選項到它的原始值
數字判斷
bool is_numeric(mixed $var)
若是var時數字和數字字符串則返回TRUE,不然返回FALSE
*僅用is_numeric判斷而不用intval轉換有可能插入16進制字符串到數據庫,進而可能致使sql二次注入
數組相關
bool in_array($needle,array $haystack[,bool $strict=FALSE]):該函數比較會自動進行類型轉換
$a='1abc'
inarray($a,array(1,2,3))返回爲真
複製代碼