当前位置:网站首页>【web审计-源码泄露】获取源码方法,利用工具
【web审计-源码泄露】获取源码方法,利用工具
2022-07-05 03:33:00 【黑色地带(崛起)】
目录
一、备份文件泄露
1.1、简介:
备份文件一般是由于维护人员的疏忽,忘记删除而留在服务器中的文件。
攻击者通过枚举常见备份文件名,来获得对应的路径,并得到关键代码,从而进行源代码的审计
为了能够找到这些备份文件,一般会使用一些敏感文件扫描工具来进行探测。
一般常见备份文件有:文本备份文件、整站源码备份文件
文件后缀:.rar .zip .7z .tar.gz .bak .swp .txt .sql等
1.2、文本备份文件
在Linux系统下会使用诸如vim或gedit等文本编辑器,当编辑器崩溃或因异常退出时会自动备份当前文件;或将实现某功能后的代码备份后再进行后续开发工作。
可能的备份文件(index.php为例):
.index.php.swp
.index.php.swo
index.php~
index.php.bak
index.php.txt
index.php.old
...
1.3、整站源码备份文件
会将整站源码打包,然后放在网站的根目录下,这时,只要找到这个压缩包就能开始进行源码审计了。
常见的整站备份文件名:
www
wwwdata
wwwroot
web
webroot
backup
dist
...各种压缩文件后缀名:
.zip
.tar
.tar.gz
.7z
.rar
...还可利用其他可能泄露目录结构或文件名的敏感文件来获取备份文件的位置,如“.xx_xxx”
二、Git泄露
2.1、工具(GitHack):
GitHack是一个.git泄露利用脚本,通过泄露的.git文件夹下的文件,重建还原工程源代码。
渗透测试人员、攻击者,可以进一步审计代码,挖掘:文件上传,SQL注射等web安全漏洞。
GitHub - lijiejie/GitHack: A `.git` folder disclosure exploithttps://github.com/lijiejie/GitHack
使用:
python GitHack.py http://www.openssl.org/.git/
2.2、产生:
web在升级和维护过程中,会对站点文件进行修改,就需要对网站整站或其中一部分进行备份
发布代码的时候,如果没有删除.git目录,就直接发布到服务器,攻击者通过它来恢复源代码
备份文件被放在到 web 服务器可访问的目录下
2.3、通过特征搜索
当某个网站存在某个明显特征字符串的时候
就有可能通过GitHub的搜索功能来搜索到该项目
2.4、通过.git泄露
每个git项目的根目录下都存在一个.git文件夹,作用就是存储项目的相关信息
工具:GitHack和源码
分析源码:
首先在本地建立一个git工程并初始化,然后再commit一次
进入.git目录下,看看目录中文件
确定commit对象,查看对象
输入存在“.git”目录中的url
接着查看HEAD文件获取分支的位置,然后得到分支的hash值
得到hash值后本地初始化一个git,接着通过parseCommit获取全部对象
最后使用reset重设分支,成功将项目重新建立在本地
文件:
关键的文件(一部分):
HEAD:标记当前git在哪个分支中。
refs:标记该项目里的每个分支指向的commit。
objects:git本地仓库存储的所有对象。
git的对象:
commit:标记一个项目的一次提交记录。
tree:标记一个项目的目录或者子目录。
blob:标记一个项目的文件。
tag:命名一次提交。
自定义函数
(1)parseCommit函数:
作用:下载commit对象,将其parent一并下载
代码:
function parseCommit {
echo parseCommit $1
downloadBlob $1
tree=$(git cat-file -p $1| sed -n '1p' | awk '{print $2}')
parseTree $tree
parent=$(git cat-file -p $1 | sed -n '2p' | awk '{print $2}')
[ ${#parent} -eq 40 ] && parseCommit $parent
}(2)parseTree函数:
作用:下载tree对象,并列出tree下的所有对象,分类为tree或者blob后处理
代码:
function parseTree {
echo parseTree $1
downloadBlob $1
while read line
do
type=$(echo $line | awk '{print $2}')
hash=$(echo $line | awk '{print $3}')
[ "$type" = "tree" ] && parseTree $hash || downloadBlob $hash
done < <(git cat-file -p $1)
}(3)downloadBlob函数:
作用:下载与hash对应的文件
function downloadBlob {
echo downloadBlob $1
mkdir -p ${1:0:2}
cd $_
wget -q -nc $domain/.git/objects/${1:0:2}/${1:2}
cd ..
}
三、svn泄露
3.1、简介:
Subversion(SVN) 是一个开源的版本控制系統, 也就是说 Subversion 管理着随时间改变的数据。 这些数据放置在一个中央资料档案库(repository) 中。 这个档案库很像一个普通的文件服务器, 不过它会记住每一次文件的变动。 这样你就可以把档案恢复到旧的版本, 或是浏览文件的变动历史。
在使用SVN管理本地代码过程中,会自动生成一个名为.svn的隐藏文件夹,其中包含重要的源代码信息。
3.2、产生原因:
网站管理员在发布代码时,没有使用‘导出’功能,而是直接复制代码文件夹到WEB服务器上,这就使.svn隐藏文件夹被暴露于外网环境,可以利用.svn/entries文件,获取到服务器源码。
3.3、工具:
Seay-Svn(简单)
dvcs-ripper
下载地址:
Rip Web可访问(分布式)版本控制系统:SVN,GIT,Mercurial/hg,bzr,...
即使目录浏览关闭,它也可以翻录存储库。
确保将自己置于要下载/克隆存储库的空目录中。
四、hg、CVS、Bazaar/bzr源码泄漏
4.1、工具:
dvcs-ripper
下载地址:
Rip Web可访问(分布式)版本控制系统:SVN,GIT,Mercurial/hg,bzr,...
即使目录浏览关闭,它也可以翻录存储库。
确保将自己置于要下载/克隆存储库的空目录中。
五、WEB-INF/web.xml 泄露
5.1、简介:
WEB-INF是Java的WEB应用的安全目录,客户端无法访问,只有服务端才可以可以访问,如果想在页面中直接访问其中的文件,必须通过web.xml文件对要访问的文件进行相应映射才能访问。
5.2、产生原因:
在使用网络架构的时候,对静态资源的目录或文件的映射配置不当,从而引发的安全问题,导致web.xml等文件能够被读取
5.3、WEB-INF 主要包含文件或目录:
(1)/WEB-INF/web.xml :
Web应用程序配置文件(描述servlet和其他的应用组件配置及命名规则)
(2)/WEB-INF/database.properties:
数据库配置文件
(3)/WEB-INF/classes/:
存放Java类文件(.class),包含所有的 Servlet 类和其他类文件,类文件所在的目录结构与他们的包名称匹配
(4)/WEB-INF/lib/ :
用来存放打包好的库(.jar),即web应用需要的各种JAR文件
(5)/WEB-INF/src/ :
源码目录,存放源代码(.asp和.php等)
5.4、利用:
通过找到 web.xml 文件,推断 class 文件的路径,找到 class 文件,再通过反编译 class 文件,得到网站源码。
六、DS_Store 文件泄露
6.1、简介:
.DS_Store是Mac下Finder用来保存如何展示文件/文件夹 的数据文件(即文件夹的显示属性的,和比文件图标的摆放位置),每个文件夹下对应一个
把代码上传的时候,安全正确的操作应该把 .DS_Store 文件删除,如果未删除,.DS_Store将会上传部署到服务器,可能造成文件泄漏(目录结构、备份文件、源代码文件)
6.2、工具:
ds_store_exp
是一个 .DS_Store 文件泄漏利用脚本,它解析.DS_Store文件并递归地下载文件到本地。
下载地址:
七、利用漏洞泄露
结合任意文件包含漏洞或者任意文件存在下载漏洞
就可能下载到源码,并对其进行审计
边栏推荐
- 单项框 复选框
- Share the newly released web application development framework based on blazor Technology
- Devtools的簡單使用
- Anchor free series network yolox source code line by line explanation Part 2 (a total of 10, ensure to explain line by line, after reading, you can change the network at will, not just as a participan
- [deep learning] deep learning reference materials
- NPM introduction link symbolic link
- Idea inheritance relationship
- Redis6-01nosql database
- [groovy] string (string injection function | asBoolean | execute | minus)
- Binary heap implementation (priority queue implementation)
猜你喜欢
Multimedia query
Smart pointer shared_ PTR and weak_ Difference of PTR
Bumblebee: build, deliver, and run ebpf programs smoothly like silk
C file in keil cannot be compiled
Pdf things
Voice chip wt2003h4 B008 single chip to realize the quick design of intelligent doorbell scheme
Class inheritance in C #
Flume配置4——自定义MYSQLSource
Azkaban overview
Zero foundation uses paddlepaddle to build lenet-5 network
随机推荐
About MySQL database connection exceptions
Idea inheritance relationship
Apache build web host
Share the newly released web application development framework based on blazor Technology
Bumblebee: build, deliver, and run ebpf programs smoothly like silk
Easy processing of ten-year futures and stock market data -- Application of tdengine in Tongxinyuan fund
51 independent key basic experiment
Sqoop安装
The perfect car for successful people: BMW X7! Superior performance, excellent comfort and safety
SPI and IIC communication protocol
How can we truncate the float64 type to a specific precision- How can we truncate float64 type to a particular precision?
【软件逆向-分析工具】反汇编和反编译工具
Binary heap implementation (priority queue implementation)
Kubernetes - identity and authority authentication
1.五层网络模型
Why are there fewer and fewer good products produced by big Internet companies such as Tencent and Alibaba?
Tencent cloud, realize image upload
[groovy] string (string splicing | multi line string)
Azkaban概述
glibc strlen 实现方式分析