在对网站程序代码的安全检测当中,网站文件任意查看漏洞在整个网站安全报告中属
于比较高危的网站漏洞,一般网站里都会含有这种漏洞,尤其平台,商城,交互类的网站较
多一些,像普通权限绕过漏洞,导致的就是可以查看到网站里的任何一个文件,甚至可以查
看到网站的配置文件config.php conn.php等等。
我们SINE安全公司在对gitea开源程序代码进行网站安全检测的时候发现存在网站文件任意查
看漏洞,没有授权的任意一个用户的账号都可以越权创建gitea的lfs对象,这个对象通俗来讲
就是可以利用gitea代码里写好的第三方api借口,进行访问,可以实现如下功能:读取文件,
上传文件,列目录等等的一些读写分离操作。其中API李的oid是gitea对象的一个值,这个值是
用的哈希,在前端输入的过程中并没有对其进行ID值的判断与安全过滤,导致可以插入任意的
字符传入到服务器的后端中去,导致可以执行查看文件的漏洞。我们来现场还原下网站漏洞的
利用:
看漏洞,没有授权的任意一个用户的账号都可以越权创建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 用户密码文件。
这个漏洞是需要有前提条件的,就是gitea默认开启公开访问,然后在创建gitea对象的时候,
才会产生绕过权限查看文件的漏洞,为什么说要公开访问,是因为公开以后,之前创建的
gitea对象才会生效,紧接着检查当前用户是否有权限访问LFS对象。我们看到我们POST发
送数据过去以后,返回来的数据包是200状态,也就是发送成功,gitea对象已经成功创建了
,我们POST数据里写的oid=值是....../../../etc/passwd,这个代码的意思就是查看系统根目
录下的etc文件夹下的linux 用户密码文件。
接下来我们就要查看这个/etc/passwd文件里的内容了,该如何查看这个密码文件呢? 我们
用get的方式进行提交,我们编辑一下网址:
用get的方式进行提交,我们编辑一下网址:
http://sinesafe.com/vulhub/repo.git/info/lfs/objects/ [....../../../etc/passwd]/sth,然后打开
chinaz的url编码工具进行编码一下,就可以了,我们get提交访问的时候就查看到了
/etc/passwd文件的内容。
chinaz的url编码工具进行编码一下,就可以了,我们get提交访问的时候就查看到了
/etc/passwd文件的内容。
那么该网站漏洞是如何产生的呢?
我们来看下gitea的程序源代码,发现代码里的meta.oid值是调用的transformKey函数,这
个函数的作用就是将oid的值转换成了其他的编码方式,导致字符里内容可以随意写入,
没有长度限制,文字限制,当我们POST把oid值改为....../../../etc/passwd的时候就可以直
接调取了这个文件并读取出来。
个函数的作用就是将oid的值转换成了其他的编码方式,导致字符里内容可以随意写入,
没有长度限制,文字限制,当我们POST把oid值改为....../../../etc/passwd的时候就可以直
接调取了这个文件并读取出来。
网站漏洞修复建议:
尽快升级gitea的版本,并做好网站安全加固,POST数据包进行安全过滤,有条件的话请部
署get post防火墙,对get post方式提交的数据进行安全过滤,当发现查看系统文件的时候,
比如:/etc/passwd请直接过滤拦截,并返回301状态。
署get post防火墙,对get post方式提交的数据进行安全过滤,当发现查看系统文件的时候,
比如:/etc/passwd请直接过滤拦截,并返回301状态。