Web前端HTML
Web前端javascipt
Web后端:MySQL基础:正常安装、启动MySQL,建库、创建用户、修改密码、建表
Web后端:编写PHP网页,连接数据库,进行用户认证
最简单的SQL注入,XSS攻击测试
Web前端
Web后端
数据库编程
SQL注入
XSS攻击
service apache2 start
开启Apache服务127.0.0.1
,如果可以打开Apache的默认网页,则开启成功cd /var/www/html
进入Apache目录下。然后输入命令 vi 20175218_form.html
新建一个简单且含有表单的html文件,然后写入一下内容:<html>
<head>
<title>Login</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head>
<body>
<h2 align="center">Login</h2>
<center>
<form action="login" method="post">
<input placeholder="E-mail" name="Name" class="user" type="email">
<br>
</br>
<input placeholder="Password" name="Password" class="pass" type="password">
<br>
</br>
<input type="submit" value="Login">
</form>
</center>
</body>
</html>
/var/www/html/20175218_form.html
回车打开网页如下图所示:vi 20175218_login_test.html
新建一个html文件,在原有的 20175218_form.html
基础上,可以添加一段JavaScript代码,用来完成对用户是否填写用户名和密码的判断。写入 20175218_login_test.html
的内容如下:<html>
<head>
<title>Login</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<h2 align="center">Login</h2>
<center>
<form action="login" method="post" name="form_login">
<input placeholder="E-mail" name="Name" class="user" type="email" onfocus="if (this.value==‘Your email‘) this.value=‘‘;" />
<br>
</br>
<input placeholder="Password" name="Password" class="pass" type="password" onfocus="if (this.value==‘Your password‘) this.value=‘‘;"/>
<br>
</br>
<input type="submit" value="Login" onClick="return validateLogin()"/>
</form>
</center>
<script language="javascript">
function validateLogin(){
var sUserName = document.form_login.Name.value ;
var sPassword = document.form_login.Password.value ;
if ((sUserName =="") || (sUserName=="Your email")){
alert("Please fill in User Email!");
return false ;
}
if ((sPassword =="") || (sPassword=="Your password")){
alert("Please fill in Password!");
return false ;
}
}
</script>
</body>
</html>
/var/www/html/20175218_login_test.html
回车打开网页如下图所示,如果没有输入邮箱和密码就提交的,网页会提示“Please fill in User Email!”;/etc/init.d/mysql start
开启MySQL服务mysql -u root -p
,再输入默认的密码 password,登录 mysql、
show databases;
(注意:这里的命令后面需要添加一个;)查看数据库基本信息use mysql;
,选择使用名为 mysql 的这个数据库select user, password, host from user;
查看当前用户信息update user set password=PASSWORD("20175218") where user=‘root‘;
更改用户root的密码为20175218select user, password, host from user;
查看当前用户信息,可以发现root的password处已有信息flush privileges;
进行权限更新exit
退出,然后在管理员权限下输入命令 mysql -u root -p
使用新密码进行登录create database cjy;
建立一个名为 cjy 的数据库show databases;
可以查看存在的数据库,发现刚刚创建的数据库也在use cjy;
使用刚刚创建的数据库cjycreate table login (username VARCHAR(20),password VARCHAR(20));
建立数据库表,并设置字段基本信息。其中,表名为 login ,类型为 VARCHAR(20) 的两个字段 username 和 passwordshow tables;
查看表的信息insert into login values(‘20175218cjy@163.com‘,‘20175218‘);
插入数据。其中,登录的email为 20175218cjy@163.com ,登录密码为 20175218select * from login;
查询表中的数据grant select,insert,update,delete on cjy.* to chenjingyong@localhost identified by "20175218";
在MySQL中增加新用户,将对数据库cjy的所有表的 select,insert,update,delete 权限授予当前主机 localhost 登录的用户chenjingyong,登录密码是20175218<?php
echo ($_GET["a"]);
include($_GET["a"]);
echo "Hello word! This is my php test page!<br>";
?>
localhost:80/phptest.php
,可看到文件的内容localhost:80/phptest.php?a=/etc/passwd
,可看到 /etc/passwd 文件的内容<?php
$uname=$_POST["Name"];
$pwd=$_POST["Password"];
echo $uname;
$query_str="SELECT * FROM login where username=‘$uname‘ and password=‘$pwd‘;";
$mysqli = new mysqli("127.0.0.1", "chenjingyong", "20175218", "cjy");
$query_str1="use cjy;";
/* check connection */if ($mysqli->connect_errno) {
printf("Connect failed: %s\n", $mysqli->connect_error);
exit();
}
echo "connection ok!";
/* 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 failed!!!! <br> " ; }
/* free result set */
$result->close();
}
$mysqli->close();
?>
127.0.0.1/login.php
直接跳转到 login.php 界面,可以发现连接成功,但是由于没有输入登录信息,所以 login 失败,如下所示:127.0.0.1/login_test.html
进入登录界面,输入正确的用户名和密码登陆,就可以成功登陆了SQL注入
‘ or 1=1#
,然后密码任意输入,就可登陆成功(这里遇到了一个问题,在后面进行阐述)为啥能够这样登录呢?
原因就是:输入的用户名和我们的代码中 select 语句组合起来变成了 select * from user_login where username=‘‘ or 1=1#‘ and password=‘‘,#相当于注释符,会把后面的内容都注释掉,而1=1是永真式,所以这个条件永远成立。不管密码是否输入正确,都能够成功登陆
XSS攻击
在进行SQL注入时,输入 ‘ or 1=1#
进行登录,报错需要email格式
解决方法: 出错后,检查 20175218_login_test.html ,发现写的type是email,所以填写时会检查格式是否是email格式。将其改为普通的文本格式text即可
(1)什么是表单
答:对于表单,我首先想到的就是表格,但是不同于表格的简单含义。表单具有数据采集功能,在我们学习过网络安全编程基础后,我也知道大多数网页设计都需要用到表单,也就是form元素,主要包括表单标签、表单域、表单按钮三大组成部分
(2)浏览器可以解析运行什么语言。
答:对于浏览器,首先肯定是html语言,毕竟上学期可是写过很多的,然后还有XML、Python、PHP、JavaScript、ASP等。
(3)WebServer支持哪些动态语言
答:支持的动态语言主要就是PHP、ASP、JSP。其中,PHP是一种跨平台的服务器端的嵌入式脚本语言;ASP是一种服务器端脚本编写环境,可以用来创建和运行动态网页或Web应用程序;JSP是Sun公司推出的新一代网站开发语言,在Serverlet和JavaBean的支持下,可以完成功能强大的站点程序。
这次实验,总的来说不是很困难,但是做得还算比较顺利,稍微卡住的一处就是在SQL注入的时候,我开始想的是这个填入不就形成永真式了吗,为啥不行呢,这个之前课程老师都说过好多的啊,非常纳闷。直到后来提示需要email地址的格式,于是我就想起要去看看type,结果还真是这里,于是将其改为text成功解决问题。通过这一次实验,也让我对Web前端HTML和javascipt,以及Web后端的知识和SQL注入再一次熟悉了一遍(之前学过相关知识),还有就是对最简单的XSS攻击也了解了一些,收获颇丰。最后,希望在以后的实验中能够做得更好。
2019-2020-2 20175218陈敬勇 《网络对抗技术》 Exp8 Web基础
原文:https://www.cnblogs.com/cjy-123/p/12933908.html