一次简单的任意文件下载到上传SHELL

0x00

熬夜护网的朋友发来一个站,说遇到了问题,让我看看咋回事,那就看看到底咋回事。

说是网站有任意文件上传,但上传目录不在Web目录下,路径是这样的:

/opt/work/upload/{username}/01/{filename}时间戳.jpg

他注册了一个用户名为../{Web路径}的用户,然后上传发现程序自动把username转换成了大写,又因为是Linux系统,所以,卒。

0x01

登录系统后,发现存在两处任意文件下载,和一处朋友说的任意文件上传。

下载1:/file/showImage?path=/etc/passwd
下载2:/file/downloadFile?filepath=/etc/passwd
上传1:/file/uploadFile?type=01

通过任意文件下载查看.bash_histroy文件,得到Web路径为:

/opt/apache-tomcat-8.0.53/webapps/ROOT

在重现他说的方法:注册一个用户名为Web路径的用户再上传,确实用户名会被转换成全大写,无解。但是上传的时候我发现type=01也会出现在文件目录中,那么type就变成了一个可控路径,就不需要用户名了。

0x02

已知上传文件路径和Web路径:

上传文件路径:/opt/work/upload/
Web路径:/opt/apache-tomcat-8.0.53/webapps/ROOT

将上传时的type参数修改为../apache-tomcat-8.0.53/webapps/ROOT/即可将文件上传至Web路径下

这里报错500,开始还以为上传失败了,在将type改成../apache-tomcat1aa测试后,使用任意文件下载漏洞下载该目录,发现已成功创建。

那么现在只需要猜出时间戳就可以找到文件了。

0x03

已知文件名的生成格式是{filename}时间戳,也就是文件名+时间戳,那么通过上传文件请求的响应时间就可以得出大概的时间戳。

通过下面的响应头,Date可以得出响应时间是2019/8/21 03:51:11 GMT,因为是GMT,所以需要在小时位+8,最终时间是2019/8/21 11:51:11。

HTTP/1.1 500 Internal Server Error
Server: nginx/1.14.0
Date: Wed, 21 Aug 2019 03:51:11 GMT

转换得到大概的毫秒时间戳

得到大概的时间戳就可以开始跑啦,扔到Burp里,变量设置为后4位就可以跑出来了,当然有时候响应时间得到的时间戳会有1秒左右的误差。

0x04

其实真的很简单了,上传的时候留意参数,不要把自己陷入一个死的思路里。

又水了一篇博客。

发表评论

电子邮件地址不会被公开。 必填项已用*标注