20145219《网络对抗》Web基础
基础问题回答
-
什么是表单?
HTML表单用于收集用户输入,用
<form>
元素定义,包含不同类型的 input元素、复选框、单选按钮、提交按钮等等。主要包含三个参数:action参数:指定后台服务器处理这个表单的脚本,即点击提交后显示的页面。
method参数:GET方法,后面的输入值会显示在URL中提交;POST方法则封装到数据中提交。
onsubmit参数:提交时触发的事件。 -
浏览器可以解析运行什么语言?
HTML、JavaScript、PHP、ASP、XML、CSS等。
-
WebServer支持哪些动态语言?
JavaScript、ASP、PHP等。
实践过程记录
- Kali IP地址:192.168.87.128
Web前端:HTML
使用netstat -aptn
查看80端口是否被占用(上次实验设置为Apache使用80端口),如果被占用了就kill 原进程号
,如果空闲就用apachectl start
开启Apache,然后再次用netstat -aptn
查看端口占用情况。
在kali的火狐浏览器上输入localhost:80
测试apache是否正常工作(正常的话会显示上次实验设定了电子教务网的网页)。
进入Apache工作目录/var/www/html
,新建一个sg1.html
文件,编写一个含有表单能实现输入用户名、密码实现登录的html。
打开浏览器访问localhost:80/sg1.html
,出现刚才编写的HTML页面。
点击submit
会跳转,但是因为我还没有设置跳转页面,所以会出现如下错误提示:
Web前端:javascript
用JavaScript来编写一个验证用户名、密码的函数,当其为空时提示错误信息,把它和前面的sg1.html
合起来形成一个新的HTML网页sg2.html
。
Web后端:MySQL基础
用/etc/init.d/mysql start
开启sql服务。
输入mysql -u root –p
用账号root
登录,并根据提示输入对应密码,默认密码为p@ssw0rd
,进入MySQL。
用show databases;
查看基本信息(注意:英文;
是结束符,不能省略)。
因为root用户的密码太复杂了,所以我们给它改个简单的,步骤如下:
用use mysql;
,选择mysql数据库。
用select user, password, host from user;
,查看mysql库中的user表中存储着用户名、密码与权限。
输入UPDATE user SET password=PASSWORD("新密码") WHERE user='root';
更改密码。
用flush privileges;
进行更新。
输入quit
退出mysql
。
然后,重新输入mysql -u root –p
,使用新密码登录,检测新密码能否成功使用,能成功登录即可。
在这里我遇到了一个小问题,我输入mysql -u root –p
后出现如下提示,大概是说我这个用户没有密码……
这我就很尴尬了,我明明刚刚成功改了密码也更新了。经过我百度寻找解决方法,我发现我输入mysql -uroot –p
(就是在u和root之间不输入空格)就可以成功了……
我也不知道是为什么,反正莫名其妙就成功了。关键是,之后我退出后再输入mysql -u root –p
也可以了,但是我再次改了密码后就又不行了,刚改完密码必须得使用mysql -uroot –p
,之后才能使用mysql -u root –p
……
在Mysql中建库建表,如下输入:
输入use 库表名
使用刚建的库表。
输入insert into users(userid,username,password,enabled) values(ID号,'用户id',password("用户密码"),"TRUE");
添加新用户。
Web后端:PHP网页
在/var/www/html
目录下新建一个test.php
简单了解、测试一下PHP。
登录localhost:80/test.php
出现如下界面:
在/var/www/html
目录下编写一个sg4.html
(在之前的sg2.html
上加工),设置将sg4.html
的表单提交到sg4.php
。
编写sg4.php
,通过php实现对数据库的连接,并显示用户是否能成功登录。
在浏览器中输入localhost:80/sg4.html
,显示用户登录界面。
在其中输入正确的用户名和密码,显示登陆成功。
在其中输入错误的用户名和密码,显示登录失败。
最简单的SQL注入
在用户名输入框中输入' or 1=1#
,密码随便输入,竟然会显示登陆成功!
这是因为,这时候' or 1=1#
合成后的SQL查询语句为select * from lxmtable where username='' or 1=1#' and password=md5('')
,#
相当于注释符,会把后面的内容都注释掉,1=1
是永真式,所以这个条件肯定恒成立,一定会登陆成功。
在用户名框中输入';insert into users(userid,username,password,enabled) values(111,'123',password("321123"),"TRUE");#
通过SQL注入将用户名和密码保存在数据库中,这就相当于是SELECT * FROM users WHERE username=''; insert into users(userid,username,password,enabled) values(111,'123',password("321123"),"TRUE");
。
这时数据库中已经有了新输入的这个用户和密码。
使用这个新输入的这个用户和密码在网页中登录就没有问题了。(在这一步时需要对原本的sg4.php
进行一些修改,使其允许多条sql语句执行,我是看着罗天晨的博客慢慢改的)。
XSS攻击测试
在/var/www/html目
录下事先保存一个图片文件sg5219.png
(这是我的主机桌面截图),然后在登录网页的用户名窗口中输入<img src="sg5219.png" />20145219</a>
,点击登录就会显示出这张图片。
实验总结与体会
这次实验赶上了五一劳动节,实验内容看起来还是挺多的,本来是想在假期试着做一点儿的,然而,三天假期转瞬即逝,我还没来得及收心就结束了,自然也就没有着手做这次的实验,直到开学才重新回到电脑前。这个实验其实我们上学期在刘念老师的一门选修课上做过类似的,不过那个时候是作为最后大实验做的,一组做一个,大概搞了半个多月才搞定。这次实验和上次相似的地方是做HTML、JavaScript和MySQL部分,所以这方面成功的比较快,基本没什么大问题。我大部分时间花费在了PHP网页部分,我也不太清楚究竟是那一个细节上有问题,我加上PHP网页后怎么都不能和数据库成功连接,试了几个小时都是connect failed
,在代码上反复修改,但是越急越出问题,最后就暂时放弃了。周六我又接着做PHP这一块,想着反正之前的代码也不成功,干脆从PHP这一块开始推翻重来,没想到居然成功了!大概是运气来了吧,也可能是这几天闲着阅读别人的PHP代码在无意间记住了一些关键细节,总之成功了,真的是十分的开心O(∩_∩)O~~