systemctl start apache2 #开启Apache服务
systemctl stop apache2 #关闭Apache服务
开启Apache服务后,打开浏览器,输入网址http://127.0.0.1(不能是https),显示如下页面即成功开启Apache服务。
HTML
HTML(超文本标记语言),是一种用来结构化 Web 网页及其内容的标记语言。HTML 由一系列的元素组成,这些元素可以用来包围不同部分的内容,使其以某种方式呈现或者工作。HTML文本是由 HTML命令组成的描述性文本,HTML命令可以说明文字、 图形、动画、声音、表格、链接等。HTML的结构包括头部 、主体两大部分。头部描述浏览器所需的信息,主体包含所要说明的具体内容。
表单
表单是一种用户界面,用于收集和提交数据。表单通常包含多个字段和文本框,用于输入各种信息,也可以有各种不同的控件。
GET与POST方法
在客户机和服务器之间进行请求-响应时,两种最常被用到的方法是:GET 和 POST。
GET :从指定的资源请求数据。
POST : 向指定的资源提交要被处理的数据。
GET 提交参数一般显示在 URL 上,POST 通过表单提交不会显示在 URL 上,POST 更具隐蔽性。
编写一个含有表单的HTML
vi /var/www/html/20202410.html
创建一个有表单的HTMLvi /var/www/html/20202410.html
<html>
<head>
<title>20202410wyy</title>
</head>
<body>
<h1 align="center">用户登录</h1>
<meta http-equiv="Content-Type" charset="utf-8">
<center>
<form action="" target="_blank" method="POST">
<label for="fname">账号:</label><br>
<input type="text" id="username" name="username" ><br>
<label for="lname">密码:</label><br>
<input type="password" id="password" name="password"><br><br>
<input type="submit" value="登录">
</form>
</center>
</body>
</html>
<script type="text/javascript">
function checked()
{
var user= document.forms["form1"]["username"].value;
var pd=document.forms["form1"]["password"].value;
if(user == "" || pd=="")
{
if(user==''){
alert("用户名不能为空!");
return false;
}
else if(pd == "" || pd==NULL)
{
alert("密码不能为空!");
return false;
}
}
}
</script>
2. 编写action_page.php,用于在用户点击登陆按钮后回显“欢迎+输入的用户名”。
<!DOCTYPE html>
<head>
<meta charset="UTF-8">
<title>Welcome!</title>
</head>
<body>
<h1 align="center">欢迎!<?php echo $_POST['username'];?></h1>
</body>
</html>
<form name="form1" action="action_page.php" method="POST" onsubmit="return checked()">
<script type="text/javascript"> alert("JavaScript注入攻击20202410") </script> #JavaScript注入
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(‘20202410’); #修改密码
select user, password, host from user; #查看当前用户信息,可以看到密码序列发生变化,密码修改成功
flush privileges; #更新权限
quit #退出数据库,使用新的密码登录
create database wyy; #建立数据库
use wyy; #使用新建的wyy数据库
create table login (username VARCHAR(20),password VARCHAR(20)); #建立数据库表login,设置字段基本信息(username和password)
insert into login values('wenyinying','2410'); #插入数据
insert into login values('wyy','20202410'); #插入数据
grant select,insert,update,delete on wyy.* to wenyinying@localhost identified by "kali";
#在MySQL中增加新用户,使用grant select,insert,update,delete on 数据库.* to 用户名@登录主机(可以是localhost,也可以是远程登录方式的IP) identified by "密码";指令,这句话的意思是:将对某数据库的所有表的select,insert,update,delete权限授予当前主机localhost登录的用户wenyinying,kali是登录密码
mysql -u wenyinying -p #exit退出后使用新的用户名和密码进行登录
<?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", "wenyinying", "kali", "wyy");
$query_str1="use wyy;";
/* 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"
Success into database!";
echo$uname;
if ($result = $mysqli->query($query_str)) {
if ($result->num_rows > 0 ){
echo "
{$uname}:Welcome!
";
}
else {
echo "
Login Fail!
" ; }
/* free result set */
$result->close();
}
$mysqli->close();
?>
<form name="form1" action="login.php" method="POST" onsubmit="return checked()">
' or 1=1#
输入的用户名和代码中select语句组合起来变成了
SELECT * FROM login where username=' ' or 1=1# and password=' ';
#为注释符,即把后面的内容都注释掉了,由于1=1是永真式 ,所以这个条件永远成立,所以不管密码是否输入正确,都能够成功登陆
<script> alert("来自20202410的XSS攻击") </script>
XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java、 VBScript、 LiveScript、ActiveX、 Flash 或者甚至是普通的HTML。攻击成功后,攻击者可能得到包括但不限于更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容。
此处使用反射型XSS,只是简单的把用户输入的数据从服务器反射给用户浏览器,要利用这个漏洞,攻击者必须以某种方式诱导用户访问一个精心设计的URL(恶意链接),才能实施攻击。
java -jar Webgoat-2023.4.jar
进行解压。http://localhost:8080/WebGoat
进入WebGoat,进行注册,完成后会跳出如下页面,即可使用。SQL Injection(Intro)
,选择9号。Smith
or
和 '1'='1
,获得数据。构造1=1永真式。
1=1
和1 or 1=1
。构造1=1永真式。
Cross Site Sorpting
,选择7号。
。start.mvc#test/
。提示“The ‘base route’ in this case is: start.mvc#lesson”,打开js文件,可以看到“‘test/:param’: ‘testRoute’”,故输入“start.mvc#test/”。
CSRF(跨站请求伪造攻击),是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。
Site Request Forgeries
,选择3号。Submit Query
按钮,发现flag值为null。问题1解决方案:Firefox默认使用https,所以此时跳转地址为https://127.0.0.1,应为http://127.0.0.1。
问题2:我先在主机里创建了html文件和php文件进行调试,在做2.2.2时总无法正常提示账户和密码不能为空。
问题2解决方案:检查代码无误后尝试在kali里运行,没有出现问题。可能是环境的原因。
这次实验在Linux下编写了前端和后端,搭建了一个比较简单的网页,并对此进行一些简单攻击。同时接触了用来说明WEB应用中存在的安全漏洞的靶场WebGoat,在其中尝试了SQL注入、XSS攻击和CSRF攻击。本次实验类似于在实际情况下对一些防护不到位的网站进行攻击,在实践中增强网络安全意识,同时警醒我们牢记法律,不要在底线上试探。