一年一度的hvv又要开始了,根据往年的防守经验,于是写了一个批量域名溯源分析工具,用于提升计算机安全工程师对红队攻击的反查追踪能力。
0X01 成果展示
1.在文本框中输入域名
2.点击开始溯源按钮,然后等待查询成功窗口出现后,点击导出EXCEL表格
3.对备案查询一列进行去重过滤,我们可以看见所有的单位名称,甚至发现某些域名的主体单位是利用姓名注册的
0X02 何谓域名溯源
在hvv中,我们将会捕获大量的攻击IP地址,C2地址,通过IP地址的域名反查,我们可以获得该IP地址的域名。这时候如果红队人员曾将该域名用于ICMP备案,或者红队人员使用公司的网络进行渗透测试时,我们可以根据域名的历史备案信息获得对应单位名称,下面我将会通过磐石行动一个例子去溯源追踪攻击单位。
1.如下所示,某位蓝队防守人员,分享了情报地址182.9*.**9.69
2.我们可以根据威胁情报,确认该IP为来自阿里云的恶意地址,存在扫描、漏洞利用的攻击行为,但是很可惜的是,在微步的域名反查中,我们未能发现该IP地址曾经绑定过的域名
4.此时,我们可以通过佛法来对资产进行扩充,然后发现artificial.grassla******lat.com这个域名的SSH服务
5.于是我们利用站长之家的历史备案,便获得了主办单位名称为XXXXX互联网有限责任公司
0X03 追踪过程的困难点
如步骤0X01中磐石行动的例子所示,我们可以利用站长之家的历史备案手工查询,但是真实的国家级hvv中,每天我们可能要查询的域名数以万计,难道依旧手工一个个查询不成?
这时估计会有师傅说,我们可以撰写一个爬虫,调用站长之家的API接口,这里我们可以简单看下价格,如果师傅们能够接受一天几百元的API调用,那我就没有什么想说的了
所以接下来,我们可以看下站长之家的历史备案查询机制,通过XHR过滤,定位的红色方框里的接口
然后我们看下传参的系数,和返回的Response数据
正常的思路,便是这里直接构造数据包发起请求,然后利用正则表达式处理html数据即可,但是却请求失败,burp的抓包如下所示,可以发现后端对前端的请求进行了验证。
再次回到前端,可以猜测http请求的构造方式应该时在这两个js文件中
可以看见调用函数为Query()
可以发现js文件已经被加密,我们无法看见具体是发送了怎样的http请求
所采用的加密方法为jsjiami.com v7版本
先后去该官网上,github上,必应上,均没有找到针对最新js7破解的工具
于是决定手工破解,这里过程十分复杂,我这里给出四个关键参数和关键方法,用于构造http请求头
其中ts为时间戳,token为key和ts的MD5加盐式加密,rd为随机值,key为特殊算法需要进行破解,这里可以展示下利用C#编写的破解代码实现,具体源码打了马赛克,主要考虑到破解传播别人的程序可能会面临刑事诉讼的问题,感兴趣的师傅可以自行破解。
0X04 注意事项
考虑到该程序可能会因为破解站长之家的API,会引来法律诉讼和牢狱之灾,该程序只是展示给大家看,感兴趣的师傅可以自行去破解jsjiamiv7.0的算法,开发对应程序。