注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

网易杭州 QA Team

务实 专注 分享 做有态度的QA

 
 
 
 
 

日志

 
 

从CVE-2014-6271学什么是cgi  

来自nowind   2016-06-01 20:47:47|  分类: 安全测试 |举报 |字号 订阅

  下载LOFTER 我的照片书  |
很多时候,大家都自称是web测试工程师。然对于对于web的一些理论知识,你又了解多少呢?在面试的时候,我经常会问http的报文格式是怎么样的?很多人不明白为啥要懂这些,为啥要去了解RFC。
如果你开发过web动态服务器,这里的意思是你的程序会自己打开web端口,并解析成一个request对象传入,response对象输出。很好,现在很多语言都是处在这种模式下的python java等,通常这种情况下,我们还会布置前端web服务器来进行反代,否则的话,我们web容器可能大部分时间是处理静态数据的,而web容器一般都是动态代码语言,这样就会消耗过多的资源。所以,后来就有人想到把web服务抽离出来,实现一个提供基本web服务的软件,他将动态请求发到真正要处理的地方。嗯,这就是我们的阿帕奇和nginx。
But,很久以前(其实也不久啦),那时的脚本语言并不具备自行搭建一个web服务的能力(譬如宇宙第一语言)。于是聪明的地球人就想到了CGI这东西(FCGI自然是它的一个演进),web服务器会解析http请求,并将解析后的数据传给脚本语言(当然不只了,c shell php perl asp)。所谓的通用网关协议就是一种规范,它规定了web服务器要解析哪些数据,怎么把这些数据传给cgi程序,又是怎么接收cgi程序的返回。
这里必须插播一条软广告,看下一个c语言写的cgi到底是啥样的 http://study.163.com/course/introduction/1437017.htm 。1.1 版本的cgi 规范如下网址 https://tools.ietf.org/html/rfc3875 。规范中给出了CGI在web服务和编程语言之间的消息传递规范(当然还有其他,我们先忽略掉)。主要包括以下3点:
1.环境变量
2.标准输入流
3.标准输出流
环境变量主要传递一些头信息,perl中的环境变量可以看这里http://docs.linuxtone.org/ebooks/Perl/perlsetp/perlstep8.html,比较重要的是这个 QUERY_STRING ,但是是没做任何切割的
标准输入流就是原始的POST数据,也是没任何处理过的
标准输出流 response内容,这里说的内容不只是body,比如开发过PHP的应该知道echo "Location:XXX"是可以成功实现跳转的,说明是可以写头的,然后还有经典的Status:200。说明写状态码也是没问题的。但是,按照视频的教学,它写入的是纯http报文的东西,所以头之间换行遵从\r\n,头和主体还有\r\n
因此,只要有cgi,任何语言基本可以web开发,只要1.可以读环境变量,2.可以读写标准流
再来看看CVE-2014-6271 这个漏洞,环境变量是可以被执行的。cgi执行是通过环境变量传递的,通过控制环境变量可以进行远程代码执行。具体还是有些其他限制的,但不是本文讨论的内容。
  评论这张
 
阅读(190)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016