一、 前言
决定搭建XSS平台是因为自己想深入学习一下XSS相关的知识,多多进行实践,上网搜索了一下XSS平台有很多,但是总觉得不是很安全,这个毕竟敏感信息要传输到陌生人的服务器上,而且服务器端测试代码存在不可控性,所以决定自行搭建XSS平台做学习之用。在搭建完成后和我的导师徐松进行了交流,发现这款XSS平台除了在GitHub上有作者专业化的说明外,在网上没有任何关于这款XSS平台搭建方面的教程,最后在导师的鼓励和帮助下促成了这篇分享,也顺便记录一下自己所出现的问题方便以后回顾。
1. 什么是XSS平台
XSS平台可以辅助安全测试人员对XSS相关的漏洞危害进行深入学习,了解XSS的危害重视XSS的危害,如果要说XSS可以做哪些事情,XSS可以做js能够做的所有事情。包括但不限于:窃取Cookie、后台增删改文章、钓鱼、利用XSS漏洞进行传播、修改网页代码、网站重定向、获取用户信息(如浏览器信息,IP地址等)等。
2. 实验环境
涉及到的知识:Git、Linux基础、Apache简单配置、PHP简单配置、iptables防火墙设置
XSS平台项目名称:BlueLotus_XSSReceiver
作者:firesun(来自清华大学蓝莲花战队)
项目地址:https://github.com/firesunCN/BlueLotus_XSSReceiver
服务器操作系统:Centos 6.6
web容器:Apache
脚本语言:PHP
服务器IP地址:服务器IP地址
虚拟主机:192.168.245.133
web应用:DVWA
3. 推荐理由
推荐理由:界面布局清新、数据可阅读性好、IP获取准确、IP地址定位精准、轻量级(无需数据库)、对数据存储进行加密、GitHub开源方便与开发者交流(生命周期长)。
二、 XSS平台的搭建过程
1、安装Apache
#安装Apache
yuminstall httpd –y
#启动apache服务
servicehttpd start
#当我们在浏览器访问我们服务器时出现此页面时,代表着Apace已经安装成功
2、安装PHP
#安装PHP环境
yuminstall php –y
3、安装Git工具
#安装Git工具
yuminstall git –y
4、从GitHub克隆XSS平台源码
#删除Apache默认页面
rm -Rf/var/www/*
#在www目录下创建网站文件夹
mkdir/var/www/xss
#从GitHub上获取XSS平台源码
gitclone https://github.com/firesunCN/BlueLotus_XSSReceiver.git /var/www/xss/
#赋予权限
chmod –R777 /var/www/xss/
5、配置Apache
#新建虚拟主机配置文件夹
mkdir/etc/httpd/conf/vhost
#新建虚拟主机配置文件
touch/etc/httpd/conf/vhost/httpd-vhosts.conf
#编辑虚拟机配置文件
vi /etc/httpd/conf/vhost/httpd-vhosts.conf
#按A键进入编辑状态
<VirtualHost *:80>
DocumentRoot "/var/www/xss"
DirectoryIndex admin.php
</VirtualHost>
#对文件进进行保存
按esc键退出编辑状态,进入到命令模式
输入:wq命令然后回车保存编辑的文本
#编辑httpd.conf文件、将刚刚添加虚拟主机文件包含到配置文件中
cp/etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.bak
vi/etc/httpd/conf/httpd.conf
修改httpd.conf 292行
修改303行为 Options ExecCGIFollowSymLinks(允许服务器使用CGI)
修改338行为AllowOverrideAll
在配置文件末尾插入以下内容
Include/etc/httpd/conf/vhost/httpd-vhosts.conf
#设置Apache开机启动
chkconfighttpd on
#重新载入Apache配置文件
servicehttpd reload
6、安装XSS平台
#访问http://服务器IP地址
点击安装
# 设置后台登录密码、数据加密密码(一定记得要修改)
#其余选项可保持默认,然后提交
#安装成功
#登录后台,访问http://服务器IP地址/login.php
三、 XSS平台的功能测试
1、获取Cookie
#配置公共模板default.js,修改js代码中的网站地址为http://服务器IP地址/index.php
#最后,点击下方的修改,保存修改
# 进入“我的js”模块
#设置js文件名称
#选择default.js模板
#插入模板
#新增
#选择“新增”保存js测试代码
#选择“生成payload”
实例:测试站点Dvwa XSS(stored)测试部分
#刷新Dvwa XSS(stored)页面
#XSS平台接收到获取的Cookie
2、与同类XSS平台比较
#下面是一套比较主流的XSS平台源码程序(http://xssa.me)所展示获取的Cookie
#同刚刚我们所使用的平台做一对比,发现我们的这个平台还是有一些自己的特点的:
界面简洁,更加的人性化
数据的可阅读性
数据获取准确
定位精准(使用纯真ip数据库)
网站收信提示
轻量级、安全(不使用数据库)
密码输错五次封IP(解封需要删除/var/www/xss/data/forbiddenIPList.dat中的封禁IP)
对XSS记录、IP封禁列表、js的说明(仅说明)加密,可设置是否加密、加密密码以及加密方式(AES、RC4)
内置编辑器支持js语法高亮、语法错误检查
网站安全配置
1、配置Apache
#编辑httpd.conf文件
vi/etc/httpd/conf/httpd.conf
# 44行修改为ServerTokensProd
# 536行改为修改为ServerSignatureOff
servicehttpd reload
#以上两条命令执行后前后结果对比
2、配置PHP
#编辑php.ini
cp/etc/php.ini /etc/php.ini.bak
vi /etc/php.ini
#修改432行为expose_php= Off
servicehttpd reload
#修改前后对比
3、配置iptables状态检测防火墙
只对外开放:HTTP、SSH服务
#修改ssh监听端口
vi/etc/ssh/sshd_config
#启动防火墙
serviceiptables start
#清除防火墙规则
iptables–F
#查看当前防火墙规则
iptables-L
#INPUT链:允许已经建立连接和在已建立的连接的基础上对服务器连接发起的连接
iptables-A INPUT -d 服务器IP地址 -mstate --state ESTABLISHED,RELATED -j ACCEPT
#INPUT链:允许对服务器http80端口新发起的连接
iptables-A INPUT -d服务器IP地址-p tcp --dport 80 -m state --state NEW –j ACCEPT
#INPUT链:允许对服务器ssh23233端口新发起的连接
iptables-A INPUT -d服务器IP地址-p tcp --dport 23233 -m state --state NEW -j ACCEPT
#OUTPUT链:允许已经建立连接和在已建立的连接的基础上服务器对其它地址连接发起的连接
iptables-A OUTPUT -s服务器IP地址-m state --state ESTABLISHED,RELATED -j ACCEPT
#OUTPUT链:允许服务器向外部服务器DNS53(udp)端口新发起DNS解析请求(yum等服务需要用到)
iptables-A OUTPUT -s服务器IP地址-p udp --dport 53 -m state --state NEW -j ACCEPT
#OUTPUT链:允许服务器向外部服务器http80端口新发起请求(yum等需要用到)
iptables-A OUTPUT -s服务器IP地址-p tcp --dport 80 -m state --state NEW -j ACCEPT
#OUTPUT链:允许服务器向外部服务器https443端口新发起请求(git等需要用到)
iptables-A OUTPUT -s服务器IP地址-p tcp --dport 443 -m state --state NEW -j ACCEPT
#配置防火墙默认进出规则:拒绝所有数据包
iptables-P INPUT DROP
iptables-P OUTPUT DROP
#保存防火墙规则
serviceiptables save
#设置防火墙开机自启动
chkconfigiptables on
4、SSH防暴力破解
#编辑脚本
vi/root/script/ssh-ban.sh
#添加可执行权限
chmod a+xssh-ban.sh
#设置执行计划(每5分钟执行一次检测)
echo"*/5 * * * * sh /root/script/ssh-ban.sh" >>/var/spool/cron/root
#开启服务
service crondstart
#设置开机启动
chkconfigcrond on
#输错5次密码被Ban后的效果
五、 遇到的问题
1、无法获取Cookie
解决方法:js代码“网站地址”处填http://服务器IP地址/index.php
解决思路:打开调试模式-刷新-发现确实有我们的xss-js代码执行-找到返回的数据包-发现返回数据包302跳转到XSS平台主页;
此时查看网站根目录发现index.php这个文件,因为我们的主页是admin.php,而index.php这个页面似乎并没有使用,打开后猜测其内容应该是接收处理发送来的参数
再次查看GitHub README文件,发现
于是更加确定了自己猜想应该是对的,此处网站地址应该填http://服务器IP地址/index.php用来接收参数,而不是填网站ip地址http://服务器IP地址。
六、 总结
在这次搭建XSS平台学习XSS利用技术的过程中,还是遇到了一些问题,比如:服务器端js代码的配置、一些新功能的尝试等。过程中锻炼了自己的动手能力,了解了XSS平台基本网站结构,帮助自己巩固了以前学习的知识。这个平台上还有一些js利用代码的功能还不是很了解,以后在工作之余可以学习学习。希望以后可以向大家多学习相关知识,不断提升自己,努力能够为团队出一份自己的绵薄之力。