RPO攻击

作者: 苑紫桐 | 来源:发表于2018-04-08 20:55 被阅读0次

    最近在强网杯上遇到RPO的题,懵逼好久。

    0x00概述

    浏览器解析页面路径有误而导致css文件加载路径错误,从而引发的任意解析。

    关键点:上传css的点,利用的是PHPinfo模式

    0x01 PHPinfo模式

    PHPinfo模式上传URL的本意是为了使原本长段的URL变得简洁。每当你访问一个网站必然带有一长串参数,但是太长又显得不太友好,参数还需要使用&来分割开,参数一多,就显得相当复杂。然而PathInfo模式功能就是将这一长串缩短简化,让这个路径变得更加友好的显示。

    传统的访问路径是这样子的:

    http://www.example.com/index.php?m=module&c=controller&a=action&var1=vaule1&var2=vaule2.....

    而PHPinfo的URL模式下能够做到这样子的路径:

    http://www.example.com/index.php?module/controller/action/var1/vaule1/var2/value2.....

    两者相比较很容易就得出结论:PathInfo模式下的访问路径显示更加友好。
    下为实现pathinfo的一个简易demo

    $arr=isset($_SERVER['PATH_INFO'])?explode('/',trim($_SERVER['PATH_INFO'],'/')):null;
    //var_dump($arr);
    //echo $arr
    $value='';
    for($_=0;$_<count($arr);$_+=2)
    {
        $value[$arr[$_]] = $arr[$_+1];
    }
    $value['country']=isset($value['country'])?$value['country']:null;
    

    0x02漏洞原理

    假设style.css文件为

    h1 {
    font-size:180px;
    color:blue;
    }
    

    当css文件以相对路径被加载的时候

    <link rel="stylesheet" href="./style.css" style="css" />
    

    因为传参是用反斜杠来实现的,所以正常打开页面是没有问题的


    image

    但是当我们上传参数的时候,浏览器与服务器端对URL的解析就会不同

    7e2785d1ly1fevjctwms8j20p108v0sx.jpg

    浏览器误以为我们参数的键/country/是一个实际的路径,从而导致实际加载的css文件路径就成了

    http://localhost/hello/url.php/country/style.css
    

    服务端收到的请求会认为请求/country/style.css是一个键为country值为style.css的参数,从而返回页面,这样返回的页面会直接加载构造好的css文件。

    之后的利用可以结合xss来做了。

    相关文章

      网友评论

        本文标题:RPO攻击

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