脚本小子勇闯java站

文摘   科技   2023-02-16 08:18   四川  








最近上班学(摸)java(鱼)的时候,没做好隐蔽工程,不小心被老大发现了,于是老大给了一个java网站,让我看看能不能搞搞代码啥的,但是我java才学到mybatis啊大哥!

正当我想着要不就拒绝老大的好意的时候,微信又响了。

emmmmm....诡计多端的管理层。



01
看看网站

点开网站,一个非常标准的ZF单位官网,嗯,非常标准(你懂的),为了杜绝银手镯,这里就不放网站的图了。总之就是,非常干净(无后台、无注入、页面上都是文章)。

算了,看看有没有js能够分析一下吧,最好可以bypass java,然而js没翻到什么有用的信息,倒是F12之后发现了这个。

作为一名资深安服仔,一看到这个download?newName=xxxx就坐不住了,赶紧测了一下有没有任意文件下载。

    一时间不知道该哭还是该笑,看来bypass java梦是碎了,还好站点不算复杂,我那点微薄的java知识应该可以覆盖。

02
java servlet

    

首先拿到java站点,应该理清楚的就是站点各接口对应的java类之间的关系。Servlet是在 Java Web容器中运行的小程序,通常我们用Servlet来处理一些较为复杂的服务器端的业务逻辑。它是作为来自 Web 浏览器或其他HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。相当于是浏览器接口到服务器端具体实现类的映射程序。

而在servlet3.0以下的版本中,都需要在web.xml中配置servlet标签,这也就说明了为什么在上一章中测试任意文件下载的时候要先查看web.xml中的内容。


03
文件上传

通过查看web.xml文件,理清楚了接口和具体类的映射关系之后,发现文件上传接口com.fserver.FileUpload类中,赶紧下载下来看看。

在java文件上传中,servletFileUpload是一种常见的方式,ServletFileUpload类是Apache组件处理文件上传的核心高级类,通过使用parseRequest(HttpServletRequest)方法可以将HTML中每个表单提交的数据封装成个Fileltem对象,然后以List列表的形式返回。该方式依赖commons-fileupload组件。

commons-fileupload处理文件上传的实现过程:

  1. 创建一个DiskFileItemFactory工厂:

DiskFileItemFactory factory = new DiskFileItemFactory();
  1. 创建文件上传解析器:

ServletFileUpload upload = new ServletFileUpload(factory);
  1. 判断上传的数据是否为MultipartContent数据

if(!ServletFileUpload.isMultipartContent(req)){    System.out.println("错误!");}

    当然除了commons-fileupload处理文件上传之外呢,还需要有一些其他的东西,比如通过HTTPServletRequest.getServletContext().getRealPath("路径名")设置上传文件路径等操作。那么从文件上传漏洞的角度来说,最重要的还是看上传文件的过滤条件啦,根据过滤条件来判断使用的绕过方法,这里不多赘述。

既然逻辑理清楚了,就可以看看目标站点的文件上传代码啦!

有价值的代码就在上图当中了,可以看出来文件上传之后是放在/WEB-INF/files的目录下的,并且没有做任何的过滤。

那就直接上传文件吧!

结束!


浅谈postMessage与安全漏洞

AKSK的利用姿势
记一次.net审计

穿

-OARCE

Gobypass 



EN







川云安全团队
川云安全团队官方公众号,不定期推送技术文章,渗透技巧和热点新网等文章。