原文 by wooyun wiki

1.网络路径扫描

  • 服务器IP段遍历目录 DirBusterOpenDoor

  • 子域名定期收集 (Layer, subDomainBrute.py

  • 常见的子域名前缀 oa、zabbix、nagios、cacti、erp、sap、crm

  • 常见的管理后台路径关键字 axis2、solr、resin、hudson、jenkins、zenoss、splunk

  • 网站地图(产品大全--新上线)

  • 页面报错导致物理路径泄露(可以把类似 action=xx 的值替换成不存在的val,可能导致出错)

2.开发环境配置文件(BBScanweakfilescan)

  • svn /.svn/entries

  • git /.git/config

  • DS_Store 是MAC中用来存储这个文件夹的显示属性的 /.DS_store

  • WEB-INF /WEB-INF/web.xml(1个项目有1个WEB-INF目录,WEB-INF是要放在项目根目录下的,但需要限制访问)

  • JetBrains /.idea/workspace.xml

  • .bashrc .bash_history .bash_profile .bash_logout bash相关文件

  • error.log access.log .mysql_history 访问日志以及mysql操作日志

  • github 上项目泄漏邮箱帐号密码(通过公司部署在外网的outlook web app 可以直接登录内部邮箱)

SVN导致的漏洞主要有两类:

  • SVN未设置密码并允许匿名访问。

  • 发布代码时使用了SVN co并且未限制对服务器上的.svn文件夹的访问。

SVN未设置密码并允许匿名访问将导致重要的源代码、数据库连接信息和服务器配置信息等敏感信息泄露,进而可能将导致服务器沦陷。

发布代码时使用了SVN co时服务器将导出一个带.svn文件夹的目录树,.svn文件夹中有包含了用于版本信息追踪的“entries”文件。如此时未限制对服务器上的.svn文件夹的访问便可被用于摸清站点结构。svn更新至1.7+ .svn/entries目录就不包含文件目录列表了。

更严重的问题在于,SVN产生的.svn目录下还包含了以.svn-base结尾的源代码文件副本(低版本SVN具体路径为text-base目录,高版本SVN为pristine目录),类似 /.svn/pristine/bd/bda5088fa8e29d1bxxxxxxxxxxxxx.svn-base

尝试请求 *.php.svn-base, 如果服务器没有当成php 做解析,黑客则可以直接获得文件源代码。如果被当作 php 解析了,可能看到php错误信息(看到真实路径)或内容为空白,存在文件解析漏洞,找地方上传 xxx.php.gif 也许就可以直接得到webshell了。

WEB-INF是Java的WEB应用的安全目录。如果想在页面中直接访问其中的文件,必须通过web.xml文件对要访问的文件进行相应映射才能访问。一般情况,jsp引擎默认都是禁止客户端访问WEB-INF目录的,Nginx 配合Tomcat做均衡负载或集群等情况时,Nginx不会去考虑配置其他类型引擎(Nginx不是jsp引擎)导致的安全问题而引入到自身的安全规范中来(这样耦合性太高了),这就是漏洞产生的原因。WEB-INF下某目录放着编译后的.class文件,经反编译可能造成源码泄漏。

3.文件下载

  • 能把脚本代码文件下载的条件,比如 nginx 没有启用 fastcgi 来解析 php,那么访问 php 文件将会直接下载文件,即造成源码泄露;或者apache sh 等脚本没有放在设定的 cgi-script 目录内,也会直接下载。注意:linux 操作系统对大小写敏感,windows/OS X 不敏感。

  • 对于可下载压缩包的探测,自动化角度来说,更多地是看返回的Content-Type 头,但会出现不少误报,比如在返回头命中的情况下(e.g application/x-compress)返回的是HTML页面。注意加上 Range:bytes=0-9999 请求头,避免压缩包太大,只取返回的部分数据即可。

4.关于服务器的host绑定的不安全因素

很多网站为了方便管理和节省服务器成本,将内网管理站点和外网站点放置在同一服务器下,使用一机多站来进行隔离.很多情况下一台服务器安装两块网卡,分别接入外网和内网,方便公网访问公开站点,内网访问管理站点.并绑定host.

例如:

xxx.com为公开站点,并且指向IP为公网网卡.

admin.xxx.com为管理站点,并且指向内网网卡.

看上去好像管理站点admin.xxx.com必须在内网才能访问但是却忽略了host绑定的问题.

但是当我们将外网IP地址强制绑定到admin.xxx.com的时候web服务器又没有做来源检查,那么我们就可以通过外网访问到本来应该只有内网才能访问的管理站点了.并且由于是内网站点很多情况下管理员为了方便都是弱密码,或者直接未授权访问等

5.暴力破解

  • UCenter 默认口令

  • WordPress 用户密码爆破

  • 无验证码/验证码设计缺陷(多次登录不变,只有几个值,且不会失效)

  • 没有登录失败次数限制(即使有限制,也只是说对一个用户的尝试限制,如果我们一次性跑多个用户,
    每个用户只尝试下限值,则不会触发防护,而且可能可以爆破出一些用户的密码)

  • 对于远程服务需要合适的字典档或者结合对方的一些敏感信息来生成字典档,通过程序不断遍历字典档的用户名密码来尝试

  • 对于本地程序需要 ollydbg, winhex, ida, uedit32 等逆向和二进制修改工具的配合

  • 对于md5加密串的破解,需要借助一些数据库如 cmd5.com、somd5.com,或者借助高性能并发计算设备破解,比如多路GPU,http://hashcat.net/, oclHashcat

    hashcat64.exe -m 200myql.hashpass.dict //破解MySQL323类型
    hashcat64.exe -m 300myql.hashpass.dict //破解MySQL4.1/MySQL5类型
  • John the Ripper除了能够破解linux 外,还能破解多种格式的密码。

    Echo 81F5E21E35407D884A6CD4A731AEBFB6AF209E1B>hashes.txt
    John –format =mysql-sha1 hashes.txt
    john --list=formats | grep mysql //查看支持mysql密码破解的算法

在加密算法的选择和使用上,有以下最佳实践:

  • 不要使用ECB模式;

  • 不要使用流密码(比如RC4);

  • 使用HMAC-SHA1代替MD5(甚至是代替SHA1);

  • 不要使用相同的key做不同的事情;

  • salts与IV 需要随机产生;

  • 不要自己实现加密算法,尽量使用安全专家已经实现好的库;

  • 不要依赖系统的保密性;

当你不知道如何选择时,有 如下建议:

  • 使用CBC 模式的AES256 用于加密;

  • 使用 HMAC-SHA512 用于完整性检查;

  • 使用带salt 的SHA-256 或 SHA-512 用于 Hashing;

Reference

2.5代指纹追踪技术—跨浏览器指纹识别