常见源码泄露总结

前言

源码泄露也是CTF比赛和实际运维环境常见到的漏洞,所以这次对常见的源码泄露方式进行总结。

一. .git源码泄露

git

git是一个常见的分布式版本控制软件,简单的说,就是便于管理者在不同的文件版本之间切换的软件。

在Git系统中有四种类型的对象,所有的Git操作都是基于这四种类型的对象。

  • "blob",这种对象用来保存文件的内容。

  • "tree",可以理解成一个对象关系树,它管理一些"tree"和“blob”对象。

  • "commit",指向一个"tree",它用来标记项目某一个特定时间点的状态。它包括以下关于时间点的元数据,如时间戳、最近一次提交的作者、指向上次提交、

  • "tag",给某个提交增添一个标记。

    前三个对象基于,commit->tree->blob的关系。

源码泄露原理

在我们使用git init初始化git仓库的时候,会生成一个.git的隐藏目录,git会将所有的文件,目录,提交等转化为git对象,压缩存储在这个文件夹当中。

1
2
3
4
5
6
7
8
9
10
11
12
- COMMIT_EDITMSG:保存最新的commit message,Git系统不会用到这个文件,只是给用户一个参考
- config:这个是GIt仓库的配置文件
- description:仓库的描述信息,主要给gitweb等git托管系统使用
- HEAD:这个文件包含了一个档期分支(branch)的引用,通过这个文件Git可以得到下一次commit的parent
- hooks:这个目录存放一些shell脚本,可以设置特定的git命令后触发相应的脚本;在搭建gitweb系统或其他
git托管系统会经常用到hook script
- index:这个文件就是我们前面提到的暂存区(stage),是一个二进制文件
- info:包含仓库的一些信息
- logs:保存所有更新的引用记录
- objects:所有的Git对象都会存放在这个目录中,对象的SHA1哈希值的前两位是文件夹名称,后38位作为对象文件名
- refs:这个目录一般包括三个子文件夹,heads、remotes和tags,heads中的文件标识了项目中的各个分支指向的当前commit
- ORIG_HEAD:HEAD指针的前一个状态

如果我们没有在网站部署完成后将.git文件删除,网站的所有文件很容易会暴露在来访者的视野内。

​ 资料参考安全脉搏——https://zhuanlan.zhihu.com/p/44741777

从源码泄露到代码审计(例)

这里放出攻防世界的一道题(XCTF 4th-QCTF-2018 题目:lottery)

打开是一个注册框,尝试了一下SQL注入和XSS都没用,索性先登陆看看。进入后发现,是一个简单的赌博网站,点击Claim Your Prize按钮后,发现,原来flag是要钱买的。但是我们钱不够,查看源码找到了一处ajax的JS代码,也没有可以利用的点,只能看看URL处有没有什么线索。查看robots协议的时候,得到了一个/.git/,结合刚学习的知识,.git源码泄露无疑。

使用python GitHack.py url成功将网站源代码拖到本地,接着是分析代码,在前面$ajax中,发现数据会经过“api.php”,那我们就先看看这个php文件有没有能利用的点。这里我们找到了一个弱类型比较的漏洞,而且还是在游戏处理的函数:

1
2
3
4
5
6
7
8
9
$money = $_SESSION['money'];
$numbers = $req['numbers'];
$win_numbers = random_win_nums();
$same_count = 0;
for($i=0; $i<7; $i++){
if($numbers[$i] == $win_numbers[$i]){
$same_count++;
}
}

从代码段可以了解到,传入选好的七位数字后,服务器会将每位传入的数字与随机生成的数字进行比较,如果相等,则相同数字加一,用于判断你获得的奖金。但是从上面可以看出,用的是双等号,我们可以尝试php弱类型比较,这里传入ture,因为布尔型的ture与除0外的任何整数比较都为真。BurpSuite抓包,传入payload:{"action":"buy","numbers":[true,true,true,true,true,true,true]}后,金钱增加,多点击几次购买flag即可。

二. svn源码泄露

暂时还没碰到

Author: De-m0n
Link: http://De-m0n.github.io/2020/02/04/Source_code_leak/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
Donate
  • 微信
  • 支付寶