windows命令行下载文件
certutil
适用于server 2003以上版本
以上命令会将http://192.168.203.140/b.ps1下载到本地的d盘
使用CertUtil + Base64来绕过安全软件
通过Base64对恶意文件进行编码,使恶意代码样本看起来像是无害的文本文件,然后使用CertUtil.exe下载后对其进行解码。下载了文本文件使用“Certutil.exe -decode”命令将Base64编码文件解码为可执行文件。
详情参考:
https://learn.microsoft.com/en-us/previous-versions/orphan-topics/ws.10/cc773087(v=ws.10)
bitsadmin
适用于server 2003以上版本
详情参考:https://learn.microsoft.com/zh-cn/windows/win32/bits/bitsadmin-tool
powershell
vbs
第一种把下载地址直接echo输入download.vbs。直接下载即可。
第二种保存脚本后再下载指定文件。
浏览器
也可以通过调用浏览器下载
数据库权限登web
若依CMS数据库密码加密
当拿到一个若依cms的数据库想登录web的时候,会发现数据库中的密码都是加密过的。
若依默认加密代码在com.ruoyi.framework.shiro.service.SysPasswordService.encryptPassword中:
通过loginname+password+salt计算一个md5值,数据库中loginname和salt是已知的,可以通过这段代码输入现有的loginname+任意密码+salt计算出一个新的MD5值,然后将这个值写入数据库就可以登录了。
大华DSS
系统如上,拿到一个dss 的shell,想要确定一下归属,想进一下web后台看看。发现数据库密码是加密的,尝试123456的md5发现不行。后来发现抓包密码会是加密之后的。直接把加密后的密码值写到数据库中即可登录。
向日葵密码抓取
查找向日葵文件地址方法
老版本
使用工具解密即可:
https://github.com/wafinfo/Sunflower_get_Password
较新版本
注册表获取:在向日葵v11.1.2.38529中,强化了加密机制,删除了配置文件config.ini中的fastcode(本机识别码)字段和encry_pwd(本机验证码)字段,而将这些敏感信息放到了注册表中,我们可以通过注册表查询使用Sunflower_get_Password[5]工具即可解密。
工具:
https://github.com/wafinfo/Sunflower_get_Password
最新版本
内存查找:首先找到向日葵用户进程,然后使用procdump等工具转储进程内存
使用Winhex打开转储文件,按下Ctrl+Alt+X快捷键打开十六进制值搜索功能,搜索十六进制值66617374636F646522203A20226b,即可找到本机识别码。
搜索十六进制值636F6C6F725F65646974203E,使用F3快捷键可以跳到下一个匹配处,多跳2次即可找到本机验证码。
免杀
dllmain上线问题
根据微软官方文档,不能在 DllMain 中调用直接或间接尝试获取加载程序锁的任何函数,否则将导致死锁,这意味着不能使用 Sleep(Ex)、WaitForSingleObject 等有等待延迟的函数,此外微软还列举了 DllMain 中不能使用的一些函数如直接或间接使用 LoadLibrary(Ex)、GetStringTypeA 等,CreateProcess 和 CreateThread 可以调用但存在风险:
dllmain里面不能创建进程这个问题是一个坑。
也就是说创建线程申请内存加载shellcode需要在导出函数里面操作,不能再dllmain里面直接操作,需要找到第一个执行的函数就能行,但是麻烦,我们可以可以新定义一个函数来申请内存,加载到内存中,在dllmain中只需要去用CreateThread来调用它就可以了。
fscan免杀
参考https://www.wjlin0.com/archives/1705092744971 ,改文章的思路是将fscan编译成dll然后编写加载器加载dll实现分离免杀,通过该文章了解一下如何将go项目编译成dll格式。fscan编译成dll需要将main.go改成如下格式:
百度了一下如何将一个go项目编译成dll格式,得到的答案是注释掉main函数并且导出需要的函数就可以了。
而上述代码中导出的几个函数并不是fscan项目中的函数,通过查询得知:
1.DllCanUnloadNow
该函数通常用于 COM(Component Object Model)库,询问 DLL 是否可以从内存中卸载。如果 DLL 可以安全卸载,则返回值应该为 S_OK,否则返回 S_FALSE。在 Go 中这个函数可能不会做任何事情,但在定义接口时仍然需要。
2.DllGetClassObject
该函数是 COM 中的一个标准接口,用于获取一个类工厂对象。通常情况下,这个函数会返回一个接口,通过这个接口可以创建 COM 对象。在 Go 中,空的 DllGetClassObject 函数通常用于确保 DLL 编译时不会出错,即使实际的实现为空。
3.DllRegisterServer
这个函数用于在系统中注册 DLL,主要用于注册 COM 服务器。在系统调用这个函数时,DLL 会在 Windows 注册表中写入一些必要的信息,使得该 DLL 可以被系统或其他程序识别和加载。
4.DllUnregisterServer
与 DllRegisterServer 相反,DllUnregisterServer 用于从系统中注销 DLL,清除之前在注册表中的信息。
而对于原来的main函数中的代码写到init函数中就可以了。
init 函数在 Go 程序启动时自动运行,无需显式调用。在 DLL 中,这意味着每当 DLL 被加载时,init 函数都会执行。
go语言导出函数
Go 使用 //export 注释来标记导出函数,使得它们可以从 DLL 中调用。例如:
package main
import “C”
//export Add
func Add(a, b int) int {
return a + b
}
编译dll
更改完代码后,通过如下命令即可编译dll
编译x32
默认情况下编译出来的dll是64位的。
使用如下命令想编译32位dll发现得到的还是64位的:
经过查询得知,默认情况下,Go 在 Windows 平台上编译 32 位和 64 位应用程序是支持的。如果你在其他平台(如 macOS 或 Linux)上交叉编译 32 位 Windows DLL,可能需要安装 mingw-w64 或其他 Windows 交叉编译工具链。
由于当前是mac环境,所以需要安装mingw-w64。
mingw-w64 是一套用于 Windows 的交叉编译工具链,它可以生成 32 位和 64 位的 Windows 可执行文件或库。你可以使用 Homebrew 安装它,通过以下命令:
安装完成后,mingw-w64 会提供多个前缀的编译器,如:
安装完 mingw-w64 后,你可以通过指定 CC 环境变量使用 32 位编译器:
你可以通过以下命令检查是否安装成功并支持 32 位编译:
开发
Go 交叉编译各系统编译命令
CTF
PWN——GCC编译中几种保护打开和关闭的参数
铱迅安全运维审计系统后渗透
数据库配置路径:
/opt/freesvr/web/htdocs/freesvr/audit/include/db_connect.inc.php
重置管理员密码:
重置完web登陆 admin 12345678