前言
源码泄露也是CTF比赛和实际运维环境常见到的漏洞,所以这次对常见的源码泄露方式进行总结。
一. .git源码泄露
git
git是一个常见的分布式版本控制软件,简单的说,就是便于管理者在不同的文件版本之间切换的软件。
在Git系统中有四种类型的对象,所有的Git操作都是基于这四种类型的对象。
"blob",这种对象用来保存文件的内容。
"tree",可以理解成一个对象关系树,它管理一些"tree"和“blob”对象。
"commit",指向一个"tree",它用来标记项目某一个特定时间点的状态。它包括以下关于时间点的元数据,如时间戳、最近一次提交的作者、指向上次提交、
"tag",给某个提交增添一个标记。
前三个对象基于,
commit->tree->blob
的关系。
源码泄露原理
在我们使用git init初始化git仓库的时候,会生成一个.git的隐藏目录,git会将所有的文件,目录,提交等转化为git对象,压缩存储在这个文件夹当中。
1 | - COMMIT_EDITMSG:保存最新的commit message,Git系统不会用到这个文件,只是给用户一个参考 |
如果我们没有在网站部署完成后将.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 | $money = $_SESSION['money']; |
从代码段可以了解到,传入选好的七位数字后,服务器会将每位传入的数字与随机生成的数字进行比较,如果相等,则相同数字加一,用于判断你获得的奖金。但是从上面可以看出,用的是双等号,我们可以尝试php弱类型比较,这里传入ture,因为布尔型的ture与除0外的任何整数比较都为真。BurpSuite抓包,传入payload:{"action":"buy","numbers":[true,true,true,true,true,true,true]}
后,金钱增加,多点击几次购买flag即可。
二. svn源码泄露
暂时还没碰到