20175110 王礼博 Exp 8 Web基础
GET/POST
-
GET把参数包含在URL中,POST通过request body传递参数;
-
GET产生一个TCP数据包;POST产生两个TCP数据包;
-
GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
SQL注入
-
通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串达到欺骗服务器执行恶意的SQL命令,即利用现有应用程序,将(恶意的)SQL命令注入到后台数据库引擎执行的能力,可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句;
-
输入的用户名' or 1=1#中#相当于注释符,把后面的内容都注释掉,1=1是永真式,条件永远成立,和代码中select语句组合后变成select * from login5314_table where username='' or 1=1# ' and password='',不管密码是否输入正确,都能够成功登录。
XSS攻击
- 跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets,CSS)的缩写混淆,XSS是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中,比如这些代码包括HTML代码和客户端脚本,攻击者利用XSS漏洞旁路掉访问控制——例如同源策略(same origin policy),这种类型的漏洞由于被黑客用来编写危害性更大的phishing攻击而变得广为人知。
-
输入指令
service apache2 start
开启Apache服务。 -
在浏览器中输入Kali IP打开Apache的默认网页,如果能打开,则服务开启成功。
- 编写一个能提交用户名密码的20175110.html页面,html代码如下
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>login</title>
</head>
<style type="text/css">
body{
background-image:url(/home/20175110wlb/桌面/image.jpg)
}
</style>
<body>
<div align="center" style="padding-top: 50px;">
<form action="login" method="post" name="login" >
<table width="740" height="300" >
<tr height="30">
<td colspan="2"></td>
</tr>
<tr height="1">
<td width="40%"></td>
<td width="5%"><p style="font-size:20;color:#FFF">用户名:</p></td>
<td><input type="text" value="" name="username" id="username"/></td>
<td width="30%"></td>
</tr>
<tr height="1">
<td width="40%"></td>
<td width="5%"><p style="font-size:20;color:#FFF">密 码:</p></td>
<td><input type="password" value="" name="password" id="password"/></td>
<td width="30%"></td>
</tr>
<tr height="1">
<td width="40%"></td>
<td width="5%"><input type="submit" value="登录"/></td>
<td align="center"><input type="button" name="close" value="关闭" οnclick="window.close();" /></td>
<td width="30%"></td>
</tr>
</table>
</form>
</div>
</body>
</html>
- 进入登录界面
- 新建一个2.html;添加一个如果用户名或密码为空时会警告的一个jsp,代码如下
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>login</title>
<script type="text/javascript">
function resetValue(){
document.getElementById("username").value="";
document.getElementById("password").value="";
}
</script>
</head>
<style type="text/css">
body{
background-image:url(/home/20175110wlb/桌面/image.jpg)
}
</style>
<body>
<div align="center" style="padding-top: 50px;">
<form action="login.php" method="POST" name="login" >
<table width="740" height="300" >
<td colspan="2"></td>
</tr>
<tr height="1">
<td width="40%"></td>
<td width="5%"><p style="font-size:20;color:#FFF">用户名:</p></td>
<td><input type="text" value="" name="username" id="username"/></td>
<td width="30%"></td>
</tr>
<tr height="1">
<td width="40%"></td>
<td width="5%"><p style="font-size:20;color:#FFF">密 码:</p></td>
<td><input type="password" value="" name="password" id="password"/></td>
<td width="30%"></td>
</tr>
<tr height="1">
<td width="40%"></td>
<td width="5%"><input type="submit" name="login" value="登录"onClick="return Login()" /></td>
<td align="center"><input type="button" name="close" value="关闭" οnclick="window.close();" /></td>
<td width="30%"></td>
</tr>
</table>
</form>
</div>
<script language="javascript">
function Login(){
var Name = document.login.username.value ;
var Pwd = document.login.password.value ;
if ((Name =="") ){
alert("用户名为空!");
return false ;
}
if ((Pwd=="")){
alert("密码为空!");
return false ;
}
}
</script>
</body>
</html>
- 用户名或密码为空时报错,效果如下:
4.Web后端:MySQL基础:正常安装、启动MySQL,建库、创建用户、修改密码、建表
- 开启MySQL服务,直接输入命令
service mysql start
,再输入mysql -u root -p
登录,默认密码为空。
-
用
show databases;
查看数据库基本信息。 -
输入
use mysql;
选择使用mysql这个数据库。 -
输入
select user, password, host from user;
查看当前用户信息。
-
输入
update user set password=PASSWORD("5110") where user='root';
,修改密码。 -
输入
flush privileges;
,更新权限。 -
输入
exit
退出数据库,输入mysql -u root -p
,使用新的密码登录。
- 输入以下代码创建一个新库wlb,创建一个新表login5110,插入一行信息,最后显示出来。
create database wlb;
use wlb
create table login5110(username VARCHAR(30),password VARCHAR(30));
insert into login5110 values('wlb','20175110');
select * from login5110;
-
在MySQL中增加新用户,使用
grant select,insert,update,delete on wlb.* to wlb@localhost identified by "20175110";
指令。 -
使用
exit
退出,然后使用mysql -u wlb -p
进行用户登录,注意使用新密码,登录成功,说明创建用户成功。
- 先用一小段php程序进行测试,注意用指令
cp /home/20175110wlb/桌面/20175110.php /var/www/html/
拷贝到/var/www/html下。
<?php
echo ($_GET["a"]);
include($_GET["a"]);
echo "20175110<br>";
?>
- 新建一个链接前台和后台的PHP文件login.php,代码如下
<?php
$uname=($_POST["username"]);
$pwd=($_POST["password"]);
/*echo $uname; */
$query_str="SELECT * FROM login5110 where username='{$uname}' and password='{$pwd}';";
/*echo "<br> {$query_str} <br>"; */
$mysqli = new mysqli("127.0.0.1", "wlb", "20175110", "wlb");
/* check connection */
if ($mysqli->connect_errno) {
printf("Connect failed: %s\n",$mysqli->connect_error);
exit();
}
echo "连接成功! ";
if ($result = $mysqli->query($query_str)) {
if ($result->num_rows > 0 ){
echo "<br> welcome:{$uname}<br> ";
}
else {
echo "<br> 登入失败 <br> " ;
}
/* free result set */
$result->close();
}
$mysqli->close();
?>
- 在浏览器输入127.0.0.1/2.html访问自己的登录界面,输入正确的用户名和密码进行登录。
- 若用户名或密码输入错误则会跳转到错误提示的PHP网页。
6.1 最简单的SQL注入
- 在用户名输入框输入
' or 1=1#
,密码任意输入。
- 可以成功登录。
6.2 xss攻击测试
-
在login.php中加一行代码
echo "<br> {$query_str} <br>";
。 -
进入登录页面,用户名输入
<img src="cat.jpg" />
,密码随意输入。
- 登录后成功跳转到图片界面
(1)什么是表单?
表单在网页中主要负责数据采集功能。
一个表单有三个基本组成部分: 表单标签:这里面包含了处理表单数据所用CGI程序的URL以及数据提交到服务器的方法。
表单域:包含了文本框、密码框、隐藏域、多行文本框、复选框、单选框、下拉选择框和文件上传框等。
表单按钮:包括提交按钮、复位按钮和一般按钮;用于将数据传送到服务器上的CGI脚本或者取消输入,还可以用表单按钮来控制其他定义了处理脚本的处理工作。
(2)浏览器可以解析运行什么语言?
超文本标记语言:HTML
可扩展标记语言:XML
脚本语言:ASP、PHP、Script、JavaScript、VBScript、Perl、Python、ColdFusion、Java、JSP等
(3)WebServer支持哪些动态语言?
web server支持 JavaScript、ASP、PHP、Ruby等脚本语言。
ASP基于IIS WEB SERVER,是微软的服务器端脚本技术。
PHP基于APACHE WEB SERVER,与ASP有几分类似,都是一种在服务器端执行的嵌入HTML文档的脚本语言。
JS作为开发Web页面的脚本语言而出了名的。
Ruby是一种面向对象程序设计的脚本语言。
-
复习了信息安全、网络编程等等之前学习过的知识。
-
学习了在linux中如何搭建数据库、连接前后端,从熟练度上而言,我觉得windows下的操作更方便快捷,尤其是由大量的图形化软件进行辅助,不知道linux平台有无相应的辅助软件。
-
本次实验特别不顺利的在于前端死活都跳不到后端,后面在我尝试六七遍近乎放弃时又莫名其妙好了。
-
提前学习了Web基础,感觉整体上难度不大,更重要的还是实践出真知吧。