2017-06-09 驻场安全测试总结

Table of Contents

最近为客户驻场一周做了一次安全测试,测试的目标有大概接近 100 多个网站,覆盖了各类系统、各种语言(ASP、ASPX、PHP、JSP 等等),本次目标是发现这些网站的各类漏洞,但不做深入的渗透。

这次列表中的很多网站访问量其实很少,也非关键系统,不过为了不被安全通报,后端都塞了一堆安全设备,并且还都屏蔽了 Web 的错误信息。

一开始我是拒绝参与这次安全测试的,后来看了一下目标覆盖了各种场景,是难得的合法实战机会,因此在去现场前的一周,还特意去复习了各类技术作为热身。这里我主要记录一些本次出差测试的心得体会。

1. 当遇上安全设备

一般后端都有一些抗 DDoS、WAF 设备,本次目标是找到漏洞,所以我不硬碰硬,清楚常规的安全设备(WAF 一类)的缺陷,比如安全设备防护不了逻辑漏洞,那么我就先从逻辑漏洞下手,常见的点一般是短信验证、越权访问、未授权访问等等。

有安全设备的网站我一般都避免做扫描,抗 DDoS 设备和 WAF 都有可能被触发,会导致扫描结果不精准、IP 被拉黑。另外管理员容易收到告警,可能会进入与管理员对抗状态(管理员事先不知道要做安全测试)。

2. 了解网站类型

比如新闻、医院、美容,这类网站常被搞黑产的拿来做黑 SEO,比如挂博彩、恶意广告等,所以我先用 Google 看是否存在博彩页面。

同时这也是判断网站是否安全的重要依据。博彩一般是用漏洞批量挂上去的,也就意味着网站现在或之前可能存在某种通用漏洞,并且还被黑了。有几个这类目标,我找到遍历目录的地方,里面还躺着别人上传的 Webshell。

3. 当能检测到漏洞存在,却无法利用时

我在检测到某目标存在 Struts2 S2-045,但无法继续利用(关键字符被作为特征拦截)。

换个角度来思考,假如我是做应急响应的,当时应急时临时加的防护规则可能并不严谨,所以就有很大被绕过的可能性,多尝试些其他函数或者拼接字符串。最后竟然是“eval”函数没拦截,然后修改 Payload,各种拼接字符串就成功利用。

4. 登录入口

  1. 尝试弱口令,比如用户名密码都是 admin。测试中这种情况偶尔能遇到;
  2. 不输任何用户名和口令,直接点”登录“。还真就遇到过;
  3. 1' or '1'='1,万能密码也遇到过;
  4. 用户名和密码都是 test,一定是开发员忘记删除测试帐号了。

5. 用开发经验来判断这网站属于什么水平的程序员开发的

可以根据 URL 参数命名、页面文件命名、网站架构、JS 代码等地方作为判断依据。三流程序员写的网站一般到处是漏洞,即便有 WAF 都拦不完;二流程序员爱用框架,用框架的情况下基本上不用测试 XSS 这类漏洞了,或者找一些已公开的框架漏洞来测试;一流程序员开发的网站,漏洞更多是容易被忽视的逻辑问题,以及正常用户不会找到的死角。

6. 漏洞不过时

平时要多做技术积累,无论新旧。我觉得至少学会 2003 年至今的所有攻击手法。没有过时的漏洞,只有过时的系统,实战中常常遇到多年不更新的系统,以及早被公司遗忘的服务。