前言

公司的知识分享会轮到我了,怎么做ppt还没想清楚,先把要说的先写好吧()

应急响应

僵尸木马远控事件

唉去应急过的企业都是中小企业,不说安全设备了,有的连像样的交换机都没有,只有一个路由器,面板都不知道怎么进
能拿到的信息就是通报上给的ip,然后对着ip查的一些威胁情报
那么首先,依照惯例,先查外连

1
netstat -ano | findstr ip
红框那一列就是pid


有东西的话定位到,然后在交换机或者路由器上设置阻断规则,把恶意ip全阻断了
根据pid定位进程名

1
tasklist /FI "PID eq 4992"


找到进程名然后就是找他的位置了

任务管理器查找进程

可以直接打开任务管理器找,在详细信息那里,找到后右键找路径

命令行查找进程

cmd

1
dir C:\a.exe /s /b

这个是当时有次渗透,找不到传的马子放哪了,然后用的命令,后来想到这个适用于前面没查出外连,但是威胁情报上面显示恶意样本数很少的情况,直接用这个命令查就行

powershell

1
Get-Process steam | Select-Object Pat


那找到了,之后就是删除了,然后再看看是否有持久化措施,并对其一一清理
找不到案例了,毕竟事件也不是那么多,也没有每个都查出来()
查木马就拿之前一次经历说,是个伪装成notepad++的木马,对着威胁情报上面的样本名,用everything找到的


然后本来我说是要远程给他再看看还有没有别的东西,但是网信办的那个老师说不用了,到这就行,然后写报告()

持久化排查并清理

要排查持久化的例子,那就只能用之前疾控培训那边的了,是个勒索病毒的案例
一开机,啥都没有,黑屏

首先先恢复桌面,先快捷键打开任务管理器(esc+shift+ctrl)

文件->运行->explorer

启动两次,就能启动桌面了

排查思路

发现会周期性的kill掉explorer
说明有个计划任务在执行这个操作,那就排查计划任务
先看看计划任务,看完信息再删

清理

win+r启动任务计划程序

1
taskschd.msc

根据环境特点以及它的下一次运行时间判断这就是要找的计划任务

查看可知,他是要运行图中显示程序

然后没什么可利用信息,这个计划任务可以删除了
这个文件夹中有两个程序

经尝试,这个文件夹删不掉,那么就从注册表中删除
先查找

找到了一个

继续搜又找到一个

将这两个表项都删除以后,那个文件夹就能删了(不知道为什么与提示说的位置有点出入)
至此,持久化文件被删除完
恢复加密文件就有桌面上的diskgenuis

然后恢复文件

异常流量事件

排查思路跟查木马病毒一样的,接下来说个,在一次排查异常流量事件的遇到的一个,我觉得算是特殊的情况吧
比如拿到一个通报,事件类型是异常流量的,然后里面列举出了目的ip,按照惯例,先看看还有没连接这些ip,然后当时排查就是还有连接的情况
我用我自己电脑模拟一下

1
$ips=@('114.250.20.215','113.251.224.254','223.67.204.200','62.164.142.167'); Get-NetTCPConnection | Where-Object { $ips -contains $_.RemoteAddress } | Select-Object LocalAddress,LocalPort,RemoteAddress,RemotePort,State,@{Name='Process';Expression={(Get-Process -Id $_.OwningProcess -ErrorAction SilentlyContinue).ProcessName}}


这样定位到了进程嘛,然后一看进程(当时排查出现的是迅雷,但是进程名写的不是迅雷,后续排查才知道),这是磁力下载器(qbittorrent

迅雷

当时排查的时候,不知道具体什么情况,就对着通报的ip来查,然后定位到进程,是个这东西DownloadSDKServer,这里是我模拟的

知道是下载的东西,然后就看正在进行的下载任务(其实当时是有点手忙脚乱了,其实可以直接看任务管理器的,这样找更准确)


对方电脑上再运行的是迅雷,迅雷跟qbit不一样,看不到下载详情,只有

传了个wireshark上去抓包看了下,一开始不知道怎么查
看他那个迅雷还有在下载,就直接重启下载,然后看到多了很多http的包,ua头有Xunlei字段

1
http.user_agent contains "XunLei"


然后找到一些数据包,后续不懂怎么查了,但是因为是在下载前开的抓包,然后主机上没有再运行别的软件了,直接看udp协议的

1
udp


一堆请求下载服务器的数据包,然后往下划是加密的udp包–quic包

这些包被加密了,暂且不论是什么包吧,当时排查的时候我是直接对着通报里面的ip过滤流量

1
quic && (ip.addr==xxxxxxx or ip.addr==xxxxxxx or .......)

然后查出来有两个ip是在流量包里面的,我看了下,就那个人电脑的下载任务有17个
最大下载数如下

那就代表,异常流量有一种情况是磁力链下载的p2p通信

qbittorrent

那回到我电脑上,以qbit为例,排查就是没有迅雷那么困难,因为他能直接看到下载任务正在连接的ip

对着列表查就行,或者任务太多了,那就直接

1
2
3
4
5
$ips = '114.250.20.215','113.251.224.254'
Get-Process -Name qbittorrent -ErrorAction SilentlyContinue | ForEach-Object {
Get-NetTCPConnection -OwningProcess $_.Id
} | Where-Object { $ips -contains $_.RemoteAddress } |
Select-Object LocalAddress, LocalPort, RemoteAddress, RemotePort, State, @{Name='PID';Expression={$_.OwningProcess}}


这样就能看到实际的连接ip,要查用qbit是否有连接可疑ip就改变$ips的值就行
如果是用wireshark排查流出流量情况,也就是上传的流量就是

1
ip.src == 192.168.0.2 && (tcp.srcport==58812 or udp.srcport==58812) && !bt-dht


端口设置为58812是因为,程序默认设置是这个

这个的排查就比迅雷的要直观多了,毕竟他下载的进程名就是qbittorrent
然后按数据量来看,下磁力的时候,流出的数据也多的

工具梳理整合

暴露面梳理

七月份拿到名单,两百多个企业,头都大了,然后就写了脚本查企业信息的,数据来源是天眼查和爱企查
没有什么太高端的东西,纯爬虫的行为

企业信息

天眼查

就抓包发现,后端数据是通过js传输数据,懒得重新抓包了,就直接把程序中调用的接口的响应打印出来

拷打ai,让他把这个数据美化一下,这样就清晰的看到,从这开始就是想要的数据起始了

这里面就你觉得哪些有用,在写脚本的时候就提取哪些就行

然后就是按照你想要的数据去找嘛,企业基本信息的如上就是,查备案的话,更直接,是纯接口了,直接传json格式的数据,直接提取就行

然后找app信息

微信公众号信息

爱企查

爱企查同样也是用js传输数据,不过多了用Unicode编码了一下,要用的话,转码就行

思路都是一样的

最终效果



然后批量查,批量最多能查多少还不知道,最多的一次是,一次性查了77家,然后没被网站反爬干死

资产信息

根据api文档写的hunter、360quake、fofa的,fofa没测试可用性,因为api不让白嫖,主要是用hunter、360quake
hunter界面这样

查询之后的数据显示

然后导出,有以下几种格式可选

比如导出成txt,格式如下

感觉有点乱,但实际都是按列分好的
quake的界面以及查询后的数据显示是

本来我看就是网页版查是有显示备案号和备案主体这两列的,但是我用api查一直不显示,我以为是代码问题,后来就是用curl命令测试了一下,发现这两个字段返回的是空值,并且网页上,这两列也置空,多此一举了属于是

备案归集

通过上面的那些操作可以拿到些资产,但还不够嘛,然后就用one for all再跑子域名,one for all源码也是拷打ai加了个通知模式,因为是放服务器上跑,能一直运行,加个同事,是怕有时候线程太高啥的,然后内存炸了,整个机子宕掉了都不知道
跑完就多了很多子域名什么的嘛,然后就搞了脚本测活、备案归集、数据处理一下

1. 批量域名备案信息归集

  • 从 CSV 文件(OneForAll 输出格式)读取子域名信息
  • 查询每个子域名的 ICP 备案信息
  • 归集同主域名下的所有子域名、IP、端口等信息

2. 企业名称识别

  • 备案信息优先:优先使用 ICP 备案中的企业名称
  • 主域名备案查询:子域名无备案时,查询主域名备案

3. 系统类型简单识别

  • 邮箱或通信系统:检测邮件、SMTP、IMAP 等关键词
  • 门户网站:检测官网、产品、新闻等关键词
  • 应用系统:检测 OA、ERP、CRM、登录等关键词
  • 其他系统:无法明确分类的系统

4. 系统名称简单提取

  • 从网页内容中提取真实的系统名称
  • 支持从 <title><h1><h2> 等标签提取
  • 识别系统名称关键词(如”系统”、”平台”、”管理”等)

5. 企业白名单过滤

  • 根据企业名称列表进行匹配
  • 支持宽松匹配(关键词匹配)
  • 输出匹配和未匹配的结果分别保存

6. 域名存活检测

  • 过滤无法访问的域名(状态码非200)
  • 过滤错误页面(404、403、500等)
  • 过滤阻断页面和DNS解析错误

7. 钉钉通知功能

  • 任务开始、进度、完成通知
  • 支持频率限制和重试机制
  • 可选择性禁用通知

输出格式

匹配结果文件(自定义文件名)
1
企业名称|系统名称|系统类型|子域名|IP|关联域名|协议|访问地址|资产JSON
未匹配结果文件(not_matched_domains.txt)
1
企业名称|系统名称|系统类型|子域名|IP|关联域名|协议|访问地址|资产JSON
结果文件

效果如下

数据处理

然后这上面的文件要填充到表格里去,手动感觉太麻烦了,就搞了脚本来操作,不以这个文件为例了,因为之前写好了()

字段提取

测试文件如下

选择文件后,会识别分隔符,如果识别不到可以手动设置,然后自动读取表头信息

比如提取url和公司

文件如下

数据填充

这个功能就是服务于前面的,提取后的数据填充到对应的模板上面
源文件就是提取后的数据文件,然后再选个模板文件
比如模板文件是这样

选好文件后,然后要选择映射

然后点启用映射就行,映射情况如下

开始填充

填充好之后

模板管理

这个就是之前数据填充那边,将映射关系保存为模板之后查看的地方
界面如下

模板信息

网信办驻场

这里的工作可以粗略分为两类:写文档和应急
应急之前说了,现在讲讲写文档
很难受,要死这个通报改写,要先把市里面的通报改写成另个模板的,虽说不用所有结构都改,但是架不住量大啊,然后就是要编号,还要加水印图片,还多了要根据是实际情况写责令整改文件、授权书这些,然后要转换成pdf文档
大致流程就是这样
就按照流程然后写成工具自动化改写了
有时候会遇到一些bug,成因是com接口调用繁忙,上一次调用的句柄还未释放,然后就已经到下个通报改写的调用了,就会造成图片插入失败(实际没失败就是接口调用繁忙了,或者没保存,但是可以通过文档恢复)

但其实影响不是不大,毕竟本身这个操作就是需要我手动微调的,不过也分两种情况

  1. 文档里没有插入设置为浮于文字上方的盖章样式图片
  2. 插入了但没保存,打开后要另存为才行,如下图所示

    然后就是微调完,点击转换pdf的按钮,那个就是专门转换通报的

摸鱼

上班肯定打游戏啊,巅峰战绩,分配给我的三天的活半个小时不到干完了。。。。。然后被问了怎么那么快,好险是圆过去了。。。。
那空余时间就是拷打ai修下bug,然后打游戏
打游戏打着打着,经常忘记写周报,就拷打ai搓了个写周报的
界面长这样

运行结果

大致原理:
最初想法是,win+tab快捷键能看到打开的历史文件数据,他的数据来源是Windows活动历史数据库,然后就会遇到一些问题 :

  • SQLite数据库结构复杂 :微软没有公开完整的数据库架构文档
  • 表结构经常变化 :Windows更新时数据库结构可能改变
  • 数据关联复杂 :需要关联多个表才能获取完整信息
  • 二进制数据 :部分字段存储为二进制格式,需要特殊解析
  • API限制
    Microsoft Graph API :
    • 需要Azure AD应用注册
    • 需要企业级权限
    • 个人用户难以获取必要的API密钥
    • 有严格的调用频率限制
      Windows Runtime API :
    • 主要面向UWP应用
    • Python调用复杂,需要额外的COM组件
    • 功能有限,无法获取详细的文件信息
      那就替换方案,改成读取注册表 + 最近文件夹 + 文件系统,这样好操作

嗯大致就这么多