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”的时候直接泪目了,实在是很不容易。编程这东西真的是实践出真知,没有实践就永远不可能真正掌握。