2021红帽杯find_it

文件泄露

git源码泄露

原理:在git init初始化目录时,会生成一个.git目录来记录代码修改情况,如果在上传时没有将.git目录删除的话,就会造成源码泄露

可以利用的漏洞工具:GitHack
一般使用方法为:

1
/.git/index.php

SVN源码泄露

原理:在用SVN管理本地代码时会生成一个.svn隐藏文件夹,其中有重要的源码信息,如果在发布代码的时候直接复制代码,而没有导出代码的话,就会将源码暴露在外网的环境中,可以利用.svn/entries或/.svn来获取

可以利用的漏洞工具:Seay SVN漏洞利用工具

hg源码泄露

原理:Mercurial是一种轻量级分部版本控制系统,在使用hg init初始化代码时会生成.hg

漏洞利用工具:dvcs-ripper

CVS泄露

原理:CVS是一个C/S系统,多个开发人员通过一个中心版本控制系统来记录文件版本,从而达到文件同步的目的。

可以利用:

1
2
3
4
/CVS/Root    返回根信息

/CVS/Entries 返回所有文件的结构

漏洞利用工具:dvcs-ripper

Bazaar/bzr泄露

原理:bzr是一个版本控制工具,可以利用/.bzr/造成源码泄露

网站备份压缩文件

原理:管理员将网站源代码备份在web目录下

常见的备份文件后缀:

1
2
3
4
5
6
7
8
.rar
.zip
.7z
.tar.gz
.bak
.txt
.old
.temp

漏洞利用工具:御剑、diramp、dirsearch

WEB-INF/web.xml泄露

原理:WEB-INF是java的web应用的安全目录,如果想在页面直接访问文件,需要通过web.xml文件查找访问文件的映射关系

WEB-INF主要包含文件或目录

1
2
3
4
5
6
7
8
9
10
WEB-INF/web.xml:web应用程序配置文件,描述了servlet和其他的应用组件配置及命名规则

WEB-INF/database.propertise:数据库配置文件

WEB-INF/classes/:一般用来存放在java类文件

WEB-INF/lib/:用来存放打包好的库

WEB-INF/src/:用来放源码(.asp和.php等)

DS_Store文件泄露

原理:.DS_Store是mac下的finder用来保存展示文件或文件夹的数据文件,每个文件夹下对应一个。如果将DS_Store部署到服务器中,就会造成文件泄露,特别是备份文件、源码文件

swp文件泄露

原理:此泄露为vim缓存信息泄露,swp文件是在编辑文件时自动生成的临时文件,当正常退出文件时,临时文件会被删除,但当不正常退出时会保存,利用/.filename.swp,swp文件也可能以swo形式,为.filename.swo

例子:

1
index.php.swp

Github源码

原理:很多人将源码放在托管平台托管,所以通过搜索关键字就可以下载网站源码

phps源码泄露

构造payload为index.phps,即可得到源码

数据库文件泄露

原理:数据库外泄是指数据库文件泄露,比如asp+access框架的数据库文件的泄露,此文件为mdb类型的文件,而SQLite数据库的文件泄露的文件类型是.db,而数据库系统会将数据保存在它们格式的文件中,而数据库文件又在web目录之下,因此可以通过下载数据库来获取数据,以asp+access框架的数据库为例:

1
2
1.某些CMS的目录下存在/data/data.mdb文件,如:ctfshow中的web信息搜集的web20,构造url/db/db.mdb,即可下载,然后用记事本打开
2.ewebeditor后台GETSHELL,下载eweb的数据库就是关键一步

实例

一开始先用dirsearch扫描,发现有robots.txtx文件,然后访问发现1ndexx.php,但是当我们构造/1ndexx.php,发现页面没东西,我们可以猜想是不是源码泄露,通过尝试,发现时swp文件泄露,因此构造/1ndexx.php.swp,可以得到源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
<?php $link = mysql_connect('localhost', 'root'); ?>
<html>
<head>
<title>Hello worldd!</title>
<style>
body {
background-color: white;
text-align: center;
padding: 50px;
font-family: "Open Sans","Helvetica Neue",Helvetica,Arial,sans-serif;
}

#logo {
margin-bottom: 40px;
}
</style>
</head>
<body>
<img id="logo" src="logo.png" />
<h1><?php echo "Hello My freind!"; ?></h1>
<?php if($link) { ?>
<h2>I Can't view my php files?!</h2>
<?php } else { ?>
<h2>MySQL Server version: <?php echo mysql_get_server_info(); ?></h2>
<?php } ?>
</body>
</html>
<?php

#Really easy...

$file=fopen("flag.php","r") or die("Unable 2 open!"); //如果打开flag.php文件阅读,文件不在的话会显示权限不够

$I_know_you_wanna_but_i_will_not_give_you_hhh = fread($file,filesize("flag.php"));


$hack=fopen("hack.php","w") or die("Unable 2 open");

$a=$_GET['code'];

if(preg_match('/system|eval|exec|base|compress|chr|ord|str|replace|pack|assert|preg|replace|create|function|call|\~|\^|\`|flag|cat|tac|more|tail|echo|require|include|proc|open|read|shell|file|put|get|contents|dir|link|dl|var|dump/',$a)){
die("you die");
}
if(strlen($a)>33){
die("nonono.");
}
fwrite($hack,$a);
fwrite($hack,$I_know_you_wanna_but_i_will_not_give_you_hhh);

fclose($file);
fclose($hack);
?>

本来打算绕过正则,但是构造:/index.php?code=
就可以在phpinfo()中的全局变量中找到flag