如何检测系统中文件上传下载活动及对应文件名?
检测系统上传/下载文件名的有效方法
以下是几个比单纯查看网络流量更精准的方案,覆盖系统、文件、应用多个层面:
1. 系统级审计日志监控
Windows系统
利用Windows事件日志追踪文件操作,重点关注事件ID 4663(文件被访问)和事件ID 5145(网络共享访问),通过过滤进程名(如chrome.exe、firefox.exe、ftp.exe)和操作类型(写入/上传、读取/下载),提取事件中的Object Name字段获取文件名。可以用PowerShell批量筛选:
Get-WinEvent -FilterHashtable @{LogName='Security';ID=4663} | Where-Object {$_.Properties[10].Value -match 'Write|Upload'} | Select-Object TimeCreated, @{Name='Process';Expression={$_.Properties[1].Value}}, @{Name='FileName';Expression={$_.Properties[6].Value}}
Linux系统
配置auditd审计规则,监控与网络进程关联的文件读写操作。比如添加规则追踪所有进程的文件上传/下载行为:
auditctl -a exit,always -F arch=b64 -S open -S write -F pid=$(pgrep -d ',' chrome firefox ftp) -k file_transfer
之后通过ausearch -k file_transfer查看审计日志,从中提取文件名和进程信息。
2. 文件系统变化监控
直接追踪下载目录、临时目录的文件创建/修改事件,适合捕捉本地生成的下载文件或准备上传的文件:
Linux
使用inotify-tools实时监控指定目录:
inotifywait -m -e create,move,modify /home/user/Downloads /tmp
该命令会输出目录内的文件变动,包括新创建的下载文件。
Windows
用PowerShell的FileSystemWatcher脚本监控目标目录:
$watcher = New-Object System.IO.FileSystemWatcher $watcher.Path = "C:\Users\user\Downloads" $watcher.IncludeSubdirectories = $true $watcher.EnableRaisingEvents = $true Register-ObjectEvent $watcher "Created" -Action { Write-Host "下载文件: $($Event.SourceEventArgs.Name)" }
3. 应用层钩子与进程拦截
针对特定应用(浏览器、FTP客户端、云同步工具),通过钩子技术直接获取上传/下载的文件名:
- 浏览器:开发浏览器扩展,监听
XMLHttpRequest或Fetch请求中的Content-Disposition响应头(下载),或表单提交中的filename参数(上传)。 - 桌面客户端:用Frida等动态插桩工具,hook进程的文件操作函数(如
fopen、WriteFile)或网络请求函数,提取文件名。例如hook Chrome的文件上传逻辑:
// Frida脚本示例 Interceptor.attach(Module.findExportByName("chrome.exe", "WriteFile"), { onEnter: function(args) { var filePath = args[1].readUtf16String(); if (filePath.includes("Uploads")) { console.log("上传文件: " + filePath); } } });
4. 解密网络流量并解析
如果之前看网络流量无效,大概率是HTTPS加密导致无法读取文件名。可以用本地代理工具(如mitmproxy)解密HTTPS流量,解析请求/响应中的文件名:
- 下载场景:查看响应头的
Content-Disposition字段,通常包含filename参数。 - 上传场景:查看请求体中的表单字段(如
file参数的文件名)或Multipart请求的边界内容。
注意:此方法需要配置信任代理证书,仅可用于合法合规的场景。
内容的提问来源于stack exchange,提问作者Janani Veeramanikandan
相关产品推荐
相关产品推荐

