20174320 王灏汉《网络对抗技术》Exp8 Web基础

1 实践要求

1.1 实践内容

(1)Web前端HTML

能正常安装、启停Apache。理解HTML,理解表单,理解GET与POST方法,编写一个含有表单的HTML。

(2)Web前端javascipt

理解JavaScript的基本功能,理解DOM。编写JavaScript验证用户名、密码的规则。

(3)Web后端:MySQL基础:正常安装、启动MySQL,建库、创建用户、修改密码、建表

(4)Web后端:编写PHP网页,连接数据库,进行用户认证

(5)最简单的SQL注入,XSS攻击测试

功能描述:用户能登陆,登陆用户名密码保存在数据库中,登陆成功显示欢迎页面。

1.2 基础问题回答

(1)什么是表单

表单在网页中主要负责数据采集功能。

一个表单有三个基本组成部分:

表单标签:这里面包含了处理表单数据所用CGI程序的URL以及数据提交到服务器的方法。

表单域:包含了文本框、密码框、隐藏域、多行文本框、复选框、单选框、下拉选择框和文件上传框等。

表单按钮:包括提交按钮、复位按钮和一般按钮;用于将数据传送到服务器上的CGI脚本或者取消输入,还可以用表单按钮来控制其他定义了处理脚本的处理工作。

(2)浏览器可以解析运行什么语言

HTML(超文本标记语言)、XML(可扩展标记语言)、Python、PHP、JavaScript、ASP……

(3)WebServer支持哪些动态语言

ActiveServerPages(ASP): 

WEB服务器端的开发环境,可以产生和执行动态的、互动的、高性能的WEB服务应用程序,采用脚本语言VBScript(Javascript)作为自己的开发语言;

JavaServerPages(JSP) :

Sun公司推出的新一代网站开发语言,将Java从Java应用程序和JavaApplet之外的JavaServerPage,可以在Serverlet和JavaBean的支持下,完成功能强大的站点程序;

HypertextPreprocessor(PHP) :

跨平台的服务器端的嵌入式脚本语言,大量借用C,Java和Perl语言的语法,并耦合PHP自己的特性,使WEB开发者能够快速地写出动态产生页面。


2 实践过程

2.1 Web前端:HTML

kali默认已安装Apache,直接使用service apache2 start命令打开Apache服务。

此时在浏览器输入kali的ip,如果可以打开Apache的默认网页,则开启成功:

使用 cd /var/www/html 进入Apache目录下,新建一个简单的含有表单的html文件:

接下来在浏览器中输入/var/www/html/4320.html打开网页可以预览刚刚写好的html文件:

2.2 Web前端:javascipt

在原有html基础上,可以添加一段JavaScript代码,以完成对用户是否填写账号和密码的判断,以及注册页面的跳转。

从浏览器打开这个html文件可以看到,如果没有填写用户名或者密码就直接登录,会出现以下提示:

 

还是打开cd /var/www/html这个目录,我在目录下做了一个注册的页面:(由于本次实验不用实现注册功能,我并没有实现注册页面与数据库的连接)

如果在登录页面点击注册,将会跳转到注册页面:

注册页面一样实现了javascript对所填内容的检验,填好后,点submit提交将返回登录页面。

2.3 Web后端: MySQL基础

输入/etc/init.d/mysql start开启MySQL服务:

输入mysql -u root -p使用root权限进入,默认的密码是password:

选择使用mysql数据库,输入update user set password=PASSWORD("whh20174320") where user='root';,修改密码并更新权限:

退出MySQL后重新用新密码进入,

创建一个新的数据库login,创好之后查看一下:

使用刚刚建好的数据库,并创建一张用户表,我取名为user:

向建好的用户表里插入用户,我增加了root和以我名字命名的用户:

在MySQL中增加新用户,使用 grant select,insert,update,delete on 数据库.* to 用户名@登录主机(可以是localhost,也可以是远程登录方式的IP) identified by "密码";指令,这句话的意思是将对某数据库的所有表的select,insert,update,delete权限授予某ip登录的某用户:

退出后使用新用户新密码重新进入MySQL,成功进入则证明添加用户成功。

2.4 Web后端:编写PHP网页

打开/var/www/html目录,在目录下新建一个登录连接数据库的PHP文件:

在浏览器中输入http://192.168.253.128/4320.html(主机ip+之前的html文件名),输入已编入MySQL的用户名和密码:

登录成功!welcome!

如果输入错误,则显示失败:

在我编写的php中还加人了是否能够连入MySQL、是否能使用数据库的判断,如果不能,则失败。

2.5 最简单的SQL注入,XSS攻击测试

2.5.1 SQL注入

在用户名输入框输入' or 1=1#,密码任意输入:

可以发现,结果居然成功了!

输入的用户名和我们的代码中select语句组合起来变成了select * from users where username='' or 1=1#' and password='',#相当于注释符,会把后面的内容都注释掉,而1=1是永真式,所以这个条件永远成立,所以不管密码是否输入正确,都能够成功登陆。

2.5.2 xss攻击

由于之前在php文件中我编的代码是没有输出用户名的,因此要加一行代码:

将一张图片放在/var/www/html目录下,如果图片没有执行或者读的权限,则需要提权:

在用户名输入框输入图片语句,密码任意输入:

可以读取到放在目录下的图片l :


 

3 实践总结与体会

3.1 实践中遇到的问题

1.在php文件编好之后从登录界面无法运行它

一开始我在浏览器用的地址还是原来的4320.html所在目录的地址直接打开,一点login后不是运行php文件,而是打开这个php文件。

后来经过查资料发现,要实现html文件和php文件之间的连接必须用本地主机ip或者直接localhost作为路径,而不能使用目录地址。 

2. MySQL中新建的用户没有访问权限

在检查了php文件代码没有问题之后发现还是连接不上数据库:

Connection Failed:Access denied for user 'whh'@'localhost' to database 'login'

重启MySQL后查看用户是否允许外部连接:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '[root password]' WITH GRANT OPTION;

再次打开浏览器重试就成功了。

3.2 实践心得

  这次实践和以往的实践都不同,以前我们基本上都是借助各种工具实践一些攻击手段,而这一次需要我们自己编写html、php等文件,自己建立数据库,当真是相当困难!虽然以前接触过Java、SQL、php语言,但是还是太过于浅层,远到不了可以单独编程的程度,而到了这一次实践炼真金的时候,才知道拿不出手,借着查询各方资料,参考别人写的代码,一步步摸着石头过河,才勉强把属于自己的代码摸索出来了。当做完整个一套登录系统,看到“welcome”的时候直接泪目了,实在是很不容易。编程这东西真的是实践出真知,没有实践就永远不可能真正掌握。

 

posted @ 2020-05-17 16:41  20174320  阅读(161)  评论(0编辑  收藏  举报