web敏感信息泄漏(36)

预备知识
信息泄漏是指在正常情况下不能被普通用户访问的敏感信息没有被应用程序所保护,能够直接访问。就web来说这种类型的问题往往会带来巨大的危害,攻击者不仅可以轻松收集用户手机号,姓名等隐私信息,更可以借此攻入企业后台甚至是getshell。下面介绍一些常见的web信息泄漏漏洞。 

.git源码泄漏

在运行git init初始化代码库的时候,会在当前目录下面产生一个.git的隐藏文件,用来记录代码的变更记录等等。在发布代码的时候,开发人员把.git这个目录没有删除,直接发布了。黑客使用这个文件,可以用来恢复源代码。

漏洞案例:https://www.uedbox.com/post/20480/

svn源码泄漏

SVN(subversion)是源代码版本管理软件,造成SVN源代码漏洞的主要原因是管理员操作不规范。“在使用SVN管理本地代码过程中,会自动生成一个名为svn的隐藏文件夹,其中包含重要的源代码信息。但一些网站管理员在发布代码时,不愿意使用‘导出’功能,而是直接复制代码文件夹到WEB服务器上,这就使.svn隐藏文件夹被暴露于外网环境,黑客可以借助其中包含的用于版本信息追踪的‘entries’文件,逐步摸清站点结构。

漏洞案例:https://www.uedbox.com/post/11873/

js敏感信息泄露

JavaScript作为一种相当简单但功能强大的客户端脚本语言,本质是一种解释型语言。所以,其执行原理是边解释边运行。上述特性就决定了JavaScript与一些服务器脚本语言(如ASP、PHP)以及编译型语言(如C、C++)不同,其源代码可以轻松被任何人获取到。一些粗心的开发者将各式敏感信息存储在JavaScript脚本中,由于JS的特性,攻击者可以对这些信息一览无余,从而导致对WEB服务和用户隐私造成不同程度的威胁。

漏洞案例:https://www.uedbox.com/post/43499/

网站备份压缩文件泄漏

在网站的使用过程中,往往需要对网站中的文件进行修改、升级。此时就需要对网站整站或者其中某一页面进行备份。当备份文件或者修改过程中的缓存文件因为各种原因而被留在网站web目录下,而该目录又没有设置访问权限时,便有可能导致备份文件或者编辑器的缓存文件被下载,导致敏感信息泄露,给服务器的安全埋下隐患。

漏洞案例:https://www.uedbox.com/post/43671/

phpinfo信息泄漏

phpinfo()函数主要用于网站建设过程中测试搭建的PHP环境是否正确,很多网站在测试完毕后并没有及时删除,因此当访问这些测试页面时,会输出服务器的关键信息,这些信息的泄露将导致服务器被渗透的风险。

漏洞案例:从一个phpinfo到一次半途而废的腾讯内网漫游之旅

一个小小的信息泄漏,再加上一些偶然的因素,就可能导致一个系统被渗透,并获取了服务器权限,下面开始动手实践。

实验目的
通过该实验了解常见的web敏感信息泄漏漏洞原理,掌握常见的web信息泄漏漏洞的利用和漏洞防护。

实验环境
kali      IP:随机

win7    IP:10.1.1.3

脚本下载地址:http://tools.hetianlab.com/tools/T002.zip

实验步骤一
.git源码泄漏


进入win实验机,打开c:/phpstudy/www/easytalk/,在空白处右键选择Git Bash Here
web敏感信息泄漏(36)_第1张图片
依次运行命令,git init/git add *,浏览器访问http://10.1.1.3/easytalk/.git/,可以发现能够访问到.git目录,这样就已经造成漏洞了

漏洞利用,打开kali虚拟机,进入githack目录,运行漏洞利用脚本即可把网站源码下载回来

脚本工作原理:

1.下载.git/index文件,这是一种git特有的格式,在该文件中包含着所有的文件名和文件SHA1值

2.根据该文件SHA1值到.git/objects文件夹下载对应的文件,具体路径为www.xxx.com/.git/objects/xx/checksum

3.zlib解压文件,按原始的目录结构写入源代码

(脚本下载地址:https://github.com/lijiejie/GitHack)
web敏感信息泄漏(36)_第2张图片
查看下载回来的源码,可以发现网站数据库配置文件泄露出数据库密码了
web敏感信息泄漏(36)_第3张图片
除此之外,如果项目代码有敏感信息,但开发人员粗心大意没有删除这些敏感信息,而是直接执行git push上传代码到github,同样会造成敏感信息泄漏

 比如下面一些谷歌搜索语法:

site:Github.com smtp password

site:Github.com password

site:Github.com ssh password

site:Github.com sa password

site:Github.com root password

site:Github.com inurl:sql

site:Github.com 密码

      。。。。

部分搜索到的案例如下图所示
web敏感信息泄漏(36)_第4张图片
web敏感信息泄漏(36)_第5张图片
漏洞案例:一个github引发的畅捷通渗透测试

修复方案,对/.git目录设置403禁止访问权限,或者直接将.git目录删除,同时进行git push之前检查上传的项目是否有敏感信息,如果有及时删除后再上传。
web敏感信息泄漏(36)_第6张图片


实验步骤二
svn源码泄漏

svn<=1.6


从svn的结构图可以看到一个目录text-base,这里有我们源文件的备份,比如要下载www.xxx.com/phpinfo.php,直接访问目录www.xxx.com/.svn/text-base/phpinfo.php.text-base,一般的服务器既不会阻止该目录也不会解释该后缀,我们就可以直接读到本地来。现在只是访问最顶层的文件信息,那怎么遍历呢?这里面就有.svn/entries,这个文件包含着该基础目录下所有的文件和目录,直接递推查找就行。

svn>1.6
svn在1.6之后引入了wc.db来管理文件,该文件位于.svn/wc.db。普通文件位置:www.xxx.com/.svn/pristine/xx/checksum.svn-base,checksum是文件的sha1值,xx则是它的前两位。那这个checksum去哪找呢?就是我们刚才提到的wc.db,这是一个sqlite数据库,下面分析下这个数据库的结构。本次实验步骤使用的svn服务版本大于1.6

进入kali实验机,浏览器访问http://10.1.1.3/test/.svn/,下载wc.db,

web敏感信息泄漏(36)_第7张图片
使用sqlite3查看数据库的表 sqlite3 wc.db .table
web敏感信息泄漏(36)_第8张图片
继续查询NODES表里local_relpath和checksum的字段,可以看到所有的文件以及对应的sha1值,sqlite3 wc.db 'select local_relpath, checksum from NODES'
web敏感信息泄漏(36)_第9张图片
下一步根据sha1值构造下载连接

sqlite3 wc.db 'select local_relpath, ".svn/pristine/" || substr(checksum,7,2) || "/" || substr(checksum,7) || ".svn-base" as alpha from NODES;'

web敏感信息泄漏(36)_第10张图片
所以我们可以根据以上思路利用python编写漏洞利用脚本,下载地址,已放入实验机
web敏感信息泄漏(36)_第11张图片
https://github.com/wsg00d/tool/blob/master/svn_tool.py

在kali里运行命令 python svn_tool.py http://10.1.1.3/test/
web敏感信息泄漏(36)_第12张图片
同样会导致源码泄漏,并可以查看数据库配置文件和数据库帐号密码。
web敏感信息泄漏(36)_第13张图片
 修复方案:同样可以删除.svn目录或者设置禁止访问此目录

实验步骤三
phpinfo信息泄漏


使用nikto扫描目标:nikto -h http://10.1.1.3/

可以发现扫描出有phpinfo和phpmyadmin 


根据前两步得到的数据库帐号密码root/root,登录进入phpmyadmin

同时访问phpinfo页面得到网站物理路径     
web敏感信息泄漏(36)_第14张图片
现在登录进入phpmyadmin并且为root用户,也有网站物理路径,那么可以从phpmyadmin尝试导出webshell,点击sql,输入语句

select '' into outfile ‘c://phpstudy//www//shell.php’
web敏感信息泄漏(36)_第15张图片
成功连接一句话木马

除此之外,php有个特性是我们向服务器上任意php文件post请求上传数据时,都会生成临时文件,默认是传到tmp目录下,并且文件名是随机的。当然,我们可以暴力猜解,但是这样子还是太过鸡肋的。国外一个安全研究者提出利用phpinfo页面来找出所上传的文件路径,因为phpinfo会记录一些请求,包括在服务器上生成的临时文件名字和目录。所以借助phpinfo()我们可以找出临时文件名并配合LFI利用可以getshell。

你可能感兴趣的:(护网行动系列,前端)