暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

《从0到1:CTFer成长之路》Web入门 - 信息搜集(附解题WP)

在下小黄 2021-08-19
2104

今天更新的是:

  • Web入门 - 信息搜集(附解题WP)
  • 《从0到1:CTFer成长之路》书籍配套题目,点击即可打开 - 实验环境(i 春秋 需要登录)
  • 微信公众号回复:【CTF
    】,即可获取本文全部涉及到的工具。

  • 信息搜集涵盖的面非常广,有备份文件、目录信息、Banner信息等

一、敏感目录泄露:

  • 通过敏感目录泄露,我们往往能获取网站的源代码和敏感的URL地址,如网站的后台地址等。

Git 泄露:

  • 【漏洞简介】git是一个主流的分布式版本控制系统,开发人员在开发过程中经常会遗忘.git文件夹,导致攻击者可以通过.git文件夹中的信息获取开发人员提交过的所有源码,进而可能导致服务器被攻击而沦陷。

常规Git泄露:

  • 工具:scrabble
  • scrabble工具下载
# 1. 获取 git 泄露网页的源代码(先用 dirsearch 工具进行目录探测 .git文件)
wget -r http://XXXXXX.com/.git

#
 2. 获取网站泄露的源码(使用 scrabble 工具时必须保证该网站下有.git文件)
cd scrabble
./scrabble http://XXXXXX.com

Git 回滚:

  • git作为一个版本控制工具,会记录每次提交(commit)的修改,所以当题目存在git泄露时,flag(敏感)文件可能在修改中被删除或被覆盖了,这时我们可以利用git的“git reset”命令来恢复到以前的版本。
# 1. git reset 命令解析
git reset [--soft | --mixed | --hard] [HEAD]
默认:--mixed
--mixed 为默认,可以不用带该参数,用于重置暂存区的文件与上一次的提交(commit)保持一致,工作区文件内容保持不变。
--soft 参数用于回退到某个版本:
--hard 参数撤销工作区中所有未提交的修改内容,将暂存区与工作区都回到上一次版本,并删除之前的所有信息提交:

HEAD 表示当前版本
HEAD^ 上一个版本
HEAD^^ 上上一个版本
HEAD^^^ 上上上一个版本

HEAD~0 表示当前版本
HEAD~1 上一个版本
HEAD^2 上上一个版本
HEAD^3 上上上一个版本

#
 举个例子:
git reset--hard HEAD^       回退到上一个版本。
git reset 052e          回退到指定版本(052e 为hash的前4位)

Git 分支:(找一个案例)

  • 在每次提交时,git都会自动把它们串成一条时间线,这条时间线就是一个分支。

  • 而git允许使用多个分支,从而让用户可以把工作从开发主线上分离出来,以免影响开发主线。

  • 如果没有新建分支,那么只有一条时间线,即只有一个分支,git中默认为master分支。

  • 因此,我们要找的flag或敏感文件可能不会藏在当前分支中,这时使用“git log”命令只能找到在当前分支上的修改,并不能看到我们想要的信息,因此需要切换分支来找到想要的文件。

  • 手工进行文件的提取方法:

# 1. GitHack 工具下载:
git clone https://github.com/lijiejie/GitHack

#
 2. GitHack 工具使用方法:
python GitHacker.py http://localhost/.git/

#
 3. 进入 GitHack 生成的文件夹后: 
git log --stat          使用该命令查看每个commit修改了哪些文件

git log --all           只能看到master分支的信息
git branch-v 

git diffHEAD commit-id      比较当前版本与想查看的commit之间的变化
git reflog            查看所有分支的所有操作记录(包括已经被删除的 commit 记录和 reset 的操作)

  • 可以看到,除了master还有一个secret分支,但自动化工具只还原了master分支的信息,因此需要手动下载secret分支的head信息,保存到.git/refs/heads/secret中(执行命令“wget http://127.0.0.1:8000/.git/refs/heads/secret”)。
  • 恢复head信息后,我们可以复用GitHacker的部分代码,以实现自动恢复分支的效果。
  • 在GitHacker的代码中可以看到,他是先下载object文件,再使用git fsck检测,并继续下载缺失的文件。
  • 此处可以直接复用检测缺失文件并恢复的fixmissing函数。
  • 我们注释掉程序最后调用main的部分,修改为如下代码:
image.png
  • 修改后重新执行“python GitHacker.py”命令,运行该脚本,再次进入生成的文件夹,执行“git log--all”或“gitbranch-v”命令,则secret分支的信息就可以恢复了,从gitlog中找到对应提交的hash,执行“git diff HEAD b94c”(b94c为hash的前4位)命令,即可得到flag。
image.png

Git 泄露的其他利用:

  • 除了查看源码的常见利用方式,泄露的git中也可能有其他有用的信息,如.git/config文件夹中可能含有access_token信息,从而可以访问这个用户的其他仓库。

配套题目解析WP - 粗心的小李

  • 《从0到1:CTFer成长之路》书籍配套题目,点击即可打开 - 实验环境(i 春秋 需要登录)
# 首先进行目录探测:
dirsearch -u http://eci-2ze9f2cupwglryyj0j2t.cloudeci1.ichunqiu.com/

[11:56:32] 200 -   73B  - /.git/description                                                                      
[11:56:32] 200 -  137B  - /.git/config                
[11:56:32] 403 -  312B  - /.git/                    
[11:56:32] 403 -  312B  - /.git/hooks/                     
[11:56:32] 200 -    5B  - /.git/COMMIT_EDITMSG                 
[11:56:32] 200 -   23B  - /.git/HEAD                
[11:56:32] 200 -  145B  - /.git/index                      
[11:56:32] 301 -  381B  - /.git  ->  http://eci-2ze9f2cupwglryyj0j2t.cloudeci1.ichunqiu.com/.git/
[11:56:32] 200 -  240B  - /.git/info/exclude
[11:56:32] 403 -  312B  - /.git/info/
[11:56:32] 200 -  148B  - /.git/logs/HEAD                   
[11:56:32] 403 -  312B  - /.git/objects/                                  
[11:56:32] 301 -  391B  - /.git/logs/refs  ->  http://eci-2ze9f2cupwglryyj0j2t.cloudeci1.ichunqiu.com/.git/logs/refs/
[11:56:32] 301 -  397B  - /.git/logs/refs/heads  ->  http://eci-2ze9f2cupwglryyj0j2t.cloudeci1.ichunqiu.com/.git/logs/refs/heads/
[11:56:32] 301 -  392B  - /.git/refs/heads  ->  http://eci-2ze9f2cupwglryyj0j2t.cloudeci1.ichunqiu.com/.git/refs/heads/
[11:56:32] 200 -   41B  - /.git/refs/heads/master
[11:56:32] 403 -  312B  - /.git/logs/                  
[11:56:32] 200 -  148B  - /.git/logs/refs/heads/master        
[11:56:32] 301 -  391B  - /.git/refs/tags  ->  http://eci-2ze9f2cupwglryyj0j2t.cloudeci1.ichunqiu.com/.git/refs/tags/
[11:56:32] 403 -  312B  - /.git/refs/

发现有 .git 文件泄露:

#
 使用 GitHack 工具获取泄露的文件:
python GitHacker.py http://localhost/.git/

#
 打开生成文件的目录,读取获取到的文件:

cd eci-2ze9f2cupwglryyj0j2t.cloudeci1.ichunqiu.com (生成的目录)
ls -lh 
cat index.html (打开生成的文件)

# flag :
n1book{git_looks_s0_easyfun}

image.png

SVN 泄露:

  • SVN(subversion)是源代码版本管理软件,造成SVN源代码漏洞的主要原因是管理员操作不规范将SVN隐藏文件夹暴露于外网环境,
  • 可以利用 .svn/entries 或 wc.db 文件获取服务器源码等信息。
  • 工具:dvcs-ripper (Linux下的源代码备份漏洞利用工具)
  • dvcs-ripper 下载和使用方法
  • 工具:Seay-svn(Windows下的源代码备份漏洞利用工具)
# 1. dvcs-ripper 工具下载:
git clone https://github.com/kost/dvcs-ripper 

HG 泄露:

  • 在初始化项目时,HG会在当前文件夹下创建一个.hg隐藏文件夹,其中包含代码和分支修改记录等信息。
  • 工具:dvcs-ripper (Linux下的源代码备份漏洞利用工具)
  • dvcs-ripper 下载和使用方法

经验总结:

  • 不管是 .git 这些隐藏文件,还是实战的敏感文件目录,主要都是依赖于字典的强大
# 在 CTF 线上赛的时候往往都会有重定向这一类的问题:

访问 .git  -----> 返回403 ,这时候我们尝试去访问 .git/config 文件
如果有文件内容访问,就说明存在 .git 泄露,反之则不存在。
在 SVN 泄露中• 一般是在entries中爬取源代码,但有时会出现entries为空的情况,这时注意wc.db文件存在与否,便可通过其中的checksum在pristine文件夹中获取源代码。

二、敏感备份文件:

  • 通过一些敏感的备份文件,我们往往能获得某一文件的源码,亦或网站的整体目录等。

gedit 备份文件:

  • 在Linux下,用gedit编辑器保存后,当前目录下会生成一个后缀为“~”的文件,其文件内容就是刚编辑的内容。假设刚才保存的文件名为flag,则该文件名为flag~
  • 通过浏览器访问这个带有“~”的文件,便可以得到源代码。

Vim 备份文件:

  • vim是目前运用得最多的Linux编辑器,当用户在编辑文件但意外退出时(如通过SSH连接到服务器时,在用vim编辑文件的过程中可能遇到因为网速不够导致的命令行卡死而意外退出的情况),会在当前目录下生成一个备份文件,文件名格式为:
./文件名.swp   # 该文件用来备份缓冲区中的内容,即退出时文件内容

#
 针对 SWP 备份文件:
vim -r 文件名.swp  恢复文件内容

#
 vim 备份文件补充:

第一次意外退出时生成的备份文件为*.swp,
第二次意外退出时的为*.swo,
第三次退出时的为*.swn,以此类推。

vim的官方手册中还有*.un.文件名.swp类型的备份文件。

在实际环境中,网站的备份往往可能是网站域名的压缩包。(www.zip/rar/tar.gz:往往是网站的源码备份)

配套题目解析WP - 常见的搜集

  • 《从0到1:CTFer成长之路》书籍配套题目,点击即可打开 - 实验环境(i 春秋 需要登录)
# 操作指令:
1. 进行目录探测:
dirsearch -u http://eci-2zeea9o511wlncrtp6ml.cloudeci1.ichunqiu.com/

[11:30:26] 200 -   12KB - /.index.php.swp        vim 备份文件                                 
[11:30:49] 200 -    2KB - /index.php                                                                             
[11:30:49] 200 -    2KB - /index.php/login/              
[11:30:49] 200 -    2KB - /index.php~            gedit 备份文件
[11:30:57] 200 -   47B  - /robots.txt         记录一些目录和CMS版本信息

flag:

/flag1_is_her3_fun.txt  ------> flag1:n1book{info_1

flag2:s_v3ry_im 
flag3:p0rtant_hack}

#
 拼接 flag :
n1book{info_1s_v3ry_imp0rtant_hack} 

image.png

常规文件:

  • robots.txt:记录一些目录和CMS版本信息。
  • readme.md:记录CMS版本信息,有的甚至有Github地址。
  • www.zip/rar/tar.gz:往往是网站的源码备份。

三、Banner识别:

  • 一个网站的Banner信息(服务器对外显示的一些基础信息)对解题有着十分重要的作用,选手往往可以通过Banner信息来获得解题思路,如得知网站是用ThinkPHP的Web框架编写时,我们可以尝试ThinkPHP框架的相关历史漏洞。或者得知这个网站是Windows服务器,那么我们在测试上传漏洞时可以根据Windows的特性进行尝试。
  • 比较常用的两种网站 Banner 识别方式:
    • 自行搜集指纹库:Github上有大量成型且公开的CMS指纹库,读者可以自行查找,同时可以借鉴一些成型扫描器对网站进行识别。
    • 利用Wappalyzer工具:
image.png

总结经验:

  • 在进行服务器的Banner信息探测时,除了通过上述两种常见的识别方式,我们还可以尝试随意输入一些URL,有时可以通过404页面和302跳转页面发现一些信息。
  • 例如,开启了debug选项的ThinkPHP网站会在一些错误页面显示ThinkPHP的版本。
  • 一是针对一些服务器的信息,我们可与寻找CMS上的一些漏洞
  • 二是在不知道密码和无法重置的情况下,通过CMS网站本身的特性,结合目录遍历来实现最后的RCE(Remote Command/Code Execute,远程命令/代码执行)


文章转载自在下小黄,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论