granddad's guestbook writeup

这是一道去年就想出的题,结果出了还是没人做,或者说做不来

事实上出了SSTI还有一种模版注入在前端

叫做client side template injection(下文简称csti

client side template injection

这种前端模版注入可以在没有HTML标签的情况下试下任意代码执行

功能浏览

回到题目,首先注册登录看看有哪些功能

秘密广场 Secret Square

可以分享你的秘密到这个广场上别人都能看

而在其中的第一条和第二条分别是管理员的提示信息

  • admin's secret only admin can read!do not attack mywebsite,otherwise i will kick Ur ass!
  • i tell you the admin's secret code is dbfc330a00;

那么目的很明确我们需要通过管理员去读取到管理员的秘密//应该是flag

发文 Post

这个功能可以用来发送秘密,发送的秘密可以在用户信息中找到

报告 Report

一个url提交和substr(md5('?'),0,4) === '0e25'

那么很明确了这是一个XSS题

我们可以通过提交一个平台XSS来实现对管理员的信息进行读取

HACK IT

在Post功能中Form["subject"]被严格限制输入

那么很明显Form["message"]应该就是XSS点,但是测试一番发现无法使用到html标签,因此我们开展更加详细的信息收集

发现在前端源码中引入了angular.js

并且ng-app是开启状态

同时<p id="message">123123123</p> 我们的目标XSS点并没有很好的被保护

那么就去找angular.js的csti的相关信息就行了

http://ghostlulz.com/angularjs-client-side-template-injection-xss/

看完文章再去了解一下,其实都不需要绕过沙盒。因为我这儿引入的angular.js是1.8.8版本的。

默认1.6以后angular项目组就关闭了沙盒,因为沙盒永远会被绕过

只有通过安全的代码才能实现好的保护

所以payload就为

{{constructor.constructor('alert(1)')()}}

直接去post功能里发贴就可以获得弹窗

同时也没有开启任何CSP规则,因此只要获取了XSS,就可以为所欲为了

image-20210831145929975

这时候其实就后面不用我说了吧,直接打,但是这里我给phpsession开了httponly,也就是说要完成获取flag

需要编写js代码去读取并获取数据返回到我们的服务器

自己写吧,我也没写//

服务器开一周 祝你好运886

此处评论已关闭