91
社区成员
(1)Web前端HTML:
能正常安装、启停Apache。理解HTML,理解表单,理解GET与POST方法,编写一个含有表单的HTML。
(2)Web前端javascipt:
理解JavaScript的基本功能,理解DOM;
在(1)的基础上,编写JavaScript验证用户名、密码的规则。在用户点击登陆按钮后回显“欢迎+输入的用户名”;
尝试注入攻击:利用回显用户名注入HTML及JavaScript。
(3)Web后端1:
MySQL基础:正常安装、启动MySQL,建库、创建用户、修改密码、建表。
(4)Web后端2:
编写PHP网页,连接数据库,进行用户认证。
(5)最简单的SQL注入,XSS攻击测试。
(6)安装Webgoat或类似平台,并完成SQL注入、XSS、CSRF攻击。
(1)表单
表单在网页中主要负责数据采集功能。一个表单有三个基本组成部分: 表单标签:包含处理表单数据所用CGI程序的URL以及数据提交到服务器的方法。 表单域:包含文本框、密码框、隐藏域、多行文本框、复选框、单选框、下拉选择框和文件上传框等。 表单按钮:包括提交按钮、复位按钮和一般按钮;用于将数据传送到服务器上的CGI脚本或者取消输入,还可以用表单按钮来控制其他定义了处理脚本的处理工作。
(2)GET和POST方法
GET和POST是http请求的两种方法,它们的区别在于:
①GET请求通过URL(请求行)提交数据,在URL中可以看到所传参数。POST通过“请求体”传递数据,参数不会在URL中显示。
②GET请求提交的数据有长度限制,POST请求没有限制。
③GET请求返回的内容可以被浏览器缓存起来。而浏览器不会缓存POST请求返回的内容。
④GET对数据进行查询,POST主要对数据进行增删改。也就是说,GET是只读,POST是写。
⑤对于参数的数据类型,GET只接受ASCII字符,而POST没有限制。
(3)JavaScript是一种具有函数优先的轻量级,解释型或即时编译型的编程语言,其功能有:嵌入动态文本于HTML页面;对浏览器事件做出响应;读写HTML元素;在数据被提交到服务器之前验证数据;检测访客的浏览器信息等。
(4)SQL注入
SQL注入指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,得到相应的数据信息。
(5)XSS攻击
XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,也可以包括Java、 VBScript、ActiveX、 Flash 或者甚至是普通的HTML。攻击成功后,攻击者可能得到包括但不限于更高的权限(如执行一些操作)、私密网页内容、会话等各种内容。
(6)CSRF攻击
CSRF 英文全称是 Cross-site request forgery,所以又称为“跨站请求伪造”,是指黑客引诱用户打开黑客的网站,在黑客的网站中,利用用户的登录状态发起的跨站请求。
(7)WebGoat
WebGoat是OWASP组织研制出的用于进行web漏洞实验的应用平台,用来说明web应用中存在的安全漏洞。WebGoat运行在带有java虚拟机的平台之上,当前提供的训练课程有30多个,其中包括:跨站点脚本攻击(XSS)、访问控制、线程安全、操作隐藏字段、操纵参数、SQL盲注、数字型SQL注入、字符串型SQL注入、web服务、危险的HTML注释等等。
1.开启开启Apache服务
使用service apache2 start
开启服务
除了上述命令外,与Apache相关的命令操作还有关闭服务:service apache2 stop
以及重启服务: service apache2 restart
。
开启后,在浏览器中输入“127.0.0.1”访问,打开的如果是以下界面表示服务开启成功:
2.创建一个含有表单的HTML文件
使用vi /var/www/html/20202417.html
创建一个有表单的HTML
在界面中插入以下语句:
<html>
<head>
<title>20202417hmx</title>
</head>
<body>
<h1 align="center">Login</h1>
<meta http-equiv="Content-Type" charset="utf-8">
<center>
<form action="" target="_blank" method="POST">
<label for="fname">name:</label><br>
<input type="text" id="username" name="username" ><br>
<label for="lname">password:</label><br>
<input type="password" id="password" name="password"><br><br>
<input type="submit" value="Login">
</form>
</center>
</body>
</html>
插入完成后退出:
在浏览器上访问“127.0.0.1/20202417.html”,得到的界面如下:
创建成功。
1.在刚才创建的20202417.html中加入部分JavaScript代码,用于判断用户名和密码是否为空:
验证:
验证成功。
2.编写一个php文件,用于实现用户输入用户名和密码后显示“欢迎+用户名”界面:
3.尝试注入攻击:
在用户名上输入:<script type="text/javascript"> alert("JavaScript注入攻击20202417") </script>
:
1.在命令行中输入service mysql start
,开启MySQL服务,然后依次输入以下命令完成下列操作:
mysql -u root -p //使用root权限进入,默认的密码是password
show databases; //查看数据库基本信息
use mysql; //选择使用mysql数据库
select user, password, host from user; //查看当前用户信息
set password for root@'localhost'= password(‘20202417’); //修改密码
select user, password, host from user; //查看当前用户信息,可以看到密码序列发生变化,密码修改成功
flush privileges; //更新权限
quit //退出数据库
2.建立数据库:
mysql -u root -p //登录root用户
create database hmx; //建立数据库
use hmx; //使用我们创建的数据库
create table login (username VARCHAR(20),password VARCHAR(20)); //建立数据库表login,设置字段基本信息(username和password)
insert into login values('hanmengxin','2417');
insert into login values('hmx','20202417'); //插入数据
grant select,insert,update,delete on hmx.* to hanmengxin@localhost identified by "kali";
//在MySQL中增加新用户,将对某数据库的所有表的select,insert,update,delete权限授予当前主机localhost登录的用户hanmengxin,kali是登录密码
exit //退出
mysql -u hanmengxin -p 使用新的用户名和密码进行登录
1.编写一个login.php文件
<?php
$uname=$_POST["Email"];
$pwd=$_POST["Password"];
echo $uname;
$query_str="SELECT * FROM login where username='$uname' and password='$pwd';";
$mysqli = new mysqli("127.0.0.1", "hangmengxin", "kali", "hmx");
$query_str1="use hmx;";
/* check connection */
if ($mysqli->connect_errno) {
printf("Connect failed: %s\n", $mysqli->connect_error);
exit();
}
echo " Successfully connected!";
/* Select queries return a resultset */
if ($result = $mysqli->query($query_str1))
echo"<br>Success into database!";
echo$uname;
if ($result = $mysqli->query($query_str)) {
if ($result->num_rows > 0 ){
echo "<br> {$uname}:Welcome! <br> ";
}
else {
echo "<br> Login Fail! <br> " ; }
/* free result set */
$result->close();
}
$mysqli->close();
?>
修改前边创建的20202417.html文件的form:<form name="form1" action="login.php" method="POST" onsubmit="return checked()">
2.再次访问20202417.html文件:
输入正确的用户名、密码:
数据库连接成功,登录成功!
输入错误的用户名、密码:
登录失败。
1.SQL注入:
用户名输入为“ ' or 1=1# ”,密码任意
可以看到登录成功。
2.XSS攻击:
输入
弹窗如下:
1.下载地址:https://github.com/WebGoat/WebGoat/releases
完成下载后将压缩包拖入kali,解压:
2.解压完成后,在浏览器中访问:http://localhost:8080/WebGoat/login:
3.注册用户名:20202417hmx,密码:20202417
登录成功:
1.String SQL injection
依次选择左侧栏A3→SQL Injection(Intro)→9号
观察提示中所给SQL查询语句,选择“ Smith' ”“ or ”和“ '1'='1 ”填入
如上图,我们已经获得了数据库中的数据。
(first_name且last_name为真,first_name已给出,只需选择填入last_name。Smith'与last_name=后的第一个'(单引号)配对,'1'='1与+lastName+"后的(单引号)配对,形成'Smith' or '1'='1'的永真式。)
2.Numeric SQL injection
选择10号,填入“ 1=1 ”和“ 1 ”
没有成功,尝试填入“ 1 ”和“ 1 or 1=1 ”
成功获取信息。(1 or 1=1为永真式)
3.Compromising confidentiity with String SQL injection
选择11号,构造永真式,输入Name为“ Smith ”,TAN为“ 3SL99A'or'1'='1 ”
成功获取信息。
1.选择左侧栏A3→Cross Site Sorpting→选择7号
填入“ ”如下:
2.DOM-Based XSS
选择10号,在空栏处输入“start.mvc#test/”
攻击成功。
1.选择左侧A10 Cross-Site Request Forgeries→3号→点击Submit Query按钮
点击Submit Query按钮后,跳转到flag页面,可发现flag值为null:
2.查看Submit Query按钮部分的html代码:
发现Submit Query按钮type是hidden。
3.新建一个20202417input.html文件,将Submit Query按钮部分的html代码复制过去:
4.访问20202417input.html界面,点击Submit Query按钮后,再次跳转到flag页面:
得到flag值为:53766.
5.回到WebGoat CSRF攻击页面,输入上面获取到的flag值
攻击成功。
1.在2.2Web前端javascipt”中,无法正确跳转到欢迎界面。试了很多次都没有解决,后来询问同学得知是因为apache服务没有开启,后边实验2.6.4那个访问20202417input.html时也是同样的问题,在打开的界面中看不到Submit Query按钮。
2.在解压 Webgoat-2023.4.jar时报错,提示获取不到这个文件
后来自己发现文件是在桌面上,要先进入桌面这个文件夹才能进行解压。
本次实验的目的是掌握网络攻击技术的基本原理。本次实验相较于前几次实验来说内容较多,但倒不算特别难,只是需要注意一些小问题,通过这次实验学到了很多知识,比如尝试编写了前端(HTML、javascipt)和后端(MySQL、PHP网页),在前边做的这些工作的基础上,进行了各种攻击(SQL注入、XSS攻击、CSRF攻击)的尝试。在这次实验中我能够灵活运用相关的攻击技术。虽然在其中不免遇到了很多困难,但是在老师和同学的帮助下我还是一一解决了这些问题,实现了自我的进步。
最后,这次是本学期最后一次实验,总体来说,这些实验有一些挺难,但是大部分还是较为基础的,可能就是一些细节的问题有时候没有注意所以导致有时候做实验时出现问题,但是在这八次实验中,我还是学到了很多网络攻防相关的知识,比如这次的网页攻击、SQL注入,还有之前的漏洞利用、提权、缓冲区溢出等,虽然有时候过程十分困难,但是在老师和同学们的答疑以及学长学姐的博客支持下,还算是顺利的完成了这些实验。在这里也感谢老师一学期的教学指导和同学们对我的帮助!谢谢大家~