[SSCTF](misc100)HTTP攻击流量分析+.git源码泄露

《[SSCTF](misc100)HTTP攻击流量分析+.git源码泄露》 Paste_Image.png

一道 Misc 题 , 从比赛官网点击比赛链接后跳转到了一个 Web 页面 , 从这里可以下载一个流量包

《[SSCTF](misc100)HTTP攻击流量分析+.git源码泄露》 Paste_Image.png

下载之后 WireShark 分析 , HTTP协议流量包

《[SSCTF](misc100)HTTP攻击流量分析+.git源码泄露》 Paste_Image.png

跟踪 TCP 流后发现 , 流量包的场景应该是攻击者利用扫描器对某一个网站进行 git 源码泄露的扫描

1. 根据 HTTP 请求头的 URL (请求的文件是常见的 git 配置文件)
2. 根据不断变化 User-Agent 头部 (爬虫防止目标网站有反爬虫策略而进行的随机化)
3. 根据相应码大量为 404

《[SSCTF](misc100)HTTP攻击流量分析+.git源码泄露》 Paste_Image.png

这里已经获取了某一些配置信息

《[SSCTF](misc100)HTTP攻击流量分析+.git源码泄露》 Paste_Image.png

如果之前还不是很确实是 git 源码泄露 , 那么通过下面这个数据包就可以肯定了

/.git/HEAD 这个文件在 git 仓库中保存着当前分支的指针
这里应该是出题人将 .git 重命名为了 .nijiakadaye

《[SSCTF](misc100)HTTP攻击流量分析+.git源码泄露》 Paste_Image.png

回过头来想想 , 这是一道 Misc 题目 , 流量包为什么不是从比赛的主站直接下载 , 而是从一个新的 web 站去下载 ?
而且流量包是攻击者对某一个目标网站的扫描流量 , 是不是攻击者扫描的事实上就是这个网站呢 ?
验证一下即可
访问该网站的 ./nijiakadaye/HEAD 文件 , 发现与流量包中一致 , 这也充分验证了我们刚才的猜想

注意这里直接访问 ./nijiakadaye/ 目录的话是会 Forbidden 的
有一些开发(运维)人员了解 git 源码泄露的危害性
因此他们对此做出了一些保护措施 , 例如 : 
禁用 apache 的目录索引功能 , 具体方法如下 : 
编辑 /etc/apache2/apche2.conf 
在网站目录的配置项下 : 
 170 <Directory /var/www/>                                                                                                                             
 171     Options FollowSymLinks Indexes                                                                                                                
 172     AllowOverride ALL                                                                                                                             
 173     Require all granted        
 175     DirectoryIndex index.php index.html index.htm                                                                                                                   
 176 </Directory>                                                                                                                                      
 177                              
修改为 : 
 170 <Directory /var/www/>                                                                                                                             
 171     Options FollowSymLinks                                                                                                             
 172     AllowOverride ALL                                                                                                                             
 173     Require all granted        
 175     DirectoryIndex index.php index.html index.htm                                                                                                                   
 176 </Directory>                                                                                                                                      
 177                        
也就是去掉 Indexes 这个 Options
注意这里如果配置了 Apache 的虚拟主机 , 配置起来也是同样的道理
这样用户在访问某一个目录的时候 , 如果这里目录下面没有 DirectoryIndex 这个配置项中定义的文件
例如 index.html index.php 
apache 就是直接返回 403 Forbidden
但是这样的配置防止攻击者在不知道目标网站目录结构的情况
或者说这个配置项并不是是一个为了安全考虑的配置项
当攻击者知道目标目录的结构的时候 , 那么这个配置项事实上是并没有什么用处的
我们这里 .git 源码泄露就属于上述的情况 , .git 文件夹的目录结构基本上是固定的 , 所以说
这里 403 Forbidden 事实上只能阻挡误操作点击进来的用户 , 还有一些不明所以的攻击者
但是似乎有大量的网站正在使用这样所谓的防护措施 , 这也是非常危险的
一般情况下 , 我们建议将 .git 目录放置于网站根目录的上层
也就是说在创建 git 仓库的时候就直接在网站根目录的上层去创建
这样就将 .git 目录限制在了客户端不能访问到的位置 (但是也不排除 cgi 层出现任意文件读取漏洞)

《[SSCTF](misc100)HTTP攻击流量分析+.git源码泄露》 image.png
《[SSCTF](misc100)HTTP攻击流量分析+.git源码泄露》 Paste_Image.png

我们可以通过已知的目录结构轻松地访问到目标主机的敏感文件

《[SSCTF](misc100)HTTP攻击流量分析+.git源码泄露》 Paste_Image.png
《[SSCTF](misc100)HTTP攻击流量分析+.git源码泄露》 Paste_Image.png

我们现在已经搜集到了足够多的信息 , 这个时候可以直接利用现成的工具进行攻击了
这里我使用了之前写的多线程的 .git 源码泄露利用脚本 , 这个脚本可以直接恢复目标主机的整个 .git 目录
也就是说我们可以使用

git reflog

来查看开发者所有的历史操作以及提交信息 , 从而掌握整个后台开发的流程
甚至在某些情况下 , 当开发者的安全意识淡薄 , 甚至有可能获取到网站的后台密码或者用于发送注册邮件的邮箱的密码

上面说到的工具已开源 : 
可以直接使用 : 
git clone https://github.com/WangYihang/GitHacker.git
cd GitHacker
python GitHacker.py
进行使用

《[SSCTF](misc100)HTTP攻击流量分析+.git源码泄露》 image.png
《[SSCTF](misc100)HTTP攻击流量分析+.git源码泄露》 image.png
《[SSCTF](misc100)HTTP攻击流量分析+.git源码泄露》 image.png
《[SSCTF](misc100)HTTP攻击流量分析+.git源码泄露》 Paste_Image.png
《[SSCTF](misc100)HTTP攻击流量分析+.git源码泄露》 image.png

目标网站的 .git 目录非常大 , objects 文件非常多 , 因此之前写过的脚本速度很慢 , 当我使用

git fsck | cat -n

查看还有多少 objects 文件需要下载的时候 , 居然显示有两千多个
然后就这个脚本就产生了多线程的版本

《[SSCTF](misc100)HTTP攻击流量分析+.git源码泄露》 image.png

50 个线程大概用了一分钟左右
利用完成 , 进入文件夹

《[SSCTF](misc100)HTTP攻击流量分析+.git源码泄露》 image.png

git reflog 查看历史操作信息
git reflog > log

《[SSCTF](misc100)HTTP攻击流量分析+.git源码泄露》 image.png

使用 git diff [COMMIT_ID] [COMMIT_ID]
来对两个版本逐个进行比较

《[SSCTF](misc100)HTTP攻击流量分析+.git源码泄露》 image.png

发现以下比较有用的信息

《[SSCTF](misc100)HTTP攻击流量分析+.git源码泄露》 image.png
《[SSCTF](misc100)HTTP攻击流量分析+.git源码泄露》 image.png

很容易想到这里的密文应该是这里的加密算法对 flag 进行加密得到的
这里就只需要对算法求逆即可
事实上这里的算法非常简单 , 由于只使用了异或操作 , 其实加密算法也是解密算法
这里的加密算法涉及到一个密码 , 由于在 git 的日志中提到了 :

wodegea

这个字符串 , 导致当时一直在纠结加密算法的密码是什么
花费了较长的时间 , 导致失去了一血 , 不开心…

<?php
$encrypt = base64_encode(wtf('flag_password', 'ssctf'));
function wtf($data,$pwd) {
    $cipher ="";
    $key[] ="";
    $box[] ="";
    $pwd_length = strlen($pwd);
    $data_length = strlen($data);
    for ($i = 0; $i < 256; $i++) {
        $key[$i] = ord($pwd[$i % $pwd_length]);
        $box[$i] = $i;
    }
    for ($j = $i = 0; $i < 256; $i++) {
        $j = ($j + $box[$i] + $key[$i]) % 256;
        $tmp = $box[$i];
        $box[$i] = $box[$j];
        $box[$j] = $tmp;
    }
    for ($a = $j = $i = 0; $i < $data_length; $i++) {
        $a = ($a + 1) % 256;
        $j = ($j + $box[$a]) % 256;
        $tmp = $box[$a];
        $box[$a] = $box[$j];
        $box[$j] = $tmp;
        $k = $box[(($box[$a] + $box[$j]) % 256)];
        $cipher .= chr(ord($data[$i]) ^ $k);
    }
    return $cipher;
}
?>
SSCTF{give you flag,can you accept?"}
SSCTF{xsL3HOvFlV+H40s0mhszc5t1x38EU0ZIFJHZ/h2sC3U=}
var_dump(wtf(base64_decode('xsL3HOvFlV+H40s0mhszc5t1x38EU0ZIFJHZ/h2sC3U='), 'ssctf'));

《[SSCTF](misc100)HTTP攻击流量分析+.git源码泄露》 image.png

    原文作者:王一航
    原文地址: https://www.jianshu.com/p/67f80432691c
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞