c执行cmd命令并返回结果_命令注入详解|OWASP Top 10安全风险实践(三)

本文深入探讨命令注入,特别是在C中执行CMD命令可能导致的安全风险。介绍了如何利用用户输入执行恶意命令,危害包括执行非法操作、获取敏感信息。提供了代码分析和修复建议,如限制用户输入验证和避免使用shell执行命令。
摘要由CSDN通过智能技术生成

本文为一些列连载文章之一,不定期更新,计划目录如下:

OWASP介绍

SQL注入

命令注入

XML外部实体注入

XPATH注入

反射式、DOM及存储XSS

失效的身份认证和会话管理

不安全的直接对象引用

安全配置错误

敏感信息泄露

功能级访问控制缺失

跨站请求伪造

服务端请求伪造

文件上传漏洞

未验证的重定向和转发

不安全的反序列化

使用含有已知漏洞的组件

一、     注入

注入攻击漏洞,例如SQL,OS 以及 LDAP注入。这些攻击发生在当不可信的数据作为命令或者查询语句的一部分,被发送给解释器的时候。攻击者发送的恶意数据可以欺骗解释器,以执行计划外的命令或者在未被恰当授权时访问数据。

  1.  命令注入

  • 漏洞利用演示

86086832823a6439095e9dff6e5c31da.png

  • 漏洞危害说明

攻击者可以通过当前用户权限执行任意的操作系统命令,并获取返回结果。如当前服务是管理员账号,则危害更为严重。命令执行漏洞危害包括:增加、修改、删除系统账号和密码,上传、下载机密文件或木马后门文件等。

  • 漏洞代码分析

后台主要代码:

         Stringparams = request.getParameter("cmd");        Runtime rt =Runtime.getRuntime();        String[] cmd= new String[3];        cmd[0] = "cmd.exe" ;        cmd[1] = "/C";        cmd[2] = "ping" + params;          out.println("
执行命令:" + cmd[0] +cmd[1]+" "+cmd[2]); Process p =rt.exec(cmd); BufferedReaderbr = new BufferedReader(newInputStreamReader(p.getInputStream())); String line= null; StringBuffersb = new StringBuffer(); while ((line =br.readLine()) != null) { sb.append(line).append('\n'); } br.close(); out.println(sb.toString().replaceAll("&nbsp",""));%>

最终服务端执行的命令格式:cmd /c IP,其中IP是用户的输入。

如果用户输入127.0.0.1 && whoami,最终执行的是cmd /cping 127.0.0.1 && whoami,即在一个新的shell下通过&&连接符执行了2条命令。&&表示ping 127.0.0.1成功后继续执行后一个命令whoami。同样也可通过其它命令连接字符串如& | || 等进行攻击。

  • 漏洞代码修复

防止命令注入可使用:

a. 如果使用语言提供的API或函数执行命令,需要理解API或函数是否调用了shell来执行命令。如java中的Runtine类的静态方法exec,执行命令时默认不会调用shell。所以在当前场景下可以直接使用Runtime.exec直接执行ping命令。

修复代码参考:  

    String params = request.getParameter("cmd");    Runtime rt = Runtime.getRuntime();    Process p = rt.exec("ping " +params);    BufferedReader br = newBufferedReader(new InputStreamReader(p.getInputStream()));    String line = null;    StringBuffer sb = newStringBuffer();    while ((line =br.readLine()) != null) {            sb.append(line).append('\n');        }        br.close();        out.println(sb.toString().replaceAll("&nbsp",""));%>

类似地,nodejs的exec命令会先进行Shell语法解析,因此用exec函数也会导致命令注入的问题。

b. 如果使用系统shell命令执行,则需根据使用场景对用户输入进行验证

本场景可以使用正则表单判断输入是否是IP地址格式。

 50be0adfbe89adbcc8439f6dc0647e2c.gif

3c635c81e7a69fbbbdd7b87eac59103c.png

了解新钛云服

新钛云服正式获批工信部ISP/IDC(含互联网资源协作)牌照

深耕专业,矗立鳌头,新钛云服获千万Pre-A轮融资

原电讯盈科中国区副总裁加入新钛云服「附专访」

新钛云服,打造最专业的Cloud MSP+,做企业业务和云之间的桥梁

新钛云服一周年,完成两轮融资,服务五十多家客户

上海某仓储物流电子商务公司混合云解决方案

新钛云服出品的部分精品技术干货

国内主流公有云VPC使用对比及总结

万字长文:云架构设计原则|附PDF下载

刚刚,OpenStack 第 19 个版本来了,附28项特性详细解读!

Ceph OSD故障排除|万字经验总结

七个用于Docker和Kubernetes防护的安全工具

运维人的终身成长,从清单管理开始|万字长文!

OpenStack与ZStack深度对比:架构、部署、计算存储与网络、运维监控等

什么是云原生?

IT混合云战略:是什么、为什么,如何构建?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值