<script>
$(document).ready(function () {
$("#table_list").bootstrapTable({
method: "POST",
contentType: "application/x-www-form-urlencoded",
url: "/admin/userCertx/list",
striped: true,
pagination: true,
pageSize: 10,
pageNumber: 1,
pageList: [5, 10, 15, 20, 25],
search: false,
detailView:false,
sidePagination: "server",
queryParamsType: "undefined",
responseHandler: function(res) {
return {
"rows": res.list,
"total": res.total
};
},
columns: [{
title: "ID",
field: "id",
sortable: true
},{
title: "用户名",
field: "username"
},{
title: "全名",
field: "firstName",
formatter: function(value, row, index) {
return row.firstName + " " + row.lastName;
}
},{
title: "证件号码",
field: "idNo"
},{
title: "身份证正面照",
field: "idCardFront",
formatter: function(value, row, index) {
if(!value){
return "无";
}
return '<a target="_blank" href="getImageFile?fileId=' + value + '">查看</a>';
}
},{
title: "身份证反面照",
field: "idCardBack",
formatter: function(value, row, index) {
if(!value){
return "无";
}
return '<a target="_blank" href="getImageFile?fileId=' + value + '">查看</a>';
}
},{
title: "身份证正面照",
field: "idCardInhand",
formatter: function(value, row, index) {
if(!value){
return "无";
}
return '<a target="_blank" href="getImageFile?fileId=' + value + '">查看</a>';
}
},{
title: "状态",
field: "verifiedStatus"
},{
title: "操作",
field: "verifiedStatus",
formatter: function (value, row, index) {
if(value === 'REJECTED' || value === 'PASSED') {
if(row.operReason) {
return '<button class="btn btn-primary btn-xs" type="button"><i class="fa fa-edit"></i> 查看备注</button> ';
}
return "";
}
if(value !== 'SUBMITTED') {
return "";
}
var operateHtml = '<button class="btn btn-primary btn-xs" type="button"><i class="fa fa-edit"></i> 通过</button> ';
operateHtml = operateHtml + '<button class="btn btn-danger btn-xs" type="button"><i class="fa fa-remove"></i> 拒绝</button> ';
return operateHtml;
}
}]
});
});
function query() {
var username=$("#username").val();
var status=$("#status").val();
$('#table_list').bootstrapTable("refresh",{url:"/admin/userCertx/list?username=" + username + "&status=" + status}
);
}
function pass_reject(id, passed){
if(!passed) {
layer.prompt({title: '"请输入审核未通过原因"', formType: 2}, function(text, index){
layer.close(index);
$.ajax({
type: "POST",
dataType: "text",
url: "/admin/userCertx/passReject",
data: {
userCertId: id,
passed: passed,
operReason: text
},
success: function(msg){
layer.msg("操作成功", {time: 2000},function(){
$('#table_list').bootstrapTable("refresh");
layer.close(index);
});
}
});
});
} else {
layer.confirm("是否确定?", function () {
$.ajax({
type: "POST",
dataType: "text",
url: "/admin/userCertx/passReject",
data: {
userCertId: id,
passed: passed,
operReason: null
},
success: function(msg){
layer.msg("操作成功", {time: 2000},function(){
$('#table_list').bootstrapTable("refresh");
layer.close(index);
});
}
});
});
}
}
</script>整个HTML源码中的内容,也就这一块。通过分析这段HTML代码,可以大致分析出网站如下结构。这段是HTML代码里面的JS代码,网站的大部分功能都是ajax操作的。
网站后台首页地址:
https://xxxx.com/admin/ 或者 https://xxxx.com/admin/index
网站后台会员列表页(经过测试,这个页面确实是正常访问的网站会有列表页,但是这个页面会通过ajax调用其他页面来显示数据):
https://xxxx.com/admin/userCertx/
网站后台会员列表数据页面:
https://xxxx.com/admin/userCertx/list?pageSize=100&pageNumber=1
(通过上面的JS分析,需要携带两个参数pageSize为显示多少条信息,pageNumber显示第几页)。
这个URL地址为通过上面代码分析自己组合的地址,这里参数为什么是100还有1,后续讲。
网站后台会员状态列表(例如只查看某用户名的会员,例如只看是否通过审核的会员):
https://xxxx.com/admin/userCertx/list?username=" + username + "&status=" + status
username 疑为会员名称
status 疑为会员状态
针对网站后台会员功能操作(审核通过功能):
https://xxxx.com/admin/userCertx/passReject
应该向此URL提交3个参数:
userCertId: id 应该是会员ID
passed: passed 应该审核状态,REJECTED代表未通过。passed代表通过。
operReason: text 应该是随意值,指备注。
还有几个可能无关紧要,这里就不做分析了。既然分析出来这么多URL结构及作用了。咱们就可以写JS代码,通过CSRF配合来做操作啦。
好,废话不多说,注意,这里最好修改对方中招的项目。这里有个小技巧。如图。
首先进入XSS平台,然后使用【指定多URL页面源码读取】这个插件。我整理了,我现在需要探测对方后台首页的代码,这样更利于分析对方网站结构。然后还有会员列表,这样我能获得对方的数据。
那就第一个filename填入如下地址:
https://xxxx.com/admin/
那就第二个filename1填入如下地址:
https://xxxx.com/admin/userCertx/
那就第三个filename2填入如下地址(如果URL没那么多,可以为空不填写):
https://xxxx.com/admin/userCertx/list?pageSize=100&pageNumber=1
更改完之后,坐等管理员继续中招。结果没等几分钟,管理员果真又中招了。XSS平台来信息了。如图:
这里我只举例首页(https://xxxx.com/admin/)html源代码组合后的样式结果吧如下图(动图):
相信这么看之后,对整个网站的整体的结构已经相当之一目了然了吧。
https://xxxx.com/admin/userCertx/
https://xxxx.com/admin/userCertx/list?pageSize=100&pageNumber=1
也很有收货,上面的确实如我所想,html源码里面没什么内容,只是一个JS代码,能看到一些简单的架构。
而下面的URL地址,直接就返回100条用户的数据,JSON格式的,我们只需要格式化一下。然后分分钟到手平台用户的数据。各种高清无码身份㊣等信息。
到此网站结构已经分析的很明确了。
然后再次通过更改XSS平台的项目直接获取https://xxxx.com/admin/user/index 后台管理员地址。
通过分析直接获取到了后台管理员的帐号和密码,无奈无法解开加密后的密码。
不过不要灰心,因为刚才上面获取到了https://xxxx.com/admin/user/index 管理员后台的源码,所以通过源码分析出,添加后台管理员的代码。然后写一段JS脚本,如下:
最后等了半天,晚上21点管理员又登录了。结果中招确实添加了一个我指定的管理员帐号。但是我发现最终还是登录不进去。如图:
不过不用担心,因为对后台的功能基本已经了如指掌,所以我留了一个后门。没进去怎么留的后门?当然是通过CSRF + XSS留的,以后只要管理员上线浏览到了后门的页面地址,那么他绝笔会中招。。。中招就可以继续玩他了。
现在,他整个网站基本可以掌控。只不过没办法进后台,所以还需要管理员浏览中招的页面才可以。
没过多久可能因为我分析对方网站代码分析某个地方失误,导致对方运营人员进不去后台了,然后技术通过数据库查看代码看到了我留的后门。如图,里面有我创建的管理员帐号:admis 还有我更改的其他管理员的信息留的后门。
其实到这里就结束了,整个网站后台的功能全部都分析的明明白白了【因为这个平台可能才创立没多久,所以后台功能暂时没那么强大,没办法XXOO】。不过这里我想说的是,我是好人,所以我并没有动人家的数据,而且也没有做恶意破坏,做人还是有点原则的好(你信么? )。
好了,到这里暂时结束了,不说了,警察叔叔来找我说请我吃饭了。
自评TCV=2