信息泄露之Web源码泄露

0x01、前言

在WEB安全之中,可能大家对SQL注入、XSS跨站脚本攻击、文件上传一些漏洞已经耳熟于心了,但因web源码泄露而导致的问题也并不少见。不仅小网站由此类问题,在一些大的厂商站点也同样出现不少。

在日常挖掘漏洞中,像web源码泄露此类的信息泄露漏洞还是普遍存在的,而造成这种问题的原因,无一是代码部署到生产环境后,一些细节问题未做处理。

0x02、WEB源码泄露漏洞

常见的web源码泄露:

  • git源码泄露
  • svn源码泄露
  • DS_Store 文件泄露
  • 网站备份压缩文件泄露
  • WEB-INF/web.xml 泄露
  • CVS泄露
  • hg源码泄漏
  • Bazaar/bzr泄露
  • SWP 文件泄露

1、git 源码泄露

漏洞成因:

Git是一个开源的分布式版本控制系统,在执行git init初始化目录的时候,会在当前目录下自动创建一个.git目录,用来记录代码的变更记录等。发布代码的时候,如果没有把.git这个目录删除,就直接发布到了服务器上,攻击者就可以通过它来恢复源代码。

而.git目录结构如下:

1646919470_6229ff2eb3331dc581416.png!small?1646919377547

  • HEAD:这个git项目当前处在哪个分支里;
  • config:文件包含项目特有的配置选项,git config命令会改动它;
  • description:项目的描述信息
  • hooks/:系统默认钩子脚本目录
  • info/:目录包含一个全局性排除(global exclude)文件,用以放置不希望被记录在 .gitignore 文件中的忽略模式(ignored patterns)
  • objects/:目录存储所有数据内容 (commits, trees, blobs, tags)
  • refs/:标识你项目里的每个分支指向了哪个提交(commit)。
  • index:文件保存暂存区信息

需要注意的就是HEAD、index、objects、refes这四个条目,在发布代码时若果没有把.git目录删除,直接发布到了运行目录。攻击者就可以通过这个文件夹,用来获取源代码

例如:

http://www.test.com/.git/config
漏洞利用:

利用工具:GitHack(一个.git泄露利用脚本,通过泄露的.git文件夹下的文件,重建还原工程源代码。)

用法示例:

GitHack.py http://www.test.com/.git/

靶场示例:BABY PHP

1646919528_6229ff6858e5e6756c660.png!small?1646919435170

浏览页面,发现GIT,猜测有源码泄露,小试一下

1646919538_6229ff72b1b06e6249e59.png!small?1646919445542

发现存在.git目录泄露

1646878315659-b7463878-3353-40f3-8f79-8f52eb4e9590.png

直接上工具

1646919548_6229ff7c4e0371fa0c7a3.png!small?1646919455115

可成功获取源文件

1646919555_6229ff83c6ab3e6d27484.png!small?1646919462570

修复建议:

删除.git目录或者修改中间件配置进行对.git隐藏文件夹的访问。

2、SVN 源码泄露

漏洞成因:

SVN是源代码本地管理软件。使用SVN管理本地代码过程中,会生成一个名为.svn的隐藏文件夹,其中包含重要的源码信息。而造成.svn文件泄露的主要原因还是网站管理员在发布代码时,没有使用导出功能,而直接进行复制粘贴。

漏洞利用:

关于.svn源码泄露漏洞利用,如今依照版本不同,也分两种方式。一种是svn>1.7,另一种是svn<1.7

  • svn>1.7,文件名会被hash,然后再按照文件名对应hash的方式存到wc.db中,就是个sqlite数据库。最后我们按照名称遍历下载即可。
  • svn<1.7,文件会先去读取entries文件的中的目录结构,因为默认文件名都是直接明文存的。

可通过访问.svn/entries进行判断svn的版本,例如:

http://www.test.com/.svn/entries

利用工具:svnExploit(SVN源代码利用工具,其完美支持SVN<1.7版本和SVN>1.7版本的SVN源代码泄露)

  • 示例1: svn<1.7
    像我们通过访问目标地址+/.svn/entries,可以看到下面这些数据的,以此判断是<1.7的
    1646919566_6229ff8eb81985239def5.png!small?1646919473574
    使用svnexploit进行测试,命令如下:python .\svnExploit.py -u http://www.xxx.com/.svn/

    1646919585_6229ffa173ecdb09d6daf.png!small?1646919492276
    --dump 一下
    1646919594_6229ffaa06b4304f1c72c.png!small?1646919501132
    这样源码就被我们给dump下来了
    1646919602_6229ffb297ef4202dc785.png!small?1646919509482
  • 示例2: svn>1.7
    像我们通过访问目标地址+/.svn/entries,可以看到页面中“12”字样的,以此判断是>1.7的
    1646919610_6229ffba4549695a065cc.png!small?1646919517055
    直接上svnexploit
    1646919621_6229ffc597be547ca8601.png!small?1646919528465
    我们通过使用工具SQLiteStudio工具,对wc.db进行读取
    1646919628_6229ffcc6aaa67b364a1f.png!small
    NODES表中,通过遍历local_relpath列下的每一行,我们就可以下载这个系统的所有代码数据了
    1646919671_6229fff76852f179a9de3.png!small?1646919578239
    REPOSITORY表中,里面存储了svn的项目路径和 uuid,如果没有做访问IP限制的话,你可以直接使用此信息取得此项目的SVN权限(下载、提交等)
    1646919679_6229ffff0364a7f504bd1.png!small?1646919585847
修复建议:
  • 不要使用svn checkout和svn up更新服务器上的代码,使用svn export(导出)功能代替。
  • 使用git代替svn。
  • 服务器软件(Nginx、apache、tomcat、IIS等)设置目录权限,禁止访问.svn和.git目录,下面示范为禁止访问点号开头的目录

3、DS_Store 文件泄露

漏洞成因

.DS_Store是Mac OS保存文件夹的自定义属性的隐藏文件,如文件的图标位置或背景色,相当于Windows的desktop.ini。

由于开发人员发布代码时未删除文件夹中隐藏的.DS_store,可能造成文件目录结构泄漏、源代码文件等敏感信息的泄露。

漏洞利用

我们可以通过直接访问url+/.ds_store来判断是否存在此漏洞

利用工具: ds_store_exp

示例:

ds_store_exp是一个.DS_Store 文件泄漏利用脚本,它解析.DS_Store文件并递归地下载文件到本地

命令:python ds_store_exp.py https://www.xxx.com/.DS_Store

1646919697_622a00117474d741e7a3c.png!small?1646919604303

1646919704_622a00181a3ee708e9131.png!small?1646919610824

修复建议

不影响应用运行的情况下删除.DS_Store文件

4、网站备份压缩文件泄露

漏洞成因

在网站正常使用中,往往需要经过修改和升级,这时就需要对网站或对某处数据进行备份。而备份文件会因为各种原因保存在网站web目录下,而当对此目录没有访问权限限制时,就很可能会导致备份或缓存文件被下载下来。

该漏洞往往会导致服务器整站源代码或者部分页面的源代码被下载,利用。源代码中所包含的各类敏感信息,如服务器数据库连接信息,服务器配置信息等会因此而泄露,造成巨大的损失

常见的备份文件后缀

  • .rar
  • .zip
  • .7z.
  • tar
  • .gz
  • .bak
  • .swp
  • .txt
  • .html
漏洞利用

像备份压缩文件泄露,可以直接用专门的目录扫描工具进行敏感文件扫描

利用工具:御剑、disearch.py

1646919715_622a00230b896d8f8eb3c.png!small?1646919621846

1646919725_622a002dd453548fd8860.png!small?1646919632730

修复建议
  • 做好目录访问限制
  • 在不影响运行的情况下,及时删除备份文件

5、WEB-INF/web.xml泄露

漏洞成因

概念:WEB-INF是Java的WEB应用的安全目录。如果想在页面中直接访问其中的文件,必须通过web.xml文件对要访问的文件进行相应映射才能访问。

WEB-INF主要包含一下文件或目录:

  • /WEB-INF/web.xml:Web应用程序配置文件,描述了 servlet 和其他的应用组件配置及命名规则
  • /WEB-INF/classes/:含了站点所有用的 class 文件,包括 servlet class 和非servlet class,他们不能包含在 .jar文件中
  • /WEB-INF/lib/:存放web应用需要的各种JAR文件,放置仅在这个应用中要求使用的jar文件,如数据库驱动jar文件
  • /WEB-INF/src/:源码目录,按照包名结构放置各个java文件。
  • /WEB-INF/database.properties:数据库配置文件

WEB-INF/web.xml泄露的起因就是我们在使用网络架构的时候,对静态资源的目录或文件的映射配置不当,可能会引发一些的安全问题,导致web.xml等文件能够被读取。

漏洞利用

通过找到web.xml文件,分析可用敏感信息,推断class文件的路径,直接class文件,最后再通过反编译class文件,得到网站源码。

示例:【RoarCTF 2019】Easy Java1

1646919735_622a0037f3de4f1ef30cb.png!small?1646919642809

开局我们访问靶机地址,是个登录页面

1646919745_622a0041f2f0c89752fa3.png!small?1646919652829

点开help发现,提示java

1646919753_622a00499bc32836d3cc9.png!small?1646919660539

有个download,尝试改为post,试下任意文件下载,输入/WEB-INF/web.xml

1646919762_622a00528adf4095cabcb.png!small?1646919669469

再返回的配置信息中,发现flag的信息,通过推断flag路径,拼接url进行访问,

1646919772_622a005ca1658679d0df1.png!small?1646919679545

猜测flag进行了base64加密,进行解密,成功找到了flag

1646919780_622a00644f912c7badcf5.png!small?1646919687435

修复建议

控制目录访问权限

6、CVS泄漏

漏洞成因

cvs项目在初始化(cvs checkout project)的时候, 会在project目录下创建一个名为CVS的目录,

其中保存了各个文件的修改和commit记录. 通过此目录可以获取代码的历史版本. 其中两个关键文件为:

CVS/Root和CVS/Entries, 分别记录了项目的根信息和所有文件的结构

漏洞利用

主要是针对 CVS/Root以及CVS/Entries目录,直接就可以看到泄露的信息。

http://www.test.com/CVS/Root
#返回根信息

1646919788_622a006c2c6210ac2e27d.png!small?1646919694968

http://www.test.com/CVS/Entries
#返回所有的文件结构

1646919796_622a00744723eed30cebe.png!small?1646919703183

修复建议

删除CVS的CVS目录

7、.hg源码泄漏

漏洞成因

Mercurial 是一种轻量级分布式版本控制系统,

使用hg init 新建仓库的时候,会生成一个备份文件.hg。当然也存在着泄露问题,不过较为少见 ,关于这个.hg文件泄露,网上的示例也很少,暂时还没有找到合适的呈现给大家 。

漏洞利用

利用工具:dvcs-ripper

rip-hg.pl -v -u http://www.example.com/.hg/

当访问/.hg存在的时候,就证明存在该漏洞

修复建议

删除web目录中所有.hg隐藏文件夹

8、Bazaar/bzr泄露

漏洞成因

bzr也是个版本控制工具, 虽然不是很热门, 但它也是多平台支持, 并且有不错的图形界面。

漏洞利用

利用工具:dvcs-ripper

rip-bzr.pl -v -u http://www.example.com/.bzr/
修复建议

删除web目录中所有.bzr隐藏文件夹

9、.swp文件泄露

漏洞成因

swp即swap文件,在编辑文件时产生的临时文件,它是隐藏文件,如果程序正常退出,临时文件自动删除,如果意外退出就会保留,文件名为 .filename.swp。

漏洞利用

可通过直接访问.swp文件,下载回来后删掉末尾的.swp,获得源码文件。

修复建议

删除web目录中所有.swp隐藏文件夹

0x03、总结

之所以写这篇文章,一是对这一类的总结,二是更方便大家理解,希望能够有所帮助。当然,信息泄露的种类还往往不止我所说的这些,需要我们共同去发现、总结,最后再分享出来。

1646919809_622a00815e8442b38ba84.png!small?1646919716312

0x04、参考链接

https://www.secpulse.com/archives/124398.html

https://www.cnblogs.com/xiaozi/p/12397114.html

  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值