XSS 平台搭建与优化(基于 xsser.me 源码)
本文引用于:征途源码论坛(www.zhengtuwl.com)-----专注各类免费精品×××的平台
这个周花了点时间捣鼓公司内网论坛,不幸发现原来搭建的 xss platform 挂了,于是重新找了一份代码进行搭建。
为什么选择这个呢,主要是因为作者用 Bootstrap 对xsser.me的默认主题进行了修改,看起来高大上了很多~(至于兼容移动端神马的就算了吧0 0)
下载源码后,照着作者写的安装说明进行修改就好了:
修改config.php里面的数据库连接字段,包括数据库配置(用户名、密码、数据库名)、网站 URL 路径和伪静态配置。
把根目录下的xssplatform.sql导入到数据库中。
在数据库中执行 SQL 语句,把数据库中的域名改为自己的域名:
UPDATE oc_module SET code=REPLACE(code,'http://xsser.me','http://yourdomain/xss')
替换authtest.php中的域名为自己的域名。
首次注册成功后,修改user表中用户对应的adminlevel为1,将自己定义为超级管理员,可以发送和管理邀请码。
根据 server 类型配置伪静态文件:
Apache
RewriteRule ^([0-9a-zA-Z]{6})$ /index.php?do=code&urlKey=$1 [L]
RewriteRule ^do/auth/(\w+?)(/domain/([\w\.]+?))?$ /index.php?do=do&auth=$1&domain=$3 [L]
RewriteRule ^register/(.*?)$ /index.php?do=register&key=$1 [L]
RewriteRule ^register-validate/(.*?)$ /index.php?do=register&act=validate&key=$1 [L]
Nginx
rewrite "^/([0-9a-zA-Z]{6})$" /index.php?do=code&urlKey=$1 break;
rewrite "^/do/auth/(w+?)(/domain/([w.]+?))?$" /index.php?do=do&auth=$1&domain=$3 break;
rewrite "^/register/(.*?)$" /index.php?do=register&key=$1 break;
rewrite "^/register-validate/(.*?)$" /index.php?do=register&act=validate&key=$1 break;
rewrite "^/login$" /index.php?do=login break;
到这里xss platform就搭建完成了。
我在使用过程碰到的一些 bug,于是对源代码进行了一番修改。
1. 短地址接口部分失效
在项目代码中有一个转换短地址的功能,当然原版的xsser.me是没有的,是另外的作者集成进来的。
代码里提供t.cn和is.gd的短地址转换,对应函数在source/function.php中的第350行和357行。由于is.gd的 api 地址已经失效,所以我决定把这一块内容去掉。
先删掉页面上展示的内容,打开templates_c/%%4D^4D3^4D30CF2A%%project_viewcode.html.php,将下面代码去掉:
_tpl_vars['shortShow1']; ?>
然后在source/project.php里面注释下面两行:
$shortUrl2=LongUrltoShortUrl2($longUrl);//短网址2$shortShow2=StripStr("");
2. 去掉JS地址后面的时间戳
JS 地址后面加入时间戳,是为了在修改 JS 代码后,刷新对方浏览器中缓存的 JS。但在实际测试中感觉作用不是很大,一般代码修改完刷新一下网页出来的就是新代码。所以我把 JS URL 中的时间戳去掉了。
在source/project.php里进行下面的修改:
//$codeurl=URL_ROOT."/{$project[urlKey]}?".time();
$codeurl=URL_ROOT."/{$project[urlKey]}";
//$scriptShow1=StripStr("'\">
");
$scriptShow2=StripStr("");
3. HTML 部分优化
代码中部分 Javascript 和 CSS 资源都是通过国外 CDN 获取的,有时候页面 load 很久才出来,于是把文中引用的资源都改为本地,当然改成国内 CDN 地址也可以。
在 Sublime Text 中对目录进行搜索,找出jquery-1.9.1.min.js和bootstrap.min.js引用的地方,然后修改为本地引用,文件放在themes/default里对应的文件夹。
//修改为:
//修改为:
PS.注意修改后的代码为两行。
PPS.其实引用的 Javascript 文件最好放在
的最后,但这里需要手动找到所有的 Javascript 进行修改,太麻烦了就没做。4. 添加 cookie 复制功能
一般来说,打到对方 cookie 后,会借用EditThisCookie这个工具把 cookie 导入到 chrome 中。但[xss_clean]输出的 cookie 不能直接导入,需要转换成EditThisCookie规定的 JSON 格式。
源代码中本身自带了实现复制功能的 JS 代码,但默认是注释掉的,因为没有完整实现。同时,这个复制只是把 JSON 化后的 cookie 通过alert()打印到屏幕上,当 cookie 内容过多时,alert 窗口并不能展示所有的内容。
于是我决定对这个功能进行修改,在完成 JSON 格式化的同时,把 JSON 内容放入到剪贴板中。
首先对原有 HTML 节点进行修改,打开%%33^334^334DB811%%project_view.html.php ,找到下面内容:
_tpl_vars['c']; ?>
修改为:
_tpl_vars['c']; ?>
修改为:
修改为:
复制
当某一条记录没有location或者cookie值的时候,Copy()函数会报错,所以要加一个判断条件:
var table = $(obj).parent().parent();
var l = table.find("#location").text();
var c = table.find("#cookie").text();
var table = $("#"+obj).parent().parent();
var l = table.find("#location").text();
var c = table.find("#cookie").text();
if (l == "" || c == "") { return "";}
修改Copy()函数的返回形式:
alert(JSON.stringify(data));
return JSON.stringify(data);
为了实现让 JSON 数据复制到粘贴板上,我们需要借助ZeroClipboard.js这个插件。下面是调用代码:
ZeroClipboard.config( { swfPath: "'.$this->_tpl_vars['url']['themePath'].'/swf/ZeroClipboard.swf" } );
var client = new ZeroClipboard($(".CopyBtn"));client.on('copy', function(event)
{
var clipboard = event.clipboardData; clipboard.clearData();
clipboard.setData("text/plain", Copy(event.target.id));});client.on('aftercopy', function(event)
{
if (typeof(event.success['text/plain']) == "undefined")
{
alert("cookie复制失败,请检查cookie格式~");
}
else {
alert("cookie已复制到剪贴板,可以导入EditThisCookie啦~");
}
}
);
这样就大功告成了~