本文作者:久久久久久久(贝塔安全实验室-核心成员)
一:起因,朋友给我发了个php文件
php文件
2-12行没有任何限制,任意上传,网上随便找个前端的上传代码
二:本地测试上传
后面用json_encode加密,百度在线json解密就好了
上传失败,发现本地创建的upload文件夹也无文件,遂再次对代码进行查看
发现后端代码是$_FILES['photo-path'],前端代码是name=file。客户端文件系统的文件的名称与后端不对应,将其改为photo-path,重新上传
发现已经可以成功上传。
三:确定后缀
第6行与第10行可得文件名只是用时间加随机2位数命名,得到思路,本地用$t=date("YmdHis");确定时间开始时间,记录一次,上传成功,刷新记录时间,得到最后时间,中间加上00-99爆破即可。
得到第一次时间为20190907123413,最后一次时间为20190907123421。即从201909072341300到2019090712342199
打开bp开始抓包,爆破
遗憾的没跑出,404。
四:这时我朋友发话了,他说传上去就能确定时间,一顿操作,拿下了。
细看了下他操作,它是将时间代码放在在线网站验证,然后用python跑随机
发现与我不同的是时间不同,我的比他时间慢了差不多8个小时。我又本地与在线相同代码同时跑下
五:分析data函数
string date ( string format [, int timestamp ] )。format 必需。规定时间戳的格式。timestamp 可选。规定时间戳。默认是当前的日期和时间。但php在使用date函数的时候,是以UTC为参照物计算时区。时间获取默认是从0时区的时间,但中国是在东八区,所以刚好相差八个小时。
常见解决办法
1)php.ini配置文件中规定时区
date.timezone = "PRC"(PRC为中华人民共和国的英文单词缩写)
2)在php代码开头加上date_default_timezone_set('Asia/Shanghai')或者是ini_set('date.timezone','Asia/Shanghai')
六:参考链接
https://www.tangshuang.net/2794.html
https://www.runoob.com/php/php-ref-date.html