20155217《网络对抗》Exp08 Web基础
实践内容
Web前端:HTML基础
- Web开发是基于
Apache
服务器进行的,Exp07已经安装好Apache。使用指令apachectl start
打开Apache服务,使用netstat -aptn
查看一下端口占用:
- 在kali浏览器中输入
localhost:80
,如图所示,说明我们Apache
正常工作:
- 进入
Apache
工作目录/var/www/html
,新建一个5217-1.html
文件,编写一个含有表单能实现输入用户名、密码实现登录的html
。
- 结果如图:
Web前端:javascipt基础
- 直接在之前的代码中进行修改来限制用户登录时必须输入用户名和密码:
- 结果如下:
MySQL基础
- 输入
/etc/init.d/mysql start
打开mysql
服务。 - 输入
mysql -u root -p
,以root身份登录,根据提示输入密码,默认密码为password,进入MySQL;
- 可以对密码进行修改:输入
use mysql;
,选择mysql
数据库;输入update user set password=PASSWORD("20155217") where user=\'root\';
,修改密码;输入flush privileges;
,更新权限:
- 输入
show databases;
查看权限:
- 输入
create database 库名;
建立一个数据库; - 输入
use 库名;
使用刚刚创建的数据库:
- 输入
create table yd (userid VARCHAR(100),username VARCHAR(45),password VARCHAR(256),enabled VARCHAR(5));
建立数据表; - 输入
show tables;
查看存在的数据表:
- 输入
insert into yd(userid,username,password,enabled) values(1,\'20155217\',\'5217\',"TRUE");
在表中添加内容; - 输入
select * from yd;
查看表中现在的信息:
Web后端:PHP网页
- 在
/var/www/html
目录下新建一个test.php
测试一下PHP
:
- 浏览器打开
localhost/test.php
可看到/etc/passwd
文件的内容,注意PHP变量大小写敏感:
- 在
/var/www/html
目录下编写一个5217-2.html
,设置将5217-2.html
的表单提交到yd.php
:
- 编写
login.php
,通过php实现对数据库的连接,并显示用户是否能成功登录。如图:
- 在浏览器中访问登录页面:
localhost:80/5217-2.html
,报错:
- 于是在MySQL中增加新用户:
- 输入
insert into mysql.user(Host,User,Password) values("localhost","yd5217",password("5217"));
; - 输入
grant all privileges on *.* to \'yd5217\' identified by \'5217\' with grant option;
; FLUSH PRIVILEGES;
;
- 在登录页面中输入数据库中存有的用户名和密码并点击提交进行用户认证登录成功,反之失败:
SQL注入
- 可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。
- 在网页登录的用户名中填写
\' or 1=1#
,密码随便输入,这时候的合成后的SQL查询语句为select * from users where username=\'\' or 1=1#\' and password=md5(\'\')
,#
相当于注释符,会把后面的内容都注释掉,而1=1
是永真式,所以这个条件肯定恒成立,所以能够成功登陆:
- 或者先在PHP中改语句
if ($result = $mysqli->query($query_str))
为if ($result = $mysqli->multi_query($query_str))
,然后在用户名框中输入\';insert into yd values(\'888\',\'skrr\',\'1234\',"TRUE");#
在数据库中可以直接插入一个伪造的用户名,密码,下次就可以用伪造的用户名密码登录网站了(登录前将if ($result = $mysqli->query($query_str))
语句改回来)。
XSS攻击
- 跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆。故将跨站脚本攻击缩写为
XSS
。XSS
是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。比如这些代码包括HTML代码和客户端脚本。攻击者利用XSS漏洞旁路掉访问控制——例如同源策略(same origin policy)。这种类型的漏洞由于被骇客用来编写危害性更大的phishing攻击而变得广为人知。对于跨站脚本攻击,黑客界共识是:跨站脚本攻击是新型的“缓冲区溢出攻击“,而javascript是新型的“ShellCode”。 - 在登录的用户名中输入
<img src="1.jpg" />5217</a>
,读取/var/www/html
目录下的图片(注意把php代码中原本隐去的echo $uname;
显示出来,这样才能把图片输出出来):
基础问题回答
什么是表单
- 表单:可以收集用户的信息和反馈意见,是网站管理者与浏览者之间沟通的桥梁。
- 表单包括两个部分:一部分是HTML源代码用于描述表单(例如,域,标签和用户在页面上看见的按钮),另一部分是脚本或应用程序用于处理提交的信息(如CGI脚本)。不使用处理脚本就不能搜集表单数据。
- 表单由文本域、复选框、单选框、菜单、文件地址域、按钮等表单对象组成,所有的部分都包含在一个由标识符标志起来的表单结构中。
- 表单的种类有注册表、留言薄、站点导航条、搜索引擎等。
浏览器可以解析运行什么语言。
- 超文本标记语言:HTML
- 可扩展标记语言:XML
- 脚本语言:ASP、PHP、Script、JavaScript、VBScript、Perl、Python、ColdFusion、Java、JSP等。
WebServer支持哪些动态语言
- PHP语言、JSP语言。
实验体会
实验过程中真的出现了太多问题QAQ,最让我崩溃的是最初我的php只能显示代码,百度之后发现缺少httpd.conf文件,就想重新下一个php,但不知道怎么就把Apache删掉了!幸好有一个Exp07的快照可以恢复文件,就是需要把之前的重新再做一遍TT。但发现还是不行,感谢我的舍友,贡献了她的虚拟机,最后让我顺利地度过这个问题,迎来了下一个问题:D