白帽子讲web安全第三章笔记

这一章主要讲的是XSS(cross site scipt)跨站脚本攻击,这种攻击方式主要是在客户端(浏览器)中通过非法的JavaScript脚本来更改页面
 
例如:在php页面中有如下代码:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <?php
$input = $_GET["param"];
echo "<div>".$input."</div>";
 ?>
 
</body>
</html>

 

这段代码主要功能是显示Param变量,如果在浏览器中输入:http://localhost/test.php?param=这是一个测试
 
页面就会显示:

 

 
如果将param变量换成<script>alert(/xss/)</script>页面是显示:

 

 
P.S.如果在chrome中会报错,chrome会显示: Chrome 在此网页上检测到了异常代码。为保护您的个人信息(例如密码、电话号码和信用卡信息),Chrome 已将该网页拦截。
 
分成几种类型:
1.反射型 XSS(非持久型Non-persisitentXSS)
把用户输入的数据反射给浏览器
2.存储型XSS(持久型 peristen XSS)
将恶意JavaScript脚本存储在服务器,每个访问这个服务器网站的用户都会执行这段代码。这种方法比上面的更加复杂。
3.DOM based XSS
根据DOM的XSS,实际上是一种反射型的xss。
例如如下的代码:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>XSS test</title>
</head>
<body>
    <script type="text/javascript">
    function test () {
        var str=document.getElementById("text").value; //str获取来自text中的内容
        document.getElementById("t").innerHTML="<a href='"+str+"' >testlink</a>"; //在html中id等于t的地方显示这个链接。
    }
    </script>
    <div id="t"></div>
    <input type="text" id="text" value=""/>
    <input type="button" id="s" value="write" onclick="test()"/>
</body>
</html>

  

如果在输入框中输入的内容是普通的内容,此时<a>标签的内容就是

 

这样,因为localhost里面没有相应的资源,此时会返回一个页面错误。
可是,如果在input标签里输入的内容是如下内容的话:
' onclick=alert(/这是一个xss/)//
此时链接的内容就变成这样:
 

 

点击链接,就会发生

 

因为testLink此时就变成了
<a href '' onclick=alert(/这是一个XSS/)//

  

因为构造输入的文本为:
' onclick=alert(/这是一个xss/)// 

  

前面一个单引号与JavaScript中的单引号配对,而且后面一个单引号也会被注释不会显示。
同理,如果输入的文本为:
'><img src=# onerror=alert(/xss/) /><'

  

,将显示以下内容:

 

 
P.S.这是在Chrome下完成的。
 
 
 
 
 
 
 
 
posted @ 2017-04-13 17:47  大博子  阅读(4000)  评论(2编辑  收藏  举报