事件背景
某客户被通报存在黑链页面显示招租广告,而且只有通过百度跳转才会显示下图页面:
排查过程
1、前期常规排查,第一反应就是去服务器本地寻找黑链页面"/news/article/detail/nwnsaii9.html",但是主机web目录翻遍了硬是没有找到黑链页面nwnsaii9.html,甚至连相关目录都没有找到。
2、于是重新梳理思路从跳转入手,测试直接访问"/news/article/detail/nwnsaii9.html",发现自动跳转访问“www.8y818.com”,于是点击查看源代码发现实际是nginx 404页面中存在恶意跳转的js代码。
3、主动访问异常Js页面,发现又是一个跳转访问,跳转其中一个逻辑是判断来源页面若是包含“baidu.com”就会跳转指定页面(黑链),若不是就回显404.html。这就正好能解释为啥只有从百度跳转才会看到黑链页面了。瞬间信心大增,说明已经逼近真相了!
4、访问域名"https://www.788189.com/index/Code.html?channelCode=seo88"测试果然就是被通报的黑链页面,整体跳转逻辑也已经非常清晰了。
5、重新梳理跳转逻辑如下,仔细分析发现nginx404报错页面,说不定最初寻找的黑链页面nwnsaii9.html确实是不存在,只是利用nginx 404报错页面实现跳转而已。
6、随便访问不存在页面/news/article/detail/111测试,果然也会跳转访问恶意js页面,其状态码为503。
7、既然知道跳转逻辑,那么只要找到nginx“404 not found”页面,修改一下回显内容即可解决问题,立即排查nginx 配置文件。但是其配置页面并没有配置404、503等状态码的页面,难道是硬编码了?
8、思路一下牵引至程序本身,服务器本地nginx程序版本查看是1.24.0,并且和官网文件对比nginx程序完全一致,并未被篡改的情况,也没有发现异常dll劫持的情况,一下晴天霹雳,感觉又进入死胡同。
9、一说到版本似乎有点不对,我之前看到nginx报错版本为1.24.1,但是服务器本地版本为1.24.0啊,难道不是本地的回显?
10、赶紧排查nginx代理配置,发现/video、/app以及/news等多个接口均跳转至“http://115.92.119.111:8193”,主动访问“http://115.92.119.111:8193”发现nginx报错版本为1.24.1瞬间大喜,这不就是黑链的跳转页面嘛。
11、这下一切清晰明了,删除所有跳转配置,网站访问就恢复正常了,这里不得不夸赞一下小黑子,这个黑链思路挺清奇,想必是一个思维灵活的小黑子。
总结
1、回过头来想其实本次黑链原理实现比较简单,只是小黑子设置的障眼法太多,容易使人迷失排查方向,梳理清楚跳转逻辑问题也就迎刃而解了;
2、事后复盘,发现nginx代理跳转单纯从浏览器侧调试是无法看到访问外部地址的,但是可以抓包实现。