信息泄露

总结常见信息泄露问题

信息泄露

攻击者要入侵一个网站,首要的就是收集目标更多的信息,攻击者获取这些信息之后可以以更低成本攻击系统。

主机信息

如果攻击这想要攻击服务器主机,首要的操作就是收集服务器的弱点信息,这些信息包括以下几点:

  1. 子域名信息

  2. 端口信息

  3. 域名注册信息

  4. 网站后台地址

  5. 网站架构探测

  6. 服务器路径信息

通过子域收集可以使得攻击者迅速发现更多目标主机,从而能挖掘出更多弱点信息,而通过对一段端口或者指定端口扫描后,攻击者可以知道目标提供了那些服务,再根据服务进行进一步攻击。而在域名注册信息中,攻击者可以通过社工库反查管理员信息,推测其常用账号密码,进行撞库尝试登陆网站后台,并且得到管理员信息后还可以通过钓鱼等方式来进行攻击,对于攻击者来说,网站后台拥有的权限更大,所以攻击者通过寻找网站后台地址来进行进一步操作,组合其它漏洞更有可能Get shell,同样的,攻击者对网站架构、指纹信息进行探测,也便于其进一步攻击。同样的,攻击者通过上传图片或者xml限制或删除不完全,或者第三方服务解析漏洞报错信息友好这些都会泄露服务器路径信息

源码泄露

当代码文件较多时,FTP上传比较慢,有些开发人员就先将代码打包压缩后上传到服务器,上传成功后再去服务器解压,这样虽然解决了上传速度慢的问题,但是却留下了安全隐患,当目录权限配置不严格时,攻击者得以下载该压缩包,就可以通过代码审计进行进一步攻击。

  1. Git源码泄露

  2. SVN源码泄露

  3. hg/Mercurial源码泄漏

  4. CVS泄露

  5. Bazaar/bzr泄露

  6. .DS_Store文件泄露

  7. 网站备份压缩文件、配置文件泄露

  8. WEB-INF/web.xml泄露

Git源码泄露

当开发者在一个空目录执行git init时,Git会创建一个.git目录,这个目录包含所有Git存储和操作的对象,如果想备份或复制一个版本库,只需要把这个目录复制到另一处就可以了,开发者发布代码时,如果没有将.git目录删除,直接发布到了运行目录中,攻击者就可以通过这个文件夹恢复源代码。

泄露内容:

  1. 所有该项目的源代码

  2. 私有仓库的地址

  3. 配置信息

  4. 所有commiter的邮箱账号信息

  5. 代码中可能会有连接数据库活其他内部的账号密码

利用方法:

  1. 下载整个目录,然后使用git命令回滚整个项目:

    wget -r --no-parent --mirror http://www.example.com/.git
    cd www.example.com && git reset --hard
  2. 自动化利用脚本:

    • dvcs-ripper (基于perl的工具,除了git还支持很多版本管理系统,使用方法:rip-git.pl -v -u http://www.example.com/.git/

    • GitHack(lijiejie师傅开发的利用脚本,使用方法:GitHack.py http://www.example.com/.git

漏洞案例:

修复建议:

一般基于MVC的现代WEB框架都不会直接挂载文件, 但如果是基于PHP,ASP等语言的项目, 还是会存在安全隐患,虽然可以通过配置WEB服务器(apache/nginx等)来拒绝对.git路径的访问, 但也会出现被意外绕过的风险,最好的办法就是在项目新建一个www目录来存放源代码文件。

SVN源码泄露

SVN(Subversion)是一个开放源代码的版本控制系统,与使用Git版本控制器类似,很多开发者网站安全以似不足,代码放到生产环境后,没有清理SVN的一些信息,导致SVN残留,因此攻击者可以下载网站源码。

泄露内容:

  1. 所有该项目的源代码

  2. svn仓库的地址

  3. svn仓库所属用户的用户名

利用方法:

  1. 下载目录,然后回滚:

wget -r --no-parent --mirror http://www.example.com/.svn
cd www.example.com && svn revert --recursive .
  1. 自动化利用脚本:

    • dvcs-ripper (支持旧版和新版的svn,使用方法:rip-svn.pl -v -u http://www.example.com/.svn/

    • Seay-svn (基于Windows平台)

漏洞案例:

修复建议:

同git

hg/Mercurial源码泄漏

与git类似,hg在初始化项目时, 会在项目的根目录下创建一个名为.hg的隐藏文件夹,里面包含了代码和分支的修改记录和开发人员的相关信息。

泄露内容:

  1. 项目源代码

  2. 项目仓库地址

  3. 可能会存在仓库的用户名

利用方法:

  1. 手动利用,下载+回滚:

    wget -r --no-parent --mirror http://www.example.com/.hg
    cd www.example.com && hg revert
  2. dvcs-ripper (使用方法:rip-hg.pl -v -u http://www.example.com/.hg/

修复建议:

同git

CVS源码泄露

cvs项目在初始化(cvs checkout project)的时候, 会在project目录下创建一个名为CVS的目录,其中保存了各个文件的修改和commit记录. 通过此目录可以获取代码的历史版本, 其中两个关键文件为:CVS/RootCVS/Entries, 分别记录了项目的根信息和所有文件的结构。

泄露内容:

  1. 源代码

利用方法:

  1. bk clone http://url/name dir
  2. wget -r --no-parent --mirror http://www.example.com/CVS
    cd www.example.com && cvs diff *
  3. 直接访问url

  4. dvcs-ripper (支持旧版和新版的svn,使用方法:rip-cvs.pl -v -u http://www.example.com/CVS/

漏洞案例:

修复建议:

在目标服务器上删除CVS相关目录或者限制对CVS相关目录的访问。

bzr/Bazaar源码泄露

bzr在初始化项目时(bzr init/init-repo),会在项目根目录产生名为.bzr的隐藏目录, 同样暴露了源代码和用户信息。

泄露内容:

  1. 源代码

  2. 仓库地址

  3. 开发者信息

利用方法:

  1. 命令行回滚:

    wget -r --no-parent --mirror http://www.example.com/.bzr
    cd www.example.com && bzr revert
  2. dvcs-ripper (使用方法:rip-bzr.pl -v -u http://www.example.com/.bzr/

修复建议:

.DS_Store文件泄露

.DS_Store文件是MAC系统用来存储当前文件夹显示属性的,这些文件本意是给Finder使用的,其中包含一些目录信心,如果没有删除,攻击者就可以知道这个目录里面有所有文件夹的名称,在windows下类似的文件为desktop.ini

泄露内容:

  1. 系统的目录信息

利用方法:

  1. .DS_Store的格式为二进制, 内部数据结构为Proprietary格式, 可以自行解析并递归下载所有文件。

  2. ds_store_exp(使用方法:python ds_store_exp.py http://www.example.com/.DS_Store)

漏洞案例:

修复建议:

弱口令

弱口令(weak password) 没有严格和准确的定义,通常认为容易被别人(他们有可能对你很了解)猜测到或被破解工具破解的口令均为弱口令。弱口令指的是仅包含简单数字和字母的口令,例如“123”、“abc”等,因为这样的口令很容易被别人破解,从而使用户的计算机面临风险,因此不推荐用户使用。

很多企业系统初始密码过于简单,后台管理密码设置为弱口令就很容易被攻击者进入系统,造成更大的危害。

利用方法:

通过常用密码字典对系统用户账号进行fuzz

漏洞案例:

修复建议:

建立完善的密码机制,经常验证更换密码规则。

用户信息泄露

Web可能会泄露用户信息,攻击者可以利用这一点收集网站用户字典,进行暴力破解等进一步攻击,下面总结一下哪些功能点可能会出现问题。

评论

一般用户评论处用户的信息都是加密的,比如显示的是用户手机号或邮箱等,就会直接对中间的一段数字进行加密,但是有些可能就没有加密,而是直接显示出来,那么这就造成了用户信息泄露问题。还有可能就是加密不当,在游览用户状态下对评论进行抓包,在返回包就有可能存在网站的用户名。同样的还可以对追加评论,或者如果评论中支持@他人,也可以进行抓包,还有当这个网站评论地方被搜索引擎爬虫到了,那么可以尝试利用搜索命令site:XXXX.com inurl:XX目录在搜索引擎当中搜索,如果加密不完全,那么就可以在搜索引擎当中看到明文信息

案例:乌云授权查看链接泄露那些事儿

转账

大型企业一般都有自家的金融平台,转账处输入用户名密码,它会像服务器发送一条验证信息,验证用户是否存在,抓包有可能在返回包中查看用户是否存在。

案例:苏宁易购易付宝转账存在敏感信息泄露

搜索

有些平台内置了搜索功能,跟搜索引擎思路很像,同样也是随意搜索,如果此时搜索的结果包含用户信息这块,那么就可能会导致用户信息泄露问题。

案例:某大学邮箱所有用户信息泄露信息被搜索引擎收录

登陆注册

在登陆注册的地方,如果提示信息过于友好,也可以使得攻击者获得用户信息,比如提示“用户名不存在”、“密码输入错误”

个人页面/订单

通常系统拥有个人空间等功能,链接例如:http://xxx.com/usr/123

如果他人空间是可以访问或者权限未作合理限定,我们通过构造id序号遍历,也可以得到存在的用户信息,或者通过抓包看看用户id是否以参数的形式在数据包里传输,权限设置不佳也会导致越权验证用户是否存在。

上传

很多系统会为了便于区分用户上传的文件,会为用户设定一个个人文件夹,链接例如:http://xxx.com/upload/zhangsan ,我们通过构造文件名,即可验证用户名是否存在。

参考资源

Last updated