部分內容轉載
https://www.jianshu.com/p/277294c1a9f8
https://www.cnblogs.com/yewooo00/p/7551083.html
https://www.cnblogs.com/wfzWebSecuity/p/11202512.html
信息泄露
1、phpinfo函數
輸出 PHP 當前狀態的大量信息,包含了 PHP 編譯選項、啟用的擴展、PHP 版本、服務器信息和環境變量(如果編譯為一個模塊的話)、PHP環境變量、操作系統版本信息、path 變量、配置選項的本地值和主值、HTTP 頭和PHP授權信息
2、scandir函數
列出指定路徑中的文件和目錄
<?php var_dump(scandir('./')) ?>
執行代碼函數
1、eval函數
$code
) : mixed
eval() 函數把字符串按照 PHP 代碼來執行
該字符串必須是合法的 PHP 代碼,且必須以分號結尾。
eval('phpinfo();');
2、assert函數
$assertion
[, Throwable $exception
] ) : bool
assert — 檢查一個斷言是否為 FALSE
如果 assertion
是字符串,它將會被 assert() 當做 PHP 代碼來執行
assert('phpinfo()');
3、preg_replace函數
preg_replace — 執行一個正則表達式的搜索和替換
$pattern
, mixed $replacement
, mixed $subject
[, int $limit
= -1 [, int &$count
]] ) : mixed
preg_replace("/test/e","phpinfo();","test");
4、create_function函數
創造一個匿名函數
<?php $newfunc = create_function('$a,$b', 'return "$a + $b= " . ($a+$b);'); echo $newfunc(1,2) . "\n"; ?>
等價於
<?php function lambda($a,$b){ return "$a+$b = ".($a+$b); } echo lambda(1,2); ?>
利用
<?php $cfunc = create_function('$v', 'return system($v);'); echo $cfunc('whoami'); ?>
5、call_user_func函數
第一個參數 callback
是被調用的回調函數,其余參數是回調函數的參數
<?php $callback= 'assert'; $parameter = 'phpinfo()'; call_user_func($callback, $parameter); ?>
6、call_user_func_array()函數
使用參數數組中的參數調用第一個參數給定的回調。
<?php call_user_func_array('assert', array('phpinfo()')); ?>
7、array_map() 函數
將用戶自定義函數作用到數組中的每個值上,並返回用戶自定義函數作用后的帶有新值的數組。回調函數接受的參數數目應該和傳遞給 array_map() 函數的數組數目一致。
<?php $array = array(0,1,2,3,4,5); array_map($_GET[1],$array); ?>
http://localhost/test.php?1=phpinfo
命令執行函數
1、exec函數
執行一個外部程序
<?php echo exec('whoami'); ?>
2、shell_exec函數
通過 shell 環境執行命令,並且將完整的輸出以字符串的方式返回(安全模式不能使用)
<?php echo shell_exec('ls'); ?>
3、passthru函數
$command
[, int &$return_var
] ) : void
passthru — 執行外部程序並且顯示原始輸出
<?php echo passthru('ls'); ?>
4、system()函數
$command
[, int &$return_var
] ) : string
執行外部程序,並且顯示輸出
<?php
echo system('whoami') ?>
文件操作函數
copy----------------------拷貝文件 file_get_contents---------將整個文件讀入一個字符串 file_put_contents---------將一個字符串寫入文件 file----------------------把整個文件讀入一個數組中 fopen---------------------打開文件或者url move_uploaded_file--------將上傳的文件移動到新位置 readfile------------------輸出文件 rename--------------------重命名一個文件或目錄 rmdir---------------------刪除目錄 unlink & delete-----------刪除文件
其他函數
1、chgrp()
函數改變文件所屬的組
2、chown()
函數改變指定文件的所有者
3、ini_set()
可用於修改、設置 PHP 環境配置參數
4、ini_alter()
是 ini_set() 函數的一個別名函數,功能與 ini_set() 相同
5、ini_restore()
可用於恢復 PHP 環境配置參數到其初始值