本文为一些列连载文章之一,不定期更新,计划目录如下:
OWASP介绍
SQL注入
命令注入
XML外部实体注入
XPATH注入
反射式、DOM及存储XSS
失效的身份认证和会话管理
不安全的直接对象引用
安全配置错误
敏感信息泄露
功能级访问控制缺失
跨站请求伪造
服务端请求伪造
文件上传漏洞
未验证的重定向和转发
不安全的反序列化
使用含有已知漏洞的组件
一、 注入
注入攻击漏洞,例如SQL,OS 以及 LDAP注入。这些攻击发生在当不可信的数据作为命令或者查询语句的一部分,被发送给解释器的时候。攻击者发送的恶意数据可以欺骗解释器,以执行计划外的命令或者在未被恰当授权时访问数据。
命令注入
漏洞利用演示
漏洞危害说明
攻击者可以通过当前用户权限执行任意的操作系统命令,并获取返回结果。如当前服务是管理员账号,则危害更为严重。命令执行漏洞危害包括:增加、修改、删除系统账号和密码,上传、下载机密文件或木马后门文件等。
漏洞代码分析
后台主要代码:
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(" ",""));%>
最终服务端执行的命令格式: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(" ",""));%>
类似地,nodejs的exec命令会先进行Shell语法解析,因此用exec函数也会导致命令注入的问题。
b. 如果使用系统shell命令执行,则需根据使用场景对用户输入进行验证
本场景可以使用正则表单判断输入是否是IP地址格式。
了解新钛云服
新钛云服正式获批工信部ISP/IDC(含互联网资源协作)牌照
深耕专业,矗立鳌头,新钛云服获千万Pre-A轮融资
原电讯盈科中国区副总裁加入新钛云服「附专访」
新钛云服,打造最专业的Cloud MSP+,做企业业务和云之间的桥梁
新钛云服一周年,完成两轮融资,服务五十多家客户
上海某仓储物流电子商务公司混合云解决方案
新钛云服出品的部分精品技术干货
国内主流公有云VPC使用对比及总结
万字长文:云架构设计原则|附PDF下载
刚刚,OpenStack 第 19 个版本来了,附28项特性详细解读!
Ceph OSD故障排除|万字经验总结
七个用于Docker和Kubernetes防护的安全工具
运维人的终身成长,从清单管理开始|万字长文!
OpenStack与ZStack深度对比:架构、部署、计算存储与网络、运维监控等
什么是云原生?
IT混合云战略:是什么、为什么,如何构建?