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

Paste_Image.png

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

Paste_Image.png

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

Paste_Image.png

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

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

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

Paste_Image.png

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

/.git/HEAD 这个文件在 git 仓库中保存着当前分支的指针
这里应该是出题人将 .git 重命名为了 .nijiakadaye
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 层出现任意文件读取漏洞)
image.png
Paste_Image.png

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

Paste_Image.png
Paste_Image.png

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

git reflog

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

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

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

git fsck | cat -n

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

image.png

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

image.png
git reflog 查看历史操作信息
git reflog > log
image.png
使用 git diff [COMMIT_ID] [COMMIT_ID]
来对两个版本逐个进行比较
image.png

发现以下比较有用的信息

image.png
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'));
image.png

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 136,086评论 17 580
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 84,855评论 14 122
  • Swift版本点击这里欢迎加入QQ群交流: 594119878最新更新日期:18-09-17 About A cu...
    ylgwhyh阅读 16,730评论 7 219
  • 都说人这一生共有三道槛,第一是读书,第二是结婚,第三是生子。这好像是人这一生必做的三件事,只是顺序可以不同而已。当...
    cady麻麻阅读 29评论 0 0
  • 此刻 我烟雨蒙蒙 躲在一个叫做大众的车里 醉看 雨不大 淅淅沥沥 毫无夏天的气派 轰轰烈烈 宛如一个江南女子 用温...
    姚建新阅读 34评论 0 0