渗透经验分享之文件操作漏洞拓展
上文分享了注入相关的东西,注入也可以对文件进行操作,本文是对文件操作漏洞的拓展。
# 文件操作漏洞
- 文件上传
- 文件读取
- 文件写入
- 文件删除
- 文件包含
一般java的站点存在文件系列的洞比较多(除了文件包含)。
# 文件上传
在哪最容易发现上传点?注册登陆用户头像、发布文章发布产品、js中的文件上传接口、一些编辑器,甚至还有扫目录扫出来的/uploader
路径,访问出现这种405的uploader一般就是上传。比如:
这个时候本地构造POST表单就行了,file参数靠猜,有的时候任意参数就行,有的时候post提交过去会报错缺失什么参数,随机应变。
一般上java的站点扫出来这种uploader比较多,都是上传写的servlet接口。
上传其实upload-labs里的绕过姿势已经非常全面了。拿到一个上传点,首先应该判断能不能正常上传、白名单还是黑名单、怎么校验的在哪校验的,这些没什么好讲的。聊一些比较恶心的文件上传。
- 上传不返回路径
- 上传不在web目录
上传不返回路径多出现在市长邮箱
、投诉举报
这类功能中,其实这种功能本来就没打算给你返回路径。我的思路一般是找注入点,只要没返回路径的文件上传并且返回给你一个ID给你当作凭据的(此处只是举例,类推),肯定保存路径在数据库中。找到注入就等于找到了文件路径。
如果没有注入呢?找找日志。比如tp的日志是有规律的,你可以传一个非法文件名1.;
,在tp的日志中报错,说不定就有路径。这个我自己是真实碰到的,一个laravel的框架,在laravel.log中报错返回了错误文件名的文件路径,猜出来了shell的路径。
如果没有日志呢?猜。形如/Files/
、/uploads/
目录,猜要有根据的猜,观察网站的图片和文件地址,以此拼接你的shell文件名,多数以时间戳命名,bp爆破下就行了。
再来说不在web目录的,上传的时候关注下请求包的几个参数,有没有path
、filepath
、filename
、file_prefix
,甚至测一下../../1.jpg
文件名。如果上传不能跨目录其实你就应该转移关注点了。找文件包含、文件读取。
上传不在web目录的站,有这种功能的很多都有文件读取的洞,因为传上去的文件总归是要下回来的,找找形如download?path=1.jpg
这种。拓展思路,举一反三。
另外就是文件包含了,没啥可说的。
# 文件读取
限制条件有两个
- 限制前缀
- 限制后缀
不限制前缀的时候可以通过file
协议读文件,php可以通过伪协议读文件,当限制前缀的时候Linux其实还好,可以通过../
跳目录,但是windows没办法通过../
跳盘符。
限制后缀就比较恶心了,php好像可以用#
、?
符号去绕过。具体看 chybeta师傅的文章 吧。
确定是文件读取之后,如何进一步拿权限?个人习惯先读/etc/passwd
,权限够大直接读/etc/shadow
,然后根据/etc/passwd
读每个用户的.bash_history
,读中间件的配置文件,以此判断web的绝对路径。然后逐个读源码,java的话可以读一下war包,搞到代码之后就变得so easy
了。
举个例子:文件读取读到了旁站的war包,旁站是一个监控,就一个登陆框,而war包中配置文件里写死了密码,刚好登陆进去直接可以执行命令rce。
weblogic的话可以直接读console账号密码,登陆console部署war包getshell。
反正就是文件读取=60%中间件特性+10%猜+30%运气。
# 文件写入
文件写入拿shell很简单,直接指定web目录和内容就行了。但是这个一般上会有限制,比如内容检测(不能写php标签之类),文件名检测(不能写.php
)。
- 写计划任务或许为一个好的选择
- 覆盖原有配置文件(比如覆盖安装锁)
- 写ssh
文件写入好像没什么好说的,先就这样,想到什么补充什么。
# 文件删除
实战没怎么遇到过这个洞
- 删除配置文件
- 删除安装锁(造成重装)
- 删除waf文件
include waf.php
# 文件包含
文件包含多为php站点,所以伪协议读文件这些都是基本操作。不过有一说一,除了ctf中碰到过文件包含,实战中没遇到过。
需要提一嘴的是phar可以伪装为图片,你可以传一个1.jpg,绕过内容检测,然后用phar://
协议包含。还有就是smb包含,php缓存文件包含。
或许渗透变化万千的思路才是我真正喜欢他的原因。
文笔垃圾,措辞轻浮,内容浅显,操作生疏。不足之处欢迎大师傅们指点和纠正,感激不尽。
如果你觉得这篇文章对你有所帮助,欢迎赞赏或关注微信公众号~