20222808郭锦城 2022-2023-2 《网络攻防实践》第10次作业

2022-2023-2 《网络攻防实践》第10次作业

1.实验内容

1.1 Web应用程序体系结构及其安全威胁:

1.1.1 Web应用体系结构

Web应用程序的体系结构包括客户端、Web服务器、应用服务器和数据库服务器。

1.1.2. Web应用安全威胁

Web应用安全威胁包括跨站脚本攻击、SQL注入攻击、跨站请求伪造、文件包含攻击、命令注入攻击、会话劫持、目录遍历攻击等。

1.2 Web应用安全攻防技术概述

1.2.1. Web应用的信息收集
1.2.1.1 手工审查Web应用程序结构与源代码

通过手工审查Web应用程序的源代码、文档和系统规划,发现应用程序的漏洞。

1.2.1.2 自动下载与镜像Web站点页面

使用工具自动下载Web站点的页面,分析站点的结构和漏洞。

1.2.1.3 Web应用程序安全评估与漏洞探测

使用Web应用程序安全评估工具,识别应用程序的漏洞。

1.2.2 攻击Web服务器软件
1.2.2.1 数据驱动的远程代码执行安全漏洞

利用Web服务器软件的漏洞,向服务器发送恶意代码,达到攻击服务器的目的。

1.2.2.2 服务器功能拓展模块漏洞

攻击服务器拓展模块的漏洞,例如PHP的文件包含漏洞。

1.2.2.3 样本文件安全漏洞

攻击服务器的样本文件,例如.htaccess文件、robots.txt文件等,获取服务器敏感信息。

1.2.2.4 源代码泄露

通过攻击服务器,获取Web应用程序的源代码,进而分析和利用漏洞。

1.2.2.5 资源解析攻击

通过攻击服务器解析URL时的逻辑漏洞,获取服务器敏感信息。

1.2.3 攻击Web应用程序

攻击Web应用程序,例如跨站脚本攻击、SQL注入攻击、文件包含攻击等。

1.2.4 攻击Web数据内容

攻击Web数据,例如篡改Web页面、修改数据库中的数据等。

1.2.5 Web应用安全防范措施
1.2.5.1 Web站点网络传输安全防护措施
  • 尽量使用HTTPS来保障Web站点传输时的保密性、完整性与身份真实性,至少要对登录过程进行加密保护。
  • 通过加密的连接通道来管理Web站点,避免使用未加密的telnet、FTP等
  • 对关键的Web服务器,设置静态绑定MAC—IP映射,在服务网段内进行ARP等各类欺骗攻击的检测与MAC封禁机制,在网关位置部署防火墙与入侵检测系统对Web服务器实施保护与安全监测,采用荣誉等机制来应对拒绝服务攻击。
1.2.5.2 Web站点操作系统及服务安全设防措施
  • 对Web站点的操作系统与服务器软件进行及时的补丁更新;
  • 对Web站点服务器的操作系统及各种开放服务进行远程安全漏洞扫描,在攻击者利用安全漏洞实施攻击之前发现和修补这些安全漏洞。
  • 采用提升系统与服务安全性的一般性设防措施,包括关闭所有不使用的服务,避免使用明文传输的网络服务;设置强口令字,以及安全的服务配置;部署防火墙,设置对控制及内容上传通道的限制访问;配置数据备份服务,必要时设置冗余和双机热备机制。
1.2.5.3 Web应用程序安全设防措施
  • 采用动态内容、支持用户输入的Web应用程序较静态HTML具有更高的安全风险
  • 对于必须提供用户交互、采用动态页面的Web站点,尽量使用具有良好安全声誉及稳定技术支持力量的Web应用软件包。
  • 只在必要时候自主或外包开发Web应用程序,重视安全编程、持续性的安全测试和维护。
  • 使用Web服务器软件提供的日志功能,对Web应用程序的所有访问请求进行日志记录与安全审计。
1.2.5.4 Web站点数据安全设防措施
  • 提高网站内容维护人员的数据安全意识,确保组织与国家秘密信息不被泄露到对外公开提供服务的Web站点
  • 对维护网站的数据安全实施日常检测与防护,提升Web站点的安全性,避免网站被攻击以后的信息泄露、网站内容篡改与不良信息上传。

1.3 SQL注入

1.3.1 SQL注入攻击原理

SQL注入是一种针对Web应用程序的攻击方式,攻击者通过将恶意的SQL代码注入到Web应用程序的输入参数中,从而达到欺骗数据库服务器执行非法操作的目的。SQL注入的本质是利用Web应用程序中未对用户输入的数据进行充分验证和过滤,导致攻击者可以通过构造恶意的输入参数来执行未授权的数据库查询、插入、修改、删除等操作。攻击者可以利用这些非法操作来获取敏感信息、破坏数据库完整性、影响Web应用程序的正常运行。

1.3.2 SQL注入攻击步骤和过程

SQL注入攻击通常分为以下几个步骤:
(1)信息收集:攻击者通过对Web应用程序进行访问和测试,了解Web应用程序的结构、数据传输方式、输入参数等信息。
(2)构造注入语句:攻击者根据收集到的信息,构造针对Web应用程序的SQL注入攻击语句,通过在输入参数中插入恶意SQL代码来达到攻击目的。
(3)执行注入语句:攻击者将构造好的恶意注入语句发送给Web应用程序,由Web应用程序将其传递给数据库服务器执行,从而达到攻击目的。
(4)获取结果:攻击者获取数据库服务器返回的结果,包括敏感信息和执行状态等信息。

1.3.3 SQL注入工具

SQL注入攻击工具是指一些专门用于自动化SQL注入攻击的软件工具,包括常见的工具有:Sqlmap、Havij、BBSQL、SQLninja等。这些工具可以自动检测Web应用程序是否存在SQL注入漏洞,自动构造注入语句,自动执行注入攻击,并自动获取攻击结果。

1.3.4 SQL注入攻击防范措施

防范SQL注入攻击的主要措施包括以下几点:

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

1.4 XSS跨站脚本攻击

1.4.1 XSS攻击技术原理

XSS攻击利用了Web应用程序没有对用户输入进行足够的过滤和转义,导致攻击者可以在Web应用程序的页面上注入恶意脚本代码,从而控制用户的浏览器,窃取用户敏感信息或者进行其他恶意操作。

1.4.2 XSS攻击类型

XSS攻击类型包括反射型XSS、存储型XSS和DOM-based XSS。
反射型XSS攻击是指攻击者将恶意脚本代码注入到Web应用程序的URL参数中,当用户点击包含恶意代码的URL链接时,服务器将恶意代码反射回用户的浏览器执行,从而导致攻击。
存储型XSS攻击是指攻击者将恶意脚本代码注入到Web应用程序的数据库中,当用户浏览包含恶意代码的页面时,服务器从数据库中读取恶意代码并将其返回给用户浏览器执行。
DOM-based XSS攻击是指攻击者将恶意脚本代码注入到Web应用程序的DOM中,当用户浏览包含恶意代码的页面时,浏览器会解析恶意代码并执行,从而导致攻击。

1.4.3 XSS攻击防范措施

为了防止XSS攻击,需要在Web应用程序的各个层面采取相应的安全防范措施。

1.4.3.1 服务器端防范措施

在服务器端,需要对用户输入进行过滤和转义,确保用户输入的数据符合预期的格式和内容。具体来说,可以使用一些工具或框架来进行输入过滤和转义,例如编码库、过滤器等。
此外,还可以使用HTTPOnly和Secure等Cookie属性,以及Content Security Policy(CSP)等机制来防止XSS攻击。HTTPOnly属性可以防止JavaScript代码访问Cookie,从而防止攻击者窃取用户的Cookie信息。Secure属性可以确保Cookie只能通过HTTPS协议传输,从而防止在传输过程中被窃取。CSP机制可以限制Web应用程序可以加载的资源类型和来源,从而防止恶意脚本的注入。

1.4.3.2 客户端防范措施

跨站脚本最终是在客户端浏览器上执行的,因此对抗XSS攻击需要提升浏览器的安全设置,如提高浏览器访问非受信网站时的安全等级、关闭Cookie功能或设置Cookie只读,此外也可采用非主流的安全浏览器如Chrome、Opera来尽量降低安全风险。

2. 实验过程

2.1 SEED SQL注入攻击与防御实验

20222808郭锦城 2022-2023-2 《网络攻防实践》第10次作业_第1张图片
首先需要在虚拟机上安装配置Firefox,apache,phpBB2,这三个在SEED Ubuntu镜像中已有,Apache Server只需要运行命令sudo service apache2 start。
在这里插入图片描述
phpBB2的源码路径在/var/www/SQLInjection/下。
20222808郭锦城 2022-2023-2 《网络攻防实践》第10次作业_第2张图片

2.1.1 对SELECT语句的SQL注入攻击

首先使用指令mysql -u root -pseedubuntu登陆MySql数据库,-u指定用户名,-p指定密码。然后使用指令use Users; show tables;查看该数据库下面的表。
20222808郭锦城 2022-2023-2 《网络攻防实践》第10次作业_第3张图片
使用指令select * from credential;来打印所有员工的信息,在这里可以看到员工的姓名、工资以及hash之后的密码等信息。如果要查询单独的某一个用户,可以通过select * from credential where Name=xxx;语句进行查询。
20222808郭锦城 2022-2023-2 《网络攻防实践》第10次作业_第4张图片

访问虚拟机内的URLwww.SEEDLabSQLInjection.com,在进入SEED Lab之前系统会要求你登陆。这个登陆认证由服务器上的/var/www/SQLInjection/unsafe_home.php实现,需要用户输入用户名和密码来通过认证。
20222808郭锦城 2022-2023-2 《网络攻防实践》第10次作业_第5张图片
由于上面我们已经知道phpBB2的源码路径在/var/www/SQLInjection/下。其中有一个存在sql注入攻击的主页unsafe_home.php,我们可以通过vim unsafe_home.php查看对应的源码。
20222808郭锦城 2022-2023-2 《网络攻防实践》第10次作业_第6张图片
通过分析文件代码,我们不难看到这里主要使用了 G E T [ ’ u s e r n a m e ’ ] 和 _GET[’username’]和 GET[username]_GET[’Password’]两个session中的元素,并且对pwd进行了hash运算获得加密之后的参数。接下来使用 i n p u t u n a m e 和 input_uname和 inputunameinput_uname构建sql查询语句。最后,我们注意到对于Admin和其他员工所显示的页面是不同的。通过修改“nickname”里边的内容,我们可以实现SQL注入攻击。

# 原语句
"SELECT id, name, eid, salary, birth, ssn, address, email, nickname, Password 
	FROM credential 
	WHERE name= ’$input_uname’ and Password=’$hashed_pwd’";

# 攻击语句
"SELECT id, name, eid, salary, birth, ssn, address, email, nickname, Password 
	FROM credential 
	WHERE name= 'Admin' ”;// and Password=’$hashed_pwd’

20222808郭锦城 2022-2023-2 《网络攻防实践》第10次作业_第7张图片

sql注入攻击之后,我们返回浏览器进入登录界面,使用账号Admin无密码登录,成功进入主页。也就证明了我们攻击的成功。
20222808郭锦城 2022-2023-2 《网络攻防实践》第10次作业_第8张图片
接下来我们需要用到一个Linux下的自带工具curl。它可以用来请求页面,由于这个网页是使用GET的方式传递数据,我们也就可以使用将参数放置在请求的方式进行sql注入攻击。具体的命令为curl http://www.seedlabsqlinjection.com/unsafe_home.php?username=Admin&Password=
20222808郭锦城 2022-2023-2 《网络攻防实践》第10次作业_第9张图片
根据返回结果可以看出,sql注入攻击成功。

2.1.2 对UPDATE语句的SQL注入攻击

这里如果是在select语句的后面追加,我们需要用到update命令,并且在select语句结束以后要用;隔开,如我们需要更新Alice的为0,如果用Alice账号登录的话,需要输入Alice’;updata credential set salary=‘0’ where Name=‘Alice’ #,但是出现的语法错误,这里应该是一个sql语句变量无法支持多sql语句,先查询再更新会出现死锁问题,所以我们只能从原sql为update的操作中进行注入,我们通过unsafe_edit_backend.php文件里找到了update命令。
20222808郭锦城 2022-2023-2 《网络攻防实践》第10次作业_第10张图片
这里我们可以直接从nickname后面加入sql注入,由于所用用户nickname都为空,所以我们可以输入’,Salary = ‘0’ where Name = ‘Alice’";#,这样email后面的赋值均被注释掉了,也就可以直接修改其他用户的属性值,下面用admin用户登录,修改Alice的salary为0。
20222808郭锦城 2022-2023-2 《网络攻防实践》第10次作业_第11张图片
20222808郭锦城 2022-2023-2 《网络攻防实践》第10次作业_第12张图片
保存并返回后发现修改成功。
20222808郭锦城 2022-2023-2 《网络攻防实践》第10次作业_第13张图片

然后我们尝试用Alice的用户修改Boby的密码为888888,这里我们可以用linux自带函数生成SHA-1密文:
在这里插入图片描述
操作步骤跟修改Alice相似,将密码改为888888,退出后登录,成功。
20222808郭锦城 2022-2023-2 《网络攻防实践》第10次作业_第14张图片

2.1.3 SQL对抗

为了了解如何防御sql注入攻击,我们首先要知道sql语句的编译过程。编译sql语句主要分为四个阶段Parsing & Normalizaion Phasing、Compilation Phase、Query optimization Phase和Cache。
对于每个进行查询的sql语句,先要从cache进行查询看是否有已经编译好的程序,如果有就直接进行使用。若没有,则格式化字符串,编译语句,查询编译语句的优化执行,将编译好的内容放入cache,最后执行编译好的sql语句。
这里额外需要注意到的是,对于编译好的内容,各个标签的含义是确定的。例如我们使用’, salary=233333 where Name=‘Boby’#在上文对Nickname字段进行注入。但是在预编译好的sql语句中’, salary=233333 where Name=‘Boby’#这一个完整的字段将看作nickname标签的参数,这样就杜绝了通过构建sql语句进行的sql注入攻击。
首先我们先给出常见的通过组合构建sql语句进行的查询

$sql = "SELECT name, local, gender FROM USER_TABLE WHERE id = $id AND password =’$pwd’ ";
$result = $conn->query($sql))

接下来我们给出通过sql预编译形成的查询语句,语义和上述代码等价

$stmt = $conn->prepare("SELECT name, local, gender FROM USER_TABLE WHERE id = ? and password = ? ");
// Bind parameters to the query
$stmt->bind_param("?", $id, $pwd);
$stmt->execute();
$stmt->bind_result($bind_name, $bind_local, $bind_gender);
$stmt->fetch();

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

20222808郭锦城 2022-2023-2 《网络攻防实践》第10次作业_第15张图片

2.2.1 准备工作

这里要访问的网址是http://www.xsslabelgg.com

# Elgg中已经注册的账户信息
User	   UserName	Password
Admin	   admin	seedelgg
Alice	   alice	seedalice
Boby	   boby	    seedboby
Charlie	   charlie	seedcharlie
Samy	   samy	    seedsamy

# 当前站点的地址和对应的后台文件地址
URL: http://www.xsslabelgg.com
Folder: /var/www/XSS/Elgg/

接下来我们需要安装HTTP Header Live插件。首先我们打开firefox附加组件。查找上述组件,安装,接下来我们可以在View->SideBar中找到它。
20222808郭锦城 2022-2023-2 《网络攻防实践》第10次作业_第16张图片
在接下来的实验中,我们使用Alice作为攻击者,Boby作为受害者,Admin作为蠕虫攻击的第二波受害者。

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

使用Alice的账号密码进行登录,打开Alice的个人页面,进入Edit profile进行编辑。
20222808郭锦城 2022-2023-2 《网络攻防实践》第10次作业_第17张图片
在Brief description中插入我们的XSS攻击代码。
20222808郭锦城 2022-2023-2 《网络攻防实践》第10次作业_第18张图片
点击下方的Save就能看到XSS攻击的结果。

2.2.2 弹窗显示cookie信息

与上面任务操作类似,在Alice的Brief description中插入我们的XSS攻击代码。
20222808郭锦城 2022-2023-2 《网络攻防实践》第10次作业_第19张图片
点击下方的Save就能看到XSS攻击的结果。
20222808郭锦城 2022-2023-2 《网络攻防实践》第10次作业_第20张图片

2.2.3 窃取受害者的cookies

首先我们要将上文获得的cookie放入一个特殊构建的请求,向攻击者服务器发送这个请求。我们在Alice的Brief description中插入下述代码。

      

这里的网址是我自己seed主机的ip地址。端口号为学号后四位(必须是未被占用的)。
20222808郭锦城 2022-2023-2 《网络攻防实践》第10次作业_第21张图片

然后我们在上文ip地址对应的机器上运行命令nc -l 2808 -v(nc就是netcat,-l命令指明监听的是TCP连接,2808是上文提到的端口号,-v用来输出更详细的信息)。之后任意用户访问Alice的主页都将向攻击者的服务器发送对应的cookie信息。最后得到的结果如下图,获取到的cookie也在其中。
20222808郭锦城 2022-2023-2 《网络攻防实践》第10次作业_第22张图片

2.2.4 成为受害者的朋友

首先我们应该通过HTTP Header Live查看加朋友的时候都干了什么?可以看到首先这是一个add friends的action,然后紧接着就是elgg_ts和 elgg_token,这是Elgg本身自带的一套严格的表单验证方法,通过才可以进行加朋友。同样,我们可以看到朋友的id和cookie,通过这些东西我们构造了JavaScript脚本。
20222808郭锦城 2022-2023-2 《网络攻防实践》第10次作业_第23张图片

接下来,我们首先将Boby好友删除,方便和后面形成对比查看。下面这段程序就是我们构造的JavaScript程序了,其中的sendurl中包含了加朋友所需要的东西,也就是我们上面分析的。所以,现在把这段程序放在Alice的About me中(这里注意要是edit HTML模式),因为原来的brief限制长度。这段代码首先是获取elgg_ts和elgg_token,然后构造一个URL访问,44是Alice号。


20222808郭锦城 2022-2023-2 《网络攻防实践》第10次作业_第24张图片
那么我们接下来用Boby账号进行登录,然后访问Alice的主页,Boby就会自动加Alice为好友。返回主页,我们看到右上角Boby成功添加Alice为好友。
20222808郭锦城 2022-2023-2 《网络攻防实践》第10次作业_第25张图片

2.2.5 修改受害者的信息

和上一个问题类似,我们首先要用HTTP Header Live看看修改资料时要做那些事情。同样的,我们可以看到用户在修改自己的profile时发送的http请求的具体格式。通过这个方式构造和上面相近的JavaScript程序。
20222808郭锦城 2022-2023-2 《网络攻防实践》第10次作业_第26张图片
下面这段程序就是构造的JavaScript程序,主要部分在于构造content,其中的几个字段都是profile中的内容,需要修改什么直接修改就好。同时需要指定sendurl。这些内容都是从HTTP Header Live中得到的,然后ajax执行。



将上述代码同样放在Alice的about me中(这里注意要是edit HTML模式)。
20222808郭锦城 2022-2023-2 《网络攻防实践》第10次作业_第27张图片
接着使用Boby账号进行登录,然后访问Alice的profile,返回Boby主页,我们可以看到this had been changed by xss attack.。
20222808郭锦城 2022-2023-2 《网络攻防实践》第10次作业_第28张图片

2.2.6 编写XSS蠕虫

编写代码如下(我们的目的就是这段代码能够复制到其他用户那里,那么我们的蠕虫目标就是完成了的,所以我们使用DOM来查看和使用HTML代码,innerHTML方法是开始和结束标签之间的HTML)。



将上面的代码放在Alice的about me中(注意是edit HTML模式)。
20222808郭锦城 2022-2023-2 《网络攻防实践》第10次作业_第29张图片
接下来切换到Boby去访问Alice的主页,可以看到如下的信息。
20222808郭锦城 2022-2023-2 《网络攻防实践》第10次作业_第30张图片
然后我们使用Admin去访问Boby的主页,同样发现Admin被Boby感染。
20222808郭锦城 2022-2023-2 《网络攻防实践》第10次作业_第31张图片
XSS蠕虫成功。

2.2.7 对抗XSS攻击
2.2.7.1 XSS攻击的预防

通过前面的介绍可以得知,XSS 攻击有两大要素:

  • 攻击者提交恶意代码。
  • 浏览器执行恶意代码。
    针对第一个要素:我们是否能够在用户输入的过程,过滤掉用户输入的恶意代码呢?答案是不可行的。既然输入过滤并非完全可靠,我们就要通过“防止浏览器执行恶意代码”来防范 XSS。这部分分为两类:
  • 防止 HTML 中出现注入。
  • 防止 JavaScript 执行时,执行恶意代码。
2.2.7.1.1 纯前端渲染

纯前端渲染的过程:

  • 浏览器先加载一个静态 HTML,此 HTML 中不包含任何跟业务相关的数据。
  • 然后浏览器执行 HTML 中的 JavaScript。
  • JavaScript 通过 Ajax 加载业务数据,调用 DOM API 更新到页面上。
    在纯前端渲染中,我们会明确的告诉浏览器:下面要设置的内容是文本(.innerText),还是属性(.setAttribute),还是样式(.style)等等。浏览器不会被轻易的被欺骗,执行预期外的代码了。
    但纯前端渲染还需注意避免 DOM 型 XSS 漏洞(例如 onload 事件和 href 中的 javascript:xxx 等,请参考下文”预防 DOM 型 XSS 攻击“部分)。
    在很多内部、管理系统中,采用纯前端渲染是非常合适的。但对于性能要求高,或有 SEO 需求的页面,我们仍然要面对拼接 HTML 的问题。
2.2.7.1.2 转义 HTML

如果拼接 HTML 是必要的,就需要采用合适的转义库,对 HTML 模板各处插入点进行充分的转义。
常用的模板引擎,如 doT.js、ejs、FreeMarker 等,对于 HTML 转义通常只有一个规则,就是把 & < > " ’ / 这几个字符转义掉,确实能起到一定的 XSS 防护作用,但并不完善:
|XSS 安全漏洞 | 简单转义是否有防护作用|
|HTML 标签文字内容 | 有|
|HTML 属性值 | 有|
|CSS 内联样式 | 无|
|内联 JavaScript | 无|
|内联 JSON | 无|
|跳转链接 | 无|
所以要完善 XSS 防护措施,我们要使用更完善更细致的转义策略。
例如 Java 工程里,常用的转义库为 org.owasp.encoder

2.2.7.1.3 Content Security Policy

严格的 CSP 在 XSS 的防范中可以起到以下的作用:
禁止加载外域代码,防止复杂的攻击逻辑。
禁止外域提交,网站被攻击后,用户的数据不会泄露到外域。
禁止内联脚本执行(规则较严格,目前发现 GitHub 使用)。
禁止未授权的脚本执行(新特性,Google Map 移动版在使用)。
合理使用上报可以及时发现 XSS,利于尽快修复问题。

2.2.7.1.4 输入内容长度控制

对于不受信任的输入,都应该限定一个合理的长度。虽然无法完全防止 XSS 发生,但可以增加 XSS 攻击的难度。

2.2.7.1.5 HTTP-only Cookie

禁止 JavaScript 读取某些敏感 Cookie,攻击者完成 XSS 注入后也无法窃取此 Cookie。

2.2.7.1.6 验证码

防止脚本冒充用户提交危险操作。

2.2.7.2 XSS的检测
  • 使用通用 XSS 攻击字符串手动检测 XSS 漏洞。
  • 使用扫描工具自动检测 XSS 漏洞。
  • 除了手动检测之外,还可以使用自动扫描工具寻找 XSS 漏洞,例如 Arachni**、Mozilla HTTP Observatory**、w3af** 等。

3.学习中遇到的问题及解决

Q1:修改主机名后会有报警信息
A1:需要修改/etc/hosts中的内容
Q2:网页报错You have an error in your SQL syntax;
A2:仔细检查SQL语句中的引号等符号是否是英文的。

4.实验总结

这次的实验整体还是比较流畅的,但是开头时就发现了有些sql语句很不熟悉了。整理流程比较长,一些步骤重复性还是比较高的。另外就是对HTML代码不熟悉。

你可能感兴趣的:(网络攻防,网络,安全,服务器)