网站文件任意查看漏洞详情与利用



           在对网站程序代码的安全检测当中,网站文件任意查看漏洞在整个网站安全报告中属

于比较高危的网站漏洞,一般网站里都会含有这种漏洞,尤其平台,商城,交互类的网站较

多一些,像普通权限绕过漏洞,导致的就是可以查看到网站里的任何一个文件,甚至可以查

看到网站的配置文件config.php conn.php等等。
 
 
我们SINE安全公司在对gitea开源程序代码进行网站安全检测的时候发现存在网站文件任意查

看漏洞,没有授权的任意一个用户的账号都可以越权创建gitea的lfs对
象,这个对象通俗来讲

就是可以利用gitea代码里写好的第三方api借口,进行访问
,可以实现如下功能:读取文件,

上传文件,列目录等等的一些读写分离操作。其
中API李的oid是gitea对象的一个值,这个值是

用的哈希,在前端输入的过程中并
没有对其进行ID值的判断与安全过滤,导致可以插入任意的

字符传入到服务器的后
端中去,导致可以执行查看文件的漏洞。我们来现场还原下网站漏洞的

利用:
 
首先POST数据过去,POST到的地址为 /vulhub文件夹下的repo.git目录/info/lfs/objects文件。

如下图:

 

 
我们POST数据过去的时候就可以在OID这个值里插入一些可以查看网站文件的代码,但是

这个漏洞是需要有前提条件的,就是gitea默认开启公开访问,然后在创建
gitea对象的时候,

才会产生绕过权限查看文件的漏洞,为什么说要公开访问,是
因为公开以后,之前创建的

gitea对象才会生效,紧接着检查当前用户是否有权限
访问LFS对象。我们看到我们POST发

送数据过去以后,返回来的数据包是200状态,
也就是发送成功,gitea对象已经成功创建了

,我们POST数据里写的oid=值
是....../../../etc/passwd,这个代码的意思就是查看系统根目

录下的etc文件夹
下的linux 用户密码文件。

 
接下来我们就要查看这个/etc/passwd文件里的内容了,该如何查看这个密码文件呢? 我们

用get的方式进行提交,我们编辑一下网址:
 
http://sinesafe.com/vulhub/repo.git/info/lfs/objects/ [....../../../etc/passwd]/sth,然后打开

chinaz的url编码工具进行编码一下,
就可以了,我们get提交访问的时候就查看到了

/etc/passwd文件的内容。

 
 
 
那么该网站漏洞是如何产生的呢?
 
我们来看下gitea的程序源代码,发现代码里的meta.oid值是调用的transformKey函数,这

个函数的作用就是将oid的值转换成了其他的编码方式,导致字符里内容
可以随意写入,

没有长度限制,文字限制,当我们POST把oid值改
为....../../../etc/passwd的时候就可以直

接调取了这个文件并读取出来。
 
网站漏洞修复建议:
 
尽快升级gitea的版本,并做好网站安全加固,POST数据包进行安全过滤,有条件的话请部

署get post防火墙,对get post方式提交的数据进行安全过滤,当发现查
看系统文件的时候,

比如:/etc/passwd请直接过滤拦截,并返回301状态。
分享: