RPO 小技巧
in 各种姿势 with 0 comment

RPO 小技巧

in 各种姿势 with 0 comment

最近看Pwnhub的题目,大物必须过的那道题里面讲道了RPO,发现资料也比较少,看到了老外的一篇博客链接,这篇文章的很多部分都是翻译的。

RPO也叫相对路径覆盖攻击,利用CSS解析器对语法的高容忍度进行攻击。

简单的例子

首先是一个简单的html文件

<html>  
<head>  
<title>Google Toolbar API - Guide to Making Custom Buttons</title>  
<link href="../../styles.css" rel="stylesheet" type="text/css" />  
[..]
</html>

如果我们可以在路径中用%2f代替"/"
如文章的原地址为:http://www.google.com/tools/toolbar/buttons/apis/howto_guide.html
就可以把 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 跳到了更高一级的目录下

不过还有比跳出目录更好的操作,可以伪造目录。
比如导入一个样式表
这里导入fake这个虚拟的目录,而且fake/在..%2f路径中,使他们在服务器端相互抵消。可以在根目录下导入任何样式表https://www.google.com/*/styles.css

这时候就可以找一些奇奇怪怪的网页,比如使用参数加载背景的:
http://www.google.com/gadgets/directory?synd=toolbar&frontpage=1&q=%0a{}*{background:red}
源码

<div id="frontend-directory-page"></div>
<font size="-1"><divclass="resultNotFound"><p>Search <b>-
{}*{background:red}</b> did not match any gadgets

构造payload为
http://www.google.com/tools/toolbar%2fbuttons%3fq%3d%250a%257B%257D%257Bbackground%253Ared%257D/..%2f/apis/howto_guide.html

服务器接收到的请求为

/tools/toolbar/buttons/gallery?q=%0a{}*{background:red}/..//apis/howto_guide.html

浏览器接收到的请求为

/toolstoolbar%2fbuttons%3fq%3d%250a%257B%257D%257Bbackground%253Ared%257D/..%2f/apis/howto_guide.html

导入的样式表为

/tools/toolbar/buttons/gallery?q=%0a{}*{background:red}/style.css
/gadgets/directory?synd=toolbar&frontpage=1&q=%0a{}*{background:red}/style.css

这样一来样式就加载成功了

img

进一步利用

CSS 对导入的一切样式表都采用松散的解析方式
可以导入 http://www.google.com/* 下的所有页面作为样式表进行解析
如果页面中包括隐私数据和注入点的话我们可以用 CSS Magic 去偷取
使用条件:
注入点应该在隐私数据之前
注入点允许 %0a,%0c,%0d 等空白字符
隐私数据不包含段间歇

后面先不写了。。。明天把作者原文的一个操作补上,然后就几个ctf的题目说下吧

Responses