这里需要首先说一下,很多CTF题目的初步提示就是在爬虫协议和源码泄露中,虽然这俩都是很小的一部分,但是不容忽视。在题目毫无思路的时候看看,万一有新发现呢
(1)Robots.txt 爬虫协议
robots.txt是一个纯文本文件,是爬虫抓取网站的时候要查看的第一个文件,一般位于网站的根目录下。robots.txt文件定义了爬虫在爬取该网站时存在的限制,哪些部分爬虫可以爬取,哪些不可以爬取(防君子不防小人)
百度robots.txt协议的一部分:https://www.baidu.com/robots.txt 在该文件中定义了一系列的User-agent 表示针对的爬虫 Disallow 不如寻爬取的目录
Allow:/home/news,代表禁止访问/home/后的一切路径,但可以访问/home/news路径
Disallow则是规定了不可以访问的目录,当然我们可以从这里获取少量的信息,有的时候说不定非常有用哦,比如说第二小节要说的git泄露。
除了爬虫协议,我们还可以访问网站的日志目录,也是一个方法 www.a.com/log/
一大堆的日志,审计起来多半得丢了半条命,那么如何关键快速的找到我们想要的结果呢?我们可以“Ctrl+f”快速查找关于200的状态代码
找到我们想要利用的信息,然后进行一次同样的请求
2018.7.20 补充
robots.txt是个很简单的文本文件,您只要标明“谁不能访问哪些链接”即可。
在文件的第一行写:
User-Agent: Baiduspider
这就告诉了爬虫下面的描述是针对名叫Baiduspider的爬虫。您还可以写:
User-Agent: *
这就意味着向所有的爬虫开放。需要注意的是一个robots.txt文件里只能有一个"User-Agent: *"。
接下来是不希望被访问的链接前缀。例如:
Disallow: /private
这就告诉爬虫不要抓取以"/private"开头的所有链接。包括/private.html,/private/some.html,/private/some/haha.html。如果您写成:
Disallow: /
则表明整个站点都不希望被访问。您也可以分多行来指定不希望被抓取的链接前缀,例如:
Disallow: /tmp
Disallow: /disallow
那么所有以"/tmp"和"/disallow"开头的链接都不会被访问了。
最后形成的robots.txt文件如下:
User-Agent: Baiduspider
Disallow: /tmp
Disallow: /private
请注意,如果您的robots.txt文件里有中文等非英语字符,请确定该文件是由UTF-8编码编写。
(2)源码泄露
A . git泄露
当前大量开发人员使用git进行版本控制,对站点自动部署。如果配置不当,可能会将.git文件夹直接部署到线上环境。这就引起了git泄露漏洞。危险的是我们可以通过这些找到以下关键的源码文件等,甚至是下载到本地。
GitHack是一个.git泄露利用测试脚本,通过泄露的文件,还原重建工程源代码。
Git信息泄露的危害很大,渗透测试人员、攻击者,可直接从源码获取敏感配置信息(如:邮箱,数据库),也可以进一步审计代码,挖掘文件上传、SQL注射等安全漏洞。
工作原理:
1、解析.git/index文件,找到工程中所有的: ( 文件名,文件sha1 )
2、去.git/objects/ 文件夹下下载对应的文件
3、zlib解压文件,按原始的目录结构写入源代码
优点:
速度快,默认20个工作线程
尽量还原所有的源代码,缺失的文件不影响脚本工作
脚本不需要执行额外的git命令,all you need is python
脚本无需浏览目录
可以直接在github上下载到,进入目录按住shift,右键打开命令行,软件是一个命令行工具:
使用的方法是:
python .\GitHack.py -u http://www.openssl.org/.git/
# 当电脑里同时安装两个版本的py时,我们需要这样 记住后面要加上.git
py -2 .\GitHack.py -u http://www.openssl.org/.git/
用的时候大概就是这个效果,会把文件下载到程序的一个目录中。
GIT 源码泄露 案例
2015 年 5 月,乌云白帽子 “lijiejie” 提交漏洞 “大众点评某站点 git 泄漏源代码”,缺陷编号:wooyun-2015-0117332
在此次案例当中,白帽子发现 URL(http://qq.m.dianping.com/.git/ )可以访问,于是通过工具 githack 下载里面的文件,下面为 githack.py 执行中的截图:
源码被下载下来之后,白帽子打开其中的一个代码文件可以看到里面的源码:
2018.7.20 补充
B . svn泄露
SVN 是 Subversion 的简称,是一个开放源代码的版本控制系统,相较于 RCS、CVS,它采用了分支管理系统,它的设计目标就是取代 CVS。互联网上很多版本控制服务已从 CVS 迁移到 Subversion。
在使用SVN管理本地代码过程中,会自动生成一个名为.svn的隐藏文件夹,其中包含重要的源代码信息。但一些网站管理员在发布代码时,不愿意使用‘导出’功能,而是直接复制代码文件夹到WEB服务器上,这就使.svn隐藏文件夹被暴露于外网环境,黑客可以借助其中包含的用于版本信息追踪的‘entries’文件,逐步摸清站点结构。
攻击者可以使用工具 dvcs-ripper 下载网站源码,
此工具的 Github 地址:https://github.com/kost/dvcs-ripper。
利用命令如下:
rip-svn.pl -v -u http://www.localhost.test/.svn/
SVN 源码泄露案例 案例
2015 年 10 月,乌云白帽子提交漏洞 “我爱我家某处源码泄露”。缺陷编号:wooyun-2015-0149331
在我爱我家有一处域名为 data.5i5j.com , 白帽子发现下面的地址可以访问到:
http://data.5i5j.com/sitemetrics/.svn/entries
白帽子知道使用 svn 版本控制器会在目录中生成 .svn 文件夹,于是猜测该处存在源码泄露问题,于是使用工具 dvcs-ripper 对其进行了一番验证,验证证实了最初的猜测,并得出了下面的目录以及代码文件。
在文件目录中,发现一个文件名比较敏感,对其打开查看发现里面包含了数据库地址,用户名,密码等信息。
C . DS_Store 文件泄漏
.DS_Store 文件 MAC 系统是用来存储这个文件夹的显示属性的:比如文件图标的摆放位置。如果用户删除以后的副作用就是这些信息的失去。
这些文件本来是给 Finder 使用的,但它们被设想作为一种更通用的有关显示设置的元数据存储,诸如图标位置和视图设置。 当你需要把代码上传的时候,安全正确的操作应该把 .DS_Store
文件删除才正确。
因为里面包含了一些目录信息,如果没有删除,攻击者通过 .DS_Store
可以知道这个目录里面所有文件名称,从而让攻击者掌握了更多的信息。
在发布代码时未删除文件夹中隐藏的 .DS_store,被发现后,获取了敏感的文件名等信息。攻击者可以利用访问 URL(http://www.localhost.test/.ds_store )的方式来判断,是否存在DS_store
泄露,如果存在泄漏,使用工具:dsstoreexp,就可以轻松的下载出源代码。
如下面的命令:
ds_store_exp.py http://www.localhost.test/.DS_Store
DS_Store 泄露 案例
2015 年 9 月,乌云白帽子 “深度安全实验室” 提交漏洞 “TCL 某网站 DS_Store 文件泄露敏感信息(谨慎使用 Mac 系统)”,缺陷编号:wooyun-2015-091869
在 TCL 可视化系统事业部网站中,把苹果的隐藏文件 DS_Store 也给搬到生产坏境中 , 导致泄露了目录结构,从而获取到后台管理页面以及数据库文件。打开文件 http://www.tcl-cctv.com/.DS_Store 可以看到下面的内容。
通过图中的内容可以看到两处比较敏感的文件,tel_manage.php 以及 tcl_cctv.sql。于是白帽子通过此处泄露的信息,猜测到网站后台地址为:
http://www.tcl-cctv.com/tcl_manage.php
以及数据库文件 URL:
http://www.tcl-cctv.com/tcl_cctv.sql
打开数据库文件对应的 URL,在其中可以找到后台管理员账户和密码:
用户名:admin 密码:c5b5ae8bdfccc8beefec ,通过 cmd5.com 解密后,可以得到真实的密码。
在后台 URL 中,输入账号密码,可以看见下图已经登录成功。
D . 网站源码压缩备份泄露
一般网站管理员在日常维护中,总会把网站源码给备份一下,防止网站出现问题时,能马上的恢复使用,不过一般的管理员安全意识不高,在备份的时候,会使用一些常见的压缩备份名,而且不光使用常见的备份名字,大部分的管理还会把备份好的源码直接放在网站根目录里,这样给一些不法之徒,提供了一个很方便的渗透思路,或者有些直接不需要渗透了,因为备份中的数据,就已经满足那些不法之徒的需求了。
网站源码压缩备份示例:
部分常见的网站源码压缩备份名:
0.rar
web.rar www.rar wwwroot.rar back.rar root.rar
temp.rar
backup.rar bbs.zip website.rar 也可能是别的zip等
常用探测源码备份工具:
这个其实不是靠工具的,是靠字典的,工具的话,网上任何能扫目录的工具,都可以用来探测源码备份的,不过常见的还是用的 御剑1.5 ,或者自己写的一些扫目录的小脚本工具。
备份文件泄露扩展名获取
备份文件泄露又分为两种情况, 一种是运维人员偷懒地直接在网站根目录用类似tar -czvf bakup.tgz *
的命令将网站进行备份,
这样整站的源代码都能直接被用户打包下载了; 另一种是开发或者运维人员使用的编辑器修改文件时自动备份了所编辑的网页内容,
如vim的.swp
, 从而泄露了该网页的源代码.
利用方法
对于打包文件而言, 渗透测试人员可以用{常用文件名}+{常用压缩包后缀}的方式扫描网站, 说不定会有意外惊喜。对于网页的临时备份文件, 可以扫描对应页面的.swp或者.bak .swo等后缀, 说不定也能找到有用的信息.
.index.php.swp | bak| swo .index.php~ 有点没点都需要试
对于剩下的还有一些其他的泄露方式,也不是很重要的,就将其列在附录里,详见附录一。
(3)开发者控制台
在我们浏览网页时,我们可以使用开发者控制台观察网页的源码,观察我们此时所有的请求和响应。
在具体的实验中,在前端无法发现任何有用的信息时,我们就可以观察网页的源码和请求响应等,来发现一些有用的信息
如果是请求和响应的话 最好还是使用berp suite 因为我们可以编辑和重放
一般可以遇到以下情况
(1)网页中特殊的隐藏的输入框 将type="hidden" 变为 type="text"
(2)网页元素的属性 要求输入很大的数 但是输入框被限制在三个输入 更改maxlength=9
(3)js代码等的限制等 观察代码对输入等的要求 构造输入
一般的情况下用的不多了,大多数都是使用的Bp,但是确实有一些部分需要我们使用开发者控制台
(4)302跳转
在web基础中我们已经提及过,302的作用我们也就大概过一下,302重定向又称之为302代表暂时性转移(Temporarily Moved ),英文名称:302 redirect。 也被认为是暂时重定向(temporary redirect),一条对网站浏览器的指令来显示浏览器被要求显示的不同的URL,当一个网页经历过短期的URL的变化时使用。一个暂时重定向是一种服务器端的重定向,能够被搜索引擎蜘蛛正确地处理。
我们常见的套路包括第一个例题,跳转页面包含信息,这就需要我们使用Bp抓包等,这是最常见的,我们的要访问的网址被重定向到别的地方。
附录1 其他源码泄露利用
E. hg/Mercurial
Mercurial的意思是水银, 所以缩写成hg(汞), 也是一个版本管理软件. 用法和git有点类似, 但也保留了svn命令简明的特点,而且原生地支持Windows/MacOS/Linux三大平台, 不像git需要MinGW才得以运行, 所以当今也有不少人偏向于用hg做版本控制.
关键文件
与git类似, hg在初始化项目时, 会在项目的根目录下创建一个名为.hg
的隐藏文件夹,里面包含了代码和分支的修改记录和开发人员的相关信息.
泄露内容
- 项目源代码
- 项目仓库地址
- (可能)仓库的用户名
- 其他
利用方法
手动利用, 下载+回滚:
wget -r --no-parent --mirror http://www.example.com/.hg
cd www.example.com && hg revert
也可以用上面提到的dvcs-ripper工具来利用
F. bzr/Bazaar
bzr也是个版本控制工具, 虽然不是很热门, 但它也是多平台支持, 并且有不错的图形界面,所以也有一些人认为bzr比git要好用,只是对于渗透测试人员来说, 其实都无所谓就是了.
关键文件
bzr在初始化项目时(bzr init/init-repo), 会在项目根目录产生名为.bzr
的隐藏目录, 同样暴露了源代码和用户信息.
泄露内容
- 源代码
- 仓库地址
- 开发者的信息
- ...
利用方法
没用过bzr工具, 不过查询文档得知可用bzr revert
命令来进行回滚:
wget -r --no-parent --mirror http://www.example.com/.bzr
cd www.example.com && bzr revert
当然dvcs-ripper工具也是可以的.
G cvs
CVS是一个年代比较久远的版本控制系统, 通过它可以追踪源代码的历史变化记录.但是因为功能比较简单, 而且不支持分支, 所以很早前就被上面提到的svn替代了.
关键文件
cvs项目在初始化(cvs checkout project
)的时候, 会在project
目录下创建一个名为CVS
的目录,其中保存了各个文件的修改和commit记录. 通过此目录可以获取代码的历史版本. 其中两个关键文件为:CVS/Root
和CVS/Entries
, 分别记录了项目的根信息和所有文件的结构
泄露内容
因为是纯客户端的工具, 所以只会泄露源代码
利用方法
下载CVS文件夹然后通过cvs命令获取源码信息, 不过似乎没有直接的回滚操作, 需要做点额外的处理.
wget -r --no-parent --mirror http://www.example.com/CVS
cd www.example.com && cvs diff *