20199308 2019-2020-2 《网络攻防实践》第11周作业

目录
  • (:」∠)_
  • 一、实践内容
    • 1、Web应用程序体系结构及其安全威胁
    • 2、web应用安全攻防技术概述
    • 3、SQL注入
    • 4、XSS跨站脚本攻击
  • 二、实践过程
    • 1、SEED SQL注入攻击与防御
      • 1.1 任务内容
      • 1.2 实践过程
        • 1.2.1 实验环境
        • 1.2.2 熟悉SQL语句
        • 1.2.3 对SELECT语句的SQL注入攻击
        • 1.2.4 UPDATE语句的SQL注入攻击
        • 1.2.5 SQL对抗,修复上述SQL注入攻击漏洞
    • 2、SEED XSS跨站脚本攻击
      • 2.1 任务内容
      • 2.2 实践过程
        • 2.2.1 实验环境
        • 2.2.2 发布恶意消息以显示警报窗口
        • 2.2.3 弹窗显示cookie信息
        • 2.2.4 窃取受害者的cookies
        • 2.2.5 成为受害者的朋友
        • 2.2.6 修改受害者的信息
        • 2.2.7 编写XSS蠕虫
        • 2.2.7 对策
  • 三、总结

(:」∠)_

  • 此作业所属课程:2019-2020-2-1991&1993《网络攻防实践》
  • 本次作业要求:第11次作业 Web应用程序安全攻防
  • 课程目标:学习网络攻防实践
  • 本次作业在哪个方面帮助我实现目标:第十一章 Web应用程序安全攻防

一、实践内容

1、Web应用程序体系结构及其安全威胁

1.1 Web应用体系结构

  • Web应用程序:是一种使用浏览器在互联网或企业内部网上进行访问操作的应用软件形态,也造就了B/S计算结构,提升了部署和应用的便捷性。
  • web应用的体系结构图:
    20199308 2019-2020-2 《网络攻防实践》第11周作业_第1张图片
  • 浏览器:使用HTTP/HTTPS协议、HTML语言与Web服务器进行交互,获取web服务器上的信息和应用服务。
  • web服务器:HTTP守护程序,还引入了各种web动态编程语言的支持。
  • web应用程序:三层体系结构:
    • 表示层:接受web客户端输入并显示结果,通常由HTML的显示、输入表单等标签所构成;
    • 业务逻辑层:从表示层接受输入并在其上完成某些工作,并可能需要数据层的协作,然后将结果送回表示层;是web应用程序的核心;
    • 数据层:以数据库或本地文件形式,提供非易失性信息存储,这些信息可以被逻辑层请求或更新。
  • 数据库:web应用存储数据的地方,数据层也作为web应用程序多级结构中的最后一层。
  • 传输协议HTTP/HTTPS:浏览器和由web服务器、web应用程序和数据库所构成的web站点之间的通信传输协议。HTTP协议默认使用TCP 80端口,该协议采用统一资源标识符URI对各种资源进行统一定义,采用请求/相应模式。SSL/TLS隧道技术,来实现加密传输的HTTPS协议。

1.2 Web应用安全威胁

  • 针对浏览器和终端用户的Web浏览安全威胁:网页木马、网站钓鱼等。
  • 针对传输层的网络协议安全威胁:针对HTTP明文传输协议的敏感信息监听、拒绝服务攻击等。
  • 系统层安全威胁:Web站点的宿主操作系统。
  • Web服务器软件安全威胁:Web服务器软件也存在着漏洞与弱点。
  • Web数据安全威胁:Web站点中在Web应用程序后台存储的关键数据内容。
  • web应用体系结构及其安全威胁的层次模型:
    20199308 2019-2020-2 《网络攻防实践》第11周作业_第2张图片

2、web应用安全攻防技术概述

2.1 web应用的信息收集

  • 信息情报收集:对目标web应用服务进行发现与剖析,标识出它的基本轮廓,具体包括服务器域名、IP地址和虚拟IP地址、Web服务器端口与其他开放服务、Web站点类型和版本、Web应用程序类型及版本、Web服务器及其存在的安全漏洞信息。
  • 手工审查web应用程序结构与源代码
    • 查看静态和动态生成的页面,主要查看源代码、 隐藏信息和动态页面中的页面命名规则等。
    • 查看Web服务器的存储目录结构。
    • 查看辅助性文件,包括CSS级联样式表、XML样式表、数据库字段结构、目录路径、输入参数以 及数据库连接字符串。
    • 输入表单,表单是Web应用程序接受用户输入的主要途径,通过手工审查页面源代码可以发现一些关键表单的位置。
    • 查询参数字符串,复用以假冒其他用户、获取受限的数据、运行任意的系统命令等,提供了Web应用程序内部工作的信息。
  • 自动下载与镜像Web站点页面:自动化上面的手工审查过程。
  • Google Hacking技术审查与探测Web应用程序:Google利用Googlebot和Google Search Engine已经帮我们下载并分析了几乎所有公开页面,Google的高级搜索与挖掘技巧可以在在大范围内搜索存有漏洞的Web应用程序。
  • Web应用程序安全评估与漏洞探测
    • 针对Web应用程序的攻击主要集中在身份验证、会话管理、数据库操作、输入数据合法/合理性检查。
    • 安全辅助分析工具主要包括浏览器插件、免费工具集、商业Web应用安全评估系统和漏洞扫描器。

2.2 攻击web服务器软件

  • 流行的Web服务器软件主要分为两类:
    • MS:Win200x Server/IIS/MS SQL/ ASP/ASP.NET
    • LAMP: Linux/Apache/MySQL/PHP
  • Web服务器平台中的安全漏洞
    • 数据驱动的远程代码执行安全漏洞:Web服务器软件作为网络服务守护进程,也会出现缓冲区溢出、不安全指针、格式化字符串等一系列数据驱动安全漏洞的远程攻击渗透攻击。
    • 服务器功能扩展模块漏洞:IIS软件、WebDAV模块、Apache扩展组件模块都存在漏洞。
    • 样本文件安全漏洞:Web应用服务器包含的样板脚本和代码示例存在漏洞。
    • 源代码泄露:能够查看到没有防护措施Web服务器上的应用程序源码。
    • 资源解析攻击:把同一资源的不同表示形式解析为它的标准化名称的过程。

2.3 攻击web应用程序

  • Web应用程序是web应用各个层次中最薄弱的
    • Web应用程序编码质量和测试均有限: web应用程序安全性最薄弱环节。
    • Web应用的复杂性和灵活性进一步恶化了其安全性。
  • Web应用程序安全威胁类型
    • 针对认证机制的攻击:针对用来确认用户、服务或应用身份机制的攻击手段。
    • 授权机制的攻击:针对用来确定用户、服务或应用是否具有执行请求动作必须权限机制的攻击手段。
    • 客户端攻击:扰乱或渗透攻击web站点客户端用户的攻击手段。
    • 命令执行攻击:在web站点执行远程命令的攻击手段。
    • 信息暴露:获取web站点具体系统信息的攻击手段。
    • 逻辑攻击:扰乱或渗透攻击web应用逻辑流程的攻击手段。

2.4 攻击web数据内容

  • 安全敏感数据泄露
    • web服务器存在目录遍历漏洞或不安全的目录文件枚举配置。
    • 利用web服务器的上传目录临时中转文件。
    • 在web站点公开的文档资料中包含个人隐私、企业秘密。
  • **网站篡改*:利用特定攻击手段入侵网站后,将网站页面内容进行替换,表达入侵成功或某种观点诉求。
  • 不良信息内容上传:网站被攻陷后可能成为不良信息的存储和中转仓库。

2.5 web应用安全防范措施

  • Web站点网络传输安全设防措施:使用HTTPS;加密的连接通道;对关键服务器设置静态绑定MAC-IP映射等。
  • Web站点操作系统及服务安全设防措施:定期进行操作系统及服务的补丁更新、漏洞扫描;对操作系统及各种开放服务器进行远程安全漏洞扫描;关闭不使用的服务等。。
  • Web应用程序安全设防措施:在设计时就应该谨慎考虑,并且要多设置日志信息。
  • Web站点数据安全设防措施:提高个人的安全意识,提高系统的数据保护能力;对维护网站的数据安全实施日常检测和防护。

3、SQL注入

3.1 SQL注入攻击原理

  • 代码注入:利用Web应用程序的输入验证不完善漏洞,使得Web应用程序执行由攻击者所注入的恶意指令和代码。根据攻击目标不同分为:

    • 恶意读取、修改与操纵数据库的SQL注入攻击;
    • 在Web服务器端安装、执行Webshaell等恶意脚本的PHP注入或ASP注入攻击;
    • 在Web服务器端恶意执行操作系统命令的shell注入攻击还有其他攻击等。
  • SQL注入攻击原理:利用Web应用程序的数据层存在的输入验证不完善性安全漏洞实施的代码注入攻击技术。由于用户输入没有被正确地过滤以消除SQL语言中的转义字符,或没有进行严格的类型判断,使得用户可以输入并执行一些非预期的SQL指令代码。

3.2 SQL注入攻击步骤和过程

  • 1、发现SQL注入点:存在http://SITE/xxx.asp?some_rec=yyy的动态网页时,当some_rec字段为整形参数,通过不同的三种字符串可判断该动态页面是否存在SQL注入点。同理也可以对字符型做,下面展示整型情况。
    • yyy修改为yyy' 造成SQL出错,动态页面返回错误提示信息。
    • yyy修改为yyy and 1=1 不对查询条件造成任何影响,返回正常页面。
    • yyy修改为yyy and 1=2 查询不到任何信息。
  • 2、判断后台数据库类型
    • 利用数据库服务器的系统变量。
    • 利用数据库服务器的系统表进行判断。
  • 3、利用SQL注入进行后台口令拆解
    • 猜解后台口令表表名。
    • 猜解字段名。
    • 猜解字段值: 二分法逼近。
    • 口令可能为MD5散列后的密文。
  • 4、上传ASP后门,得到默认账户权限:在破解得到Web应用管理员用户名和口令后,通过找出后台管理界面登录,攻击者就可以通过后台管理界面通常所提供的的下载上传文件等功能上传ASP后门,对Web站点进行远程控制。
  • 5、本地特权提升
  • 6、利用数据库扩展存储过程执行shell命令:通过SQL注入点执行相应的扩展存储过程。

3.3 SQL注入攻击工具

  • 自动化SQL注入漏洞

    • Wposion:能够在动态Web文档中找出SQL注入漏洞的工具。
    • mieliekoek.pl:以网站镜像工具生成的输出为输入,找出含有表单页面。
  • 自动化SQL注入漏洞探测

    • SPIKE Proxy工具:允许使用者对待注入字符串进行定制。
    • SPI Toolkit工具包中的“SQL Injector”工具。

3.4 SQL注入佛那估计防范措施

  • 使用类型安全(type-safe)的参数编码机制。
  • 凡是来自外部的用户输入,必须进行完备检查。
  • 将动态SQL语句替换为存储过程、预编译SQL或ADO命令对象。
  • 加强SQL数据库服务器的配置与连接。

4、XSS跨站脚本攻击

XSS跨站脚本攻击的最终目标不是提供服务的Web应用程序而是使用Web应用程序的用户。XSS的漏洞存在于Web应用程序中,使得攻击者可以在Web页面中插入恶意代码(HTML或JavaScript)用户在浏览网页时,浏览器会解析这些插入的代码,造成获取用户敏感信息、客户端渗透攻击等后果。

4.1 XSS攻击技术原理

Web应用程序对用户输入内容的安全验证与过滤不够完善,用户提交的内容可以包括HTML、JAVAScript及其他脚本代码,而一旦web应用程序没有对这些输入的合法性进行有效检查与过滤,就很有可能让这些恶意代码逻辑包括在服务器动态产生或更新的网页中。真正的“受害者”是访问这些web服务器的其他用户。

4.2 XSS攻击类型

  • 持久性XSS漏洞:危害最严重的XSS漏洞;通常出现于一些可以将用户输入持久性地保存在web服务器端,并在一些“正常”页面中持续地显示,从而能够影响所有访问这些页面地其他用户,也成为存储性XSS漏洞。通常出现在留言本、BBS论坛、博客等web应用程序中。

  • 非持久性XSS漏洞:也成为反射XSS漏洞

    • 一个典型的非持久性XSS攻击过程:
      20199308 2019-2020-2 《网络攻防实践》第11周作业_第3张图片

    • 具体攻击包括:

    • 1.攻击者构造一个包含恶意脚本的bank.com登录请求连接,通过email等方式将该攻击发送给其他用户。

    • 2.用户点击登录连接后会将恶意连接中包含的恶意脚本当做用户名参数提交给bank.com登陆处理页面。

    • 3.网站将会在反馈的欢迎页面中包含恶意客户端脚本。

    • 4.攻击者的恶意客户端在受害者浏览器中执行,会驱动浏览器发送会话令牌。

    • 5.攻击者获得用户会话令牌后,可以劫持用户会话,伪造用户登录进一步实施攻击。

4.3 XSS攻击防范措施

  • 服务器端防范措施:思路是“限制、拒绝、净化”
    • 输入验证: 对用户提交数据进行尽可能严格的验证与过滤。
    • 输出净化: HTMLEncode()方法。
    • 消除危险的输入点。
  • 客户端防范措施
    • 提高浏览器访问非受信网站时的安全等级。
    • 关闭Cookie功能,或设置Cookie只读。
    • 采用非主流地安全浏览器来降低安全风险。

二、实践过程

SEED Ubuntu是16.04版本,因此参照解建国同学的博客的实验部分做本次实践

1、SEED SQL注入攻击与防御

1.1 任务内容

我们已经创建了一个Web应用程序,并将其托管在www.SEEDLabSQLInjection.com。 该Web应用程序是一个简单的员工管理应用程序。 员工可以通过此Web应用程序查看和更新数据库中的个人信息。 此Web应用程序主要有两个角色:管理员是特权角色,可以管理每个员工的个人资料信息。 员工是一般角色,可以查看或更新自己的个人资料信息。 完成以下任务:

  • 熟悉SQL语句: 我们已经创建了一个名为Users的数据库,其中包含一个名为creditential的表。 该表存储了每个员工的个人信息(例如,eid,密码,薪水,ssn等)。 在此任务中,您需要使用数据库来熟悉SQL查询。
  • 对SELECT语句的SQL注入攻击:上述Web应用存在SQL输入漏洞,任务是在不知道密码的情况下登陆该Web应用程序。
  • 对UPDATE语句的SQL注入攻击:通过员工的更新个人界面实施UPDATE语句的SQL注入攻击。
  • SQL对抗,修复上述SQL注入攻击漏洞。

1.2 实践过程

1.2.1 实验环境

  • SEED Ubuntu 16.04
  • web应用网站:http://www.SEEDLabSQLInjection.com
  • 本地文件夹路径/var/www/SQLInjection/
    这部分可以在Firefox的收藏夹以及hosts中查看到:
    20199308 2019-2020-2 《网络攻防实践》第11周作业_第4张图片
  • 托管网站的Apache2服务器,先使用指令sudo service apache2 start启动Apache服务。

1.2.2 熟悉SQL语句

  • 首先使用指令mysql -u root -pseedubuntu登陆MySql数据库,-u指定用户名,-p指定密码。
    20199308 2019-2020-2 《网络攻防实践》第11周作业_第5张图片
  • 如果要使用哪个数据库,可以使用指令use Users; show tables;查看该数据库下面的表。
    20199308 2019-2020-2 《网络攻防实践》第11周作业_第6张图片
  • 使用指令select * from credential;来打印所有员工的信息,在这里可以看到员工的姓名、工资以及hash之后的密码等信息。
  • 如果要查询雇员Alice的所有配置文件信息,使用如下命令select * from credential where Name="Alice";
    20199308 2019-2020-2 《网络攻防实践》第11周作业_第7张图片

1.2.3 对SELECT语句的SQL注入攻击

  • 在上文web应用网站http://www.SEEDLabSQLInjection.com可以看到,登录需要用户名和密码。所以打开 vi /var/www/SQLInjection/unsafe_home.php,查看关于登陆校验的SQL语句。
  • 上面的SQL语句从凭据表中选择个人员工信息,例如ID,姓名,薪水,SSN等。 SQL语句使用两个变量输入uname和散列的pwd,其中输入uname保留用户在登录页面的用户名字段中键入的字符串,而散列的pwd保留用户键入的密码的sha1哈希。 程序检查是否有任何记录与提供的用户名和密码匹配;如果存在匹配项,则表明用户已成功通过身份验证,并获得了相应的员工信息。 如果不匹配,则认证失败。
  • 现在我们知道管理员的账户名是admin,在不知道密码的情况下实行SQL注入攻击进入Web应用。通过上面的观察发现,只需要在用户名输入特定的语句,导致不进行password的校验就可以跳过验证。所以我们使用字符串admin '#进行登录即可,#后面的语句被注释,无法执行。所以只进行了用户名的校验。发现确实登录成功。并且在登录界面能够看到所有用户的数据,和之前查表的结果一致,证明攻击有效。
    20199308 2019-2020-2 《网络攻防实践》第11周作业_第8张图片
    20199308 2019-2020-2 《网络攻防实践》第11周作业_第9张图片
  • 接下来是利用命令行完成管理员的登录:
  • 在这里要注意的问题就是几个特殊符号要进行转义,就是找到几个特殊符号的十六进制,譬如#用%23表示,这里由于在命令行,所以我们需要用到cURL,这是一个利用URL语法在命令行下工作的文件传输工具。使用指令curl 'www.seedlabsqlinjection.com/unsafe_home.php?username=admin%27%20%23'就可以成功登录系统。通过返回的HTML代码,我们可以看到信息和我们上面看到的信息相同,证明我们的攻击时成功的。
  • 最后是追加新的SQL语句达到修改数据库的效果:
  • 按照上面的想法只要追加一个delete或者update语句就好了,通过追加指令'1=1;delete from the credential where name 'Alice';#发现并不成功。这是因为MySql中的对策阻止了从php调用多个语句的执行,因此攻击未成功。
    20199308 2019-2020-2 《网络攻防实践》第11周作业_第10张图片

1.2.4 UPDATE语句的SQL注入攻击

  • 首先任务是修改Alice的工资。
  • 首先用类似前面管理员登录的方式登录Alice的账号,进去之后可以看到Alice的相关信息,记住EID要用的。然后进行edit profile修改信息。在NickName那里输入语句', salary='500000' where EID='10000';#,这样#后面的就会被注释,所以就直接执行set salary='500000' where EID = '10000' 这个指令,所以直接修改了工资。这个时候回去看自己的profile应该能看到是已经修改成功的,证明我们的攻击成功。
    20199308 2019-2020-2 《网络攻防实践》第11周作业_第11张图片
    20199308 2019-2020-2 《网络攻防实践》第11周作业_第12张图片
  • 下面的任务是修改其他人的工资。那么只要在Alice修改的界面的nickname输入', salary='1' where name='Boby';#,再回到查询的界面,我们发现工资已经成功修改。这个原理和上面相同。
    20199308 2019-2020-2 《网络攻防实践》第11周作业_第13张图片
  • 最后一个任务是修改其他用户的密码。知道密码在数据库中是以sha1的形式存储的,那么首先需要获取一个指定密码的sha1值。使用指令echo -n '123456'|sha1sum输出密码123456的sha1值为7c4a8d09ca3762af61e59520943dc26494f8941b
  • 接下来继续以Alice的账户登录,继续在edit profile那里修改用户名,填上以下指令进行sha1值的修改 ', Password='7c4a8d09ca3762af61e59520943dc26494f8941b' where Name='Boby';#。这个时候我正常登陆Boby的账户,发现通过修改的123456密码已经能够完成正常的登录。此时成功的完成了攻击。
    20199308 2019-2020-2 《网络攻防实践》第11周作业_第14张图片
    20199308 2019-2020-2 《网络攻防实践》第11周作业_第15张图片
    20199308 2019-2020-2 《网络攻防实践》第11周作业_第16张图片

1.2.5 SQL对抗,修复上述SQL注入攻击漏洞

  • 下图是一个SQL语句的执行过程
    20199308 2019-2020-2 《网络攻防实践》第11周作业_第17张图片
  • 对代码处理不甚了解,因此参考了王磊博客的这部分内容
    预处理语句在编译之后执行步骤之前出现。预处理语句将经过编译步骤,并转换为带有空数据占位符的预编译查询。要运行此预编译查询,需要提供数据,但这些数据不会通过编译步骤;相反,它们直接插入到预编译的查询中,并发送到执行引擎。因此,即使数据中有SQL代码,在不经过编译步骤的情况下,代码也将被简单地视为数据的一部分,没有任何特殊意义。这就是预处理语句防止SQL注入攻击的方式。
    首先我们修改在unsafe_home.php中的sql语句为预处理语句,即将
$sql = "SELECT id, name, eid, salary, birth, ssn, address, email, nickname, Password FROM credential WHERE name= '$input_uname' and Password='$hashed_pwd'";
$result = $conn -> query($sql);

修改为

 $sql = $conn->prepare("SELECT id, name, eid, salary, birth, ssn, phoneNumber, address, email,nickname,Password
      FROM credential
      WHERE name= ? and Password= ?");
      $stmt->bind_param("ss", $input_uname, $hashed_pwd);
      $stmt->execute();
      $stmt->bind_result($id, $name, $eid, $salary, $birth, $ssn, $phoneNumber, $address, $email, $nickname, $pwd);
      $stmt->fetch();

使用预处理语句机制,我们将向数据库发送SQL语句的过程分为两个步骤。第一步是只发送代码部分,即没有实际数据的SQL语句。这是准备步骤。从上面的代码片段中我们可以看到,实际数据被问号(?)替换。在这一步之后,我们使用bind param()将数据发送到数据库。数据库将只将此步骤中发送的所有内容视为数据,而不再视为代码。它将数据绑定到准备好的语句的相应问号。在bind param()方法中,第一个参数is表示参数的类型:i表示$id中的数据具有整数类型,s表示$pwd中的数据具有字符串类型.

2、SEED XSS跨站脚本攻击

2.1 任务内容

为了演示攻击者可以利用XSS漏洞做什么,我们在预先构建的Ubuntu VM映像中设置了一个名为Elgg的Web应用程序。在本实验中,学生需要利用此漏洞对经过修改的Elgg发起XSS攻击,攻击的最终目的是在用户之间传播XSS蠕虫,这样,无论是谁查看的受感染用户个人资料都将被感染。

  • 发布恶意消息,显示警报窗口:在您的Elgg配置文件中嵌入一个JavaScript程序,以便当另一个用户查看您的配置文件时,将执行JavaScript程序并显示一个警报窗口。
  • 弹窗显示cookie信息:将cookie信息显示。
  • 窃取受害者的cookies:将cookie发送给攻击者。
  • 成为受害者的朋友:使用js程序加受害者为朋友,无需受害者干预,使用相关的工具了解Elgg加好友的过程。
  • 修改受害者的信息:使用js程序使得受害者在访问Alice的页面时,资料无需干预却被修改。
  • 编写XSS蠕虫。
  • 对抗XSS攻击。

2.2 实践过程

2.2.1 实验环境

  • SEEDUbuntu 16.04
  • Elgg社交Web应用程序:包含了一些用户名和密码。
    20199308 2019-2020-2 《网络攻防实践》第11周作业_第18张图片
  • Web应用程序网站http://www.xsslabelgg.com,以及相关的文件夹/var/www/XSS/Elgg/,网站只可在虚拟机内部访问使用,可以查看hosts文件。
  • 托管网站的Apache2服务器,先使用指令sudo service apache2 start启动Apache服务。
  • 进入https://github.com/XXJG/WebSe_SQL_XSS下载echoserver解压并make编译。
  • 使用HTTP Header Live检查HTTP头,在Firefox的扩展中安装这个插件,并且启用。
    20199308 2019-2020-2 《网络攻防实践》第11周作业_第19张图片

2.2.2 发布恶意消息以显示警报窗口

  • 首先利用Alice的账户alice和密码seedalice登录Elgg
  • 这里的主要的攻击方法是在Alice的Brief description域中添加JavaScript代码并保存,然后使用另一个用户Boby登录并查看alice的profile,则将会看到警告窗口。
  • 添加代码并保存,可以看到弹出了警告窗口


  • 然后登录Boby用户,进入Boby账户登录之后,搜索Alice并点击进入主页,确实弹出了XSS弹窗。可见攻击成功。主要原因是因为没有对字段进行安全检查和过滤,便直接插入数据表。显示内容的时候,也是直接读取显示,没有经过输出净化。

2.2.3 弹窗显示cookie信息

  • 这一任务和上面类似,主要是将插入的js代码改成即可,保存。然后用Boby查看Alice的profile,得到的弹窗如下。正确的显示了自己的cookie信息。

2.2.4 窃取受害者的cookies

  • 通过使恶意的JavaScript插入一个标签,其src属性设置为攻击者的机器来实现。当JavaScript插入img标签时,浏览器尝试从src字段中的URL加载图片,这导致HTTP GET请求发送到攻击者的机器。下面使用JavaScript将cookies发送到攻击者机器的5555端口,若攻击者的TCP server侦听同一个端口,服务器则可打印出任何收到的内容。
  • 使用命令,所以这里使用的是本地作为攻击者的服务器。
  • 然后使用nc进行监听5555端口,使用指令nc -l 5555 -v,-l指定端口,-v显示详细信息。这个时候我们使用boby的账户登录并且查看Alice的账户profile就能够得到boby的cookie信息。

2.2.5 成为受害者的朋友

  • 首先我们应该通过HTTP Header Live查看加朋友的时候都发生了什么?可以看到首先这是一个add friends 的action,然后紧接着就是elgg_ts和 elgg_token,这是Elgg本身自带的一套严格的表单验证方法,通过才可以进行加朋友。同样,可以看到朋友的id和cookie,通过这些东西构造了javascript脚本。
  • 从上图中可以看到如下的信息:
    • 请求的方式是POST;
    • 请求的地址是http://www.xsslabelgg.com/action/friends/add;
    • 请求地址的第一个参数是friend=(alice 的编号是44)
    • 请求地址的第二个参数是__elgg_ts=
    • 请求地址的第三个参数是__elgg_token=
      也就是说我们要指明添加的好友,添加的时间并进行添加者的身份验证。
  • 结合以上分析得到的信息和指导书给的一个js框架可以编写出如下程序:

  • 把这段程序放在alice的About me中(这里在右上角转换成edit HTML模式),因为原来的brief限制长度。这段代码首先是获取elgg_ts和elgg_token,然后构造一个URL访问。
  • 保存后,登录Boby账户,此时的好友列表是空的,在搜索中搜Alice,打开Alice的主页,不需要添加,回到Boby的好友列表,显示已添加Alice为好友。
    20199308 2019-2020-2 《网络攻防实践》第11周作业_第20张图片
    20199308 2019-2020-2 《网络攻防实践》第11周作业_第21张图片

2.2.6 修改受害者的信息

  • 和上一个问题类似,首先要用HTTP Header Live看看修改资料时要做那些事情。同样的,可以看到用户在修改自己的profile时发送的http请求的具体格式。
  • 结合指导书上所给的代码,可以编写出如下程序:

  • 将上述代码同样放在Alice的about me中,然后用boby访问Alice的profile,即可成功修改boby的profile。如下图所示。注意程序中有一个判断语句,就是用户的guid和samyGuid的判断,这个samyGuid在这里就是alice的guid,所以就是为了防止自己的profile不被更改增加的这条语句。

2.2.7 编写XSS蠕虫

  • 有两种方法可以进行攻击的繁殖,这里有两种方式,一种是链接的方式,就是把脚本放在一个固定的地方。主要的第二种方法,就是使用DOM API的方法,文档对象模型。简而言之:它会将Web页面和脚本或程序语言连接起来。
  • 指导书提供了一段代码范例:

  • 这段代码的核心是通过innerHTML获取了worm的所有代码,然后补充完整它的格式,最后将它输出;
  • 结合上一个任务的代码我们就可以编写出一个完整的,带有传播功能的蠕虫病毒:

  • 接下来使用 Boby 登录,并访问 Alice 的主页,被感染

  • 然后用 Admin 登录,可以看到介绍栏什么都没有
  • 用 Admin 访问 Boby 的主页后回到自己的主页,可以看到被感染,则这个蠕虫病毒有效。

2.2.7 对策

  • Elgg本身已经提供对抗XSS攻击的插件,可以利用管理员账户进行登录,找到Account->administration->plugins,并且找到插件HTMLawed ,这个插件的主要作用是对用户的输入输出进行校验并且去除特定标签。
  • 在代码中调用htmlspecialchars()方法,主要是对特殊字符进行编码,也可以防范XSS攻击问题。

三、总结

参考了大佬的博客
问题:虚拟机SEEDUbuntu不能粘贴本机的内容,这次代码就打了一遍
交完作业去找解决方案。

你可能感兴趣的:(20199308 2019-2020-2 《网络攻防实践》第11周作业)