这是一道去年就想出的题,结果出了还是没人做,或者说做不来
事实上出了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,就可以为所欲为了
这时候其实就后面不用我说了吧,直接打,但是这里我给phpsession开了httponly,也就是说要完成获取flag
需要编写js代码去读取并获取数据返回到我们的服务器
自己写吧,我也没写//
服务器开一周 祝你好运886
此处评论已关闭