Windows Server+IIS+PHP 配置
Windows Server 不使用 xmapp、XP 面板支持 PHP 的方法。
首先安装 IIS,新建一个网站
然后点开这个网站
打开处理程序映射
添加模块映射
将所有*.php 的路径映射到 php-cgi.exe 程序进行处理。
测试访问。
xiaohack博客专注前沿科技动态与实用技术干货分享,涵盖 AI 代理、大模型应用、编程工具、文档解析、SEO 实战、自动化部署等内容,提供开源项目教程、科技资讯日报、工具使用指南,助力开发者、AI 爱好者获取前沿技术与实战经验。
Windows Server 不使用 xmapp、XP 面板支持 PHP 的方法。
首先安装 IIS,新建一个网站
然后点开这个网站
打开处理程序映射
添加模块映射
将所有*.php 的路径映射到 php-cgi.exe 程序进行处理。
测试访问。
将近三周的时间开发,目标是针对小白都能上手的Windows应急工具,完全基于红队人员攻击思路以及蓝队应急流程开发的Windows应急响应工具,目前V2.0的版本基本上已经ok了没有问题,下面是工具介绍,目前网上基本上没有比这个更好用且更完善的工具,计划是在V3.0计划兼容Winserver2008以下版本,另外加入内存马查杀机制。因为初衷就是想轻量,如果工具过大就违背了这个工具的初衷。
目前工具设置需要授权码,计划是三月一次授权。
Cr7crwBXfh2AHVMh/RmH7w==
// 后门用户迁移4732时间id日志提取
func FetchAndStoreBackdoorUsers(db *sql.DB, startTime, endTime string) error {
// 动态构建 PowerShell 命令,使用传入的开始和结束时间
psCmd := fmt.Sprintf(`[Console]::OutputEncoding = [System.Text.Encoding]::UTF8;
$startTime = '%s';
$endTime = '%s';
Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4732; StartTime=$startTime; EndTime=$endTime} -MaxEvents 200 |
ForEach-Object {
$xml = [xml]$_.ToXml()
$subjectSid = $xml.Event.EventData.Data | Where-Object { $_.Name -eq "SubjectUserSid" } | Select-Object -ExpandProperty '#text'
$memberSid = $xml.Event.EventData.Data | Where-Object { $_.Name -eq "MemberSid" } | Select-Object -ExpandProperty '#text'
$groupSid = $xml.Event.EventData.Data | Where-Object { $_.Name -eq "TargetSid" } | Select-Object -ExpandProperty '#text'
function Get-NameFromSid($sid) {
try {
return (New-Object System.Security.Principal.SecurityIdentifier($sid)).Translate([System.Security.Principal.NTAccount]).Value
} catch {
return $sid
}
}
$subjectName = Get-NameFromSid $subjectSid
$memberName = Get-NameFromSid $memberSid
$groupName = Get-NameFromSid $groupSid
"$($_.TimeCreated)###$($_.Id)###$subjectName###$memberName###$groupName"
}`, startTime, endTime)
// 调用 runPowerShellCommand,它会返回一个包含输出行的切片和错误信息
lines, err := runPowerShellCommand(psCmd)
// --- 错误处理部分 ---
// 如果 PowerShell 命令执行失败
if err != nil {
// 检查错误信息是否包含“No events were found”
if strings.Contains(err.Error(), "No events were found") {
// 如果是这个特定错误,返回自定义的友好错误信息
return fmt.Errorf("无用户组迁移相关事件id4732")
}
// 如果是其他错误,则返回原始错误
return fmt.Errorf("执行PowerShell命令失败: %w", err)
}
// 如果没有错误,但返回的行切片是空的,也视为没有找到事件
if len(lines) == 0 {
return fmt.Errorf("无用户组迁移相关事件id4732")
}
// --- 错误处理部分结束 ---
tx, err := db.Begin()
if err != nil {
return err
}
defer func() {
if err != nil {
tx.Rollback()
}
}()
// 清理旧数据
_, err = tx.Exec(`DELETE FROM backdoor_users`)
if err != nil {
return err
}
stmt, err := tx.Prepare(`INSERT INTO backdoor_users (time_created, event_id, subject_name, member_name, group_name) VALUES (?, ?, ?, ?, ?)`)
if err != nil {
return err
}
defer stmt.Close()
for _, line := range lines {
if len(strings.TrimSpace(line)) == 0 {
continue
}
parts := strings.SplitN(line, "###", 5)
if len(parts) < 5 {
continue
}
_, err = stmt.Exec(parts[0], parseInt(parts[1]), parts[2], parts[3], parts[4])
if err != nil {
return fmt.Errorf("插入后门用户日志失败: %w", err)
}
}
return tx.Commit()
}基本上所有的日志模块的处理都是基于powershell来实现的,所以在winserver 2008及以下的版本不安装工具是无法使用的
因为该工具是日志文件数据提取保存,会从db文件中读取已经保存的部分数据,在检索速度上效果还是可以的,最大的优势是直接根据事件详情提取需要的字段,避免从Windows自带的检索功能中逐条查看,效率大大提高。



目前版本为V2.0,因为在实战中1.0的出现部分bug,已经在2,0版本中修复了,防火墙日志图片仅供参考


目前支持一键跳转,本来是计划做一个聚合类的导航栏,奈何go语言实现太麻烦,略微有点儿鸡肋性价比低就实现的跳转。

在风险主机出网的条件下是支持使用ChatAI模块的,直接在Deepseek购买api量即可,总的来说完全够用。


目前代码位置固定仅支持每分钟查询4个ip。

目前在本机三层靶场测试效果还可以,基本上受控主机上测试效果还是可以的,基本上可以覆盖溯源攻击路径,不过该工具还是基于windows日志来实现的,前提是日志审核策略需要开启,目前基本上一般业务系统有做过等保和加固的常见的日志审核策略是满足需求的。并且AI的一键分析是基本上能够满足定位分析攻击路径的。