任意文件读取rce记录

1.跨目录上传

对某系统进行测试时,发现有一处上传附件的功能,常规上传个文件试试

图片

发现返回包返回了重命名后的文件名称和系统的绝对路径

继续看上传的文件

图片

只有一个预览的功能,访问直接下载该文件,并没有什么用,请求链接为

DownloadServlet?type=W***J&filename=QQ%E5%9B%BE%E7%89%8720230414145425.jpg&pyName=9be6c164-d5a9-4a1e-a555-139ec1ce383d.jpg

回头仔细看上传的数据包,发现上传的参数type的值返回在了系统的绝对路径中,猜测type的值即为上传的文件夹,将type改成1尝试,印证了猜想,且是可以直接上传jsp的!

图片

既然上传文件参数可控,尝试使用../看是否可以跨目录上传,发现也是可以的

图片

至此得到一个上传路径可控的有效上传点,且通过上传返回的绝对路径知道了当前的user名称(这个后面很关键)。

那么接下来的思路就是寻找系统的web路径,直接上传脚本getshell。尝试了一些常用的手法例如构造报错等均未找到目标,尬住了一会儿后,想到了之前的跨目录上传,既然上传处可以使用../进行跨目录,那么上传后的预览处呢?

2.任意文件读取

回到刚才的上传预览处

图片

将预览功能处的请求链接中的filename与pyname进行构造尝试,果不其然,发现一处任意文件读取

DownloadServlet?type=W***J&filename=QQ%E5%9B%BE%E7%89%8720230414145425.jpg&pyName=9be6c164-d5a9-4a1e-a555-139ec1ce383d.jpg

图片

得到任意文件读取后可以通过读取中间件的默认配置文件寻找更多信息,例如

tomcat

/usr/local/tomcat(tomcat-1.1.1(具体版本号))/conf/tomcat-users.xml/usr/local/tomcat(tomcat-1.1.1(具体版本号))/bin/catalina.sh(其中日志的配置路径)

apache

/var/log/apache2/access.log/var/log/apache2/error.log/var/log/httpd/access_log/etc/httpd/logs/access_log/etc/httpd/logs/error_log/etc/httpd/logs/error.log

nginx

/var/log/nginx(nginx-1.1.1(具体版本号))/access.log/var/log/nginx(nginx-1.1.1(具体版本号))/error.log/usr/local/var/log/nginx(nginx-1.1.1(具体版本号))/access.log/usr/local/nginx(nginx-1.1.1(具体版本号))/logs/etc/nginx(nginx-1.1.1(具体版本号))/nginx.conf

通过旁站的其他端口的web指纹,发现使用的是tomcat

图片

直接尝试读取tomcat的默认配置文件,均失败:)

接着尝试读取操作系统的默认路径,linux下常用路径如下

/etc/passwd                     账户信息/etc/shadow                     账户密码文件/etc/my.cnf                     mysql配置文件/root/.ssh/id_rsa               ssh-rsa私钥/etc/redhat-release             系统版本 /root/.bash_history             用户历史命令记录文件/home/user/.bash_history        特定用户的历史命令记录文件/root/.mysql_history            mysql历史命令记录文件/var/lib/mlocate/mlocate.db     全文件路径/proc/net/fib_trie              内网IP/proc/self/environ              环境变量/proc/self/loginuid             当前用户uid

最终通过/home/user/.bash_history中成功找到了tomcat的web路径

图片

3.getshell

万事具备,直接上传至根目录下,访问

图片

根目录下不解析,直接跳转到了登录页面,但是可以看到跳转目录携带了我们访问的jsp。

这种情况下,有账号的话(本系统提供了注册功能),直接登录后访问即可

图片

4.一些拓展

上述的情况都是登录后测试的,如果上传点是fuzz出来的,没有目标系统的账号,也可以采取如下几种方案。

  • 1.尝试直接上传至系统的静态目录,例如系统自动加载的js文件的目录。

  • 2.尝试绕过fillter的鉴权,一般从fillter对目录的白名单或是文件后缀的白名单两个角度绕过入手。

附一些实战的案例。

目录白名单绕过

图片

图片

文件后缀白名单绕过

图片

图片

其他情况绕过

图片

图片

3.寻找其他的web可以直接访问且知道路径的目录

例如本案例中的

图片

图片

直接构造上传

图片

浏览器访问,成功rce

图片

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值