什么是表单javascript
表单能够收集用户的信息和反馈意见,是网站管理者与浏览者之间沟通的桥梁。php
一个表单有三个基本组成部分html
表单标签前端
表单域:包含了文本框、密码框、隐藏域、多行文本框、复选框、单选框、下拉选择框和文件上传框等java
表单按钮:包括提交按钮、复位按钮和通常按钮.mysql
浏览器能够解析运行什么语言web
此次实验过程当中遇到了很多问题,但都解决了,感受很开心,特别是最后的图片显示出来了。经过实验也感觉到对MySQL数据库的使用比较不熟练,常常会忘记在命令后面加分号啊什么的。从此次实验也初步了解了一些web攻击的基础知识,在web开发时要注意避免常见的攻击手段。sql
使用apache -v
查看本机安装Apache
的版本状态。数据库
使用netstat -aptn
查看端口占用状况。apache
使用vi /etc/apache2/ports.conf
对apache所要占用的端口进行设置,这里把侦听端口改成了本身的学号5330。
经过systemctl start apache2
开启Apach。
再次使用netstat -aptn
查看端口占用(在这以前kill掉了占用其余端口的进程),发现apache2占用5330端口。
测试apache是否正常工做:在kali的firefox
浏览器上输入127.0.0.1:5330
或localhost:5330
(这里的端口号为/etc/apache2/ports.conf
下设置的Apache监听端口号,我设置为了本身的学号。localhost指kali的IP地址(这里我用了回环地址一样能够测试))。测试结果以下:
使用如下命令在/var/www/html
目录下编辑测试网页test.html
。
cd /var/www/html touch test.html vi test.html
在firefox
浏览器中输入网址127.0.0.1:5330/test.html
打开该网页
点击login
页面发生跳转,但跳转失败。缘由是尚未编写php后端文件。
对网页代码进行改进,加入JavaScript语句。
在/var/www/html
目录下编辑测试php文件login.php
。
<?php echo ($_GET["a"]); include($_GET["a"]); echo "This is lxm php test page!<br>"; ?>
在浏览器打开127.0.0.1:5330/login.php?a=/etc/passwd
可看到/etc/passwd文件的内容
使用/etc/init.d/mysql start
命令开启sql服务。
输入mysql -u root –p
,并根据提示输入密码(默认密码为p@ssw0rd
),进入MySQL.
输入show databases;
,查看基本信息
use mysql;
选择mysql数据库;select user, password, host from user;
,mysql库中的user表中存储着用户名、密码与权限;UPDATE user SET password=PASSWORD("新密码") WHERE user='root';
;flush privileges;
更新权限;quit
退出。从新输入mysql -u root –p
,输入密码检测新密码可否成功使用,登录成功。
create database zy;
创建一个数据库use zy;
进入数据库create table zy (username VARCHAR(20),password VARCHAR(20));
创建一个数据表insert into zy values('zy','5330');
添加数据库的信息select * from zy;
查看数据库中内容
新建用户:grant select,insert,update,delete on 数据库.* to 用户名@localhost identified by "密码";
将对某数据库的全部表的select,insert,update,delete权限授予某用户。
退出后,输入mysql -u 用户名 –p
登陆。成功。
在/var/www/html文件夹下编辑test2.html
<html> <html> <head> <title>test2</title> </head> <body> <form name="login" method="POST" action="login.php"> <table> <tr><td>username:</td><td><input type="text" name="username" onfocus="if (this.value=='Your name') this.value='';" /></td></tr> <tr><td>password:</td><td><input type="password" name="userpwd" onfocus="if (this.value=='Your password') this.value='';" /></td></tr> </table> <input type="submit" value="login" onClick="return validateLogin()"/> <input type="reset" value="reset"> </form> <script language="javascript"> function validateLogin(){ var sUserName = document.login.username.value ; var sPassword = document.login.password.value ; if ((sUserName =="") || (sUserName=="Your name")){ alert("user name"); return false ; } if ((sPassword =="") || (sPassword=="Your password")){ alert("password!"); return false ; } } </script> </body> </html>
在firefox
浏览器中输入127.0.0.1:5330/test2.html
,就能够访问本身的登录页面啦
在登陆页面中输入数据库中存有的用户名和密码并点击提交进行用户认证登陆成功,输入数据库中没有的就会认证失败
登录成功。
最后发现是php文件中的$mysqli = new mysqli("127.0.0.1", "zy", "123456", "zy");
语句里的值有问题。通过更改后成功登录。第一个zy
对应的是MySQL的用户名,123456
是用户密码,第二个zy
是所要使用的数据库名。
这个漏洞是由语法形成的漏洞,接下来对刚刚本身创建的登陆网站进行注入。
构造SQL注入语句:在用户名输入框中输入' or 1=1#
,密码随便输入,此时合成后的SQL查询语句为select * from users where username='' or 1=1#' and password=m''
即如下的两句sql语句等价:
select * from users where username='' or 1=1#' and password=''
select * from users where username='' or 1=1
“#”号的做用是注释掉后面的语句,而1=1
做为永真式表示永远是都是成立的,即where子句老是为真,因此可以成功登陆。
if ($result = $mysqli->query($query_str))
判断语句不容许多条sql语句执行,因此将它改为if ($result = $mysqli->multi_query($query_str))
用于执行多个sql语句。在用户名输入框中输入';insert into lxmtable values('xx','5330','1234567890');#
,拆开来看就是
SELECT * FROM lxmtable WHERE username='';
insert into lxmtable values('xx','5330','1234567890');
查看数据库中的数据,发现新增了一条xx 5330
的数据,说明插入成功
使用插入的用户名和密码登陆。
成功。
在用户名输入框中输入<img src="22.png" />
读取/var/www/html
目录下的图片:
一开始没法显示图片
在/var/www/html
目录下经过chmod 755 22.png
获取图片权限后成功。
解决问题 “You don't have permission to access /index.html on this server.”