美文网首页
从一道题看apache处理URI

从一道题看apache处理URI

作者: Aluvion | 来源:发表于2018-09-25 17:54 被阅读0次

    该文章为菜鸡臆想,有错误请各位师傅指出Orz

    apache版本为2.4.34


    有这么一道题目,源码如下:

    简单分析一下代码,getflag 主要有两个条件:

    1. URI 中不能含有 " . " ,这是由 if 和 stripos 来判断的,但是由于php的弱类型匹配,所以如果 stripos($uri,".") 为 0 也可以通过检查

    2. URI 经过 parse_url 解析后,其 host 要严格相等于 c7f.zhuque.com

    首先要明确一点,c7f.zhuque.com 中肯定要有 " . " ,parse_url 似乎也不会把非法字符变成 " . ",那我们就需要绕过 if 和 stripos 的检查,也就是说 URI 的第一个字符要为 " . " ,而与此同时,apache 也要能够通过这个 URI 访问到 index.php

    最后可用的 URI payload 为 .@c7f.zhuque.com/..// ,使用 burpsuite 抓包重发杰克

    那么 apache 会怎么处理这个 URI 呢?

    在 apache 源码中有一个函数名为 ap_process_request_internal :

    而在此函数中主要会调用两个函数 ap_getparents 和 ap_location_walk -> ap_no2slash 对 URI 进行处理

    ap_getparents:

    ap_no2slash:

    主要的处理分两部分:

    1. 处理 URI 中的 " . " 和 " / ",比如:

            所有的 " ./ "

            尾部的 " . "

            所有的 " xx/../ ",包括位于开头的 " ../ " 和 " /../ "

     尾部的 " xx/.. "

    2. 处理多余的 " / " 斜杠

    所以, .@c7f.zhuque.com/..// 经过处理后就会变成 / ,即 index.php

    经过拼接变成 http://127.0.0.1.@c7f.zhuque.com/..// 根据 parse_url 解析的规则,最后解析得到的 host 即为 c7f.zhuque.com



    作者水平有限,如有错误请指出Orz

    相关文章

      网友评论

          本文标题:从一道题看apache处理URI

          本文链接:https://www.haomeiwen.com/subject/thvtnftx.html