目录
实验目的
实验内容
- 操作程序规律
- 运行脚本或可执行文件
- 查看配置文件
- 出错找日志
Web前端HTML
- 能正常安装、启停Apache。理解HTML,理解表单,理解GET与POST方法,编写一个含有表单的HTML。
Web前端javascipt
- 理解JavaScript的基本功能,理解DOM。编写JavaScript验证用户名、密码的规则。
Web后端:MySQL基础:正常安装、启动MySQL,建库、创建用户、修改密码、建表
- 最简单的SQL注入,XSS攻击测试
- 功能描述:用户能登陆,登陆用户名密码保存在数据库中,登陆成功显示欢迎页面。
实验步骤
环境搭建
apache2搭建
- 使用指令
/etc/init.d/apache2 start
开启服务
- 在浏览器里输入
localhost
查看
mysql环境搭建
- 因为kali中自带安装了mysql所以我们只需要对其初始化然后运行即可
sudo /etc/init.d/mysql start
mysql -u root -p
启动mysql并输入指令- 后面的这些指令就不说了吧,是在之前刘念老师的课上学到过的mysql指令调用哈,不会的就看看我截图指令吧。
- 建立一个我们所需要的数据库咯
- 然后插入一条我们的个人信息啦。
- 在这里前期准备就完成咯。
php搭建
service apache2 start
是为了搭建接口我们在这里使用php语言需要和mysql数据做一个连接。- 然后我们编写几个简单php文件放在
/var/www/html
下面
<?php
phpinfo()
?>
- 这样我们就能看见php搭建成功咯
自己编写一个简单的网站
- 接下来,我们自己简单地写一个网站,只完成最基本的登录功能即可。
- 我们之前创建了web_db这个数据库,在web_db中添加了users表,并插入了一条数据。
- 登录的用户名为xuyuwei,口令为20175329。
用HTML写登录表单
- 首先我们编写前端的登录页面,非常简单。
- 我们编写一个名叫login.html的登录表单
<html>
<head>
<title>Welcome</title>
</head>
<body>
<h1>Welcome!</h1>
<form method="POST" action="login.php">
<label>
Name:
<input type="text" id="username" name="username" />
</label>
<br />
<label>
Password:
<input type="password" id="password" name="password" />
</label>
<br />
<div id="feedback"></div>
<br />
<input type="submit" value="login" />
</form>
<script src="event.js"></script>
</body>
</html>
- 核心部分就是form表单,input标签的name属性是后台php接收参数时要用到的。
<input type="password">
是密码框,尽管在屏幕上被隐藏了口令,但不代表传输过程中是安全的。
用JavaScript处理事件
- 我们编写event.js处理事件。当焦点离开用户名输入框时,如果用户输入的字符少于5个,我们在页面反馈信息,提示用户名不应该少于5个字符。
function checkUsername() {
var elMsg = document.getElementById('feedback');
if (this.value.length < 5) {
elMsg.textContent = 'Username must be 5 characters or more';
} else {
elMsg.textContent = '';
}
}
var elUsername = document.getElementById('username');
elUsername.onblur = checkUsername;
用PHP编写后台逻辑
- 我们用PHP处理前端提交的表单。依葫芦画瓢,照搬学长的代码。
- 下面是login.php
<?php
$username=$_POST["username"];
$password=$_POST["password"];
$query_str="SELECT * FROM users where username='$username' and password='$password';";
$mysqli = new mysqli("127.0.0.1", "debian-sys-maint", "SY7hZpYpuHu5YJY4", "web_db");
if ($mysqli->connect_errno) {
printf("Connect failed: %s\n", $mysqli->connect_error);
exit();
}
if ($result = $mysqli->query($query_str)) {
if ($result->num_rows > 0 ){
echo "<br><h3>Hello, $username</h3> <br> ";
}
else {
echo "<br><h3> login failed!!!! </h3><br> " ; }
$result->close();
}
$mysqli->close();
?>
- 虽然我对PHP一窍不通,但是这段代码的逻辑很容易从字面上理解的。
- 和Java的JDBC相比,php连接数据库还是挺方便的。
- 这里故意用字符串拼接的方式构成$query_str查询语句,方便后面的SQL注入。
- 如果用参数化语句的话,就能大大提高对SQL注入的免疫力。
最终效果
- 虽然这个网站挺简陋的,但能把原理了解清楚就行。
- 登陆成功咯
SQL注入: XSS攻击测试
- XSS本质是脚本的执行,当然不一定是JavaScript,也可以是一段html片段。
- 我们现在就让网站执行一次弹窗。当然,真正的XSS攻击不会这么简单。
- 输入
'or 1=1 # <script>alert("xss")</script>
- 如果成功你就和我弹个窗哈哈哈哈
- 当然,作为注入的内容,也可以是HTML片段。
- 比如,展示图片
实验问题与回答
问题一:
- 在配置mysql的时候刚刚开始输入指令
mysql start
的时候被报错
- 我突然想起来之前启动apache2的时候使用过这个全局初始环境指令然后就在这里试了试,没想到成功了。于是我对这个
init.d
的作用有点好奇就查了查. - 突然发现一个重新配置软件环境的好方法呢。
问题二:
- 刚刚开始搭建环境的时候,php官方版本写的是安装php5的方法,网上很多嵌套的博客都是安装php5的方法,我在寻思先康康有没有php于是调用了一下
whereis php
就可以看见
- 后面我把安装php5的指令更改为php7发现里面的东西都是配置好的只等着使用就ok了,看来kali下面的东西都挺配套的呀。
问题三:
- 刚刚开始做搭环境所有都很顺利但是到了这一步人就傻了,搁置来来回回也有一周多的时间
- 后面在解答过程中刘老师提供的思路真的太棒了,一下就把困惑我好久的问题迎刃而解了。刘老师说在使用
root
作为账户的时候需要管理员权限,如果作为数据库连接没有考虑到这个情况所以无论root管理下的账户密码数据库消息是否完全匹配都不一定能连接上,于是让我再建立一个账户,那好呗我就用kali
登陆咯。
- 后面就是我们所预期的实验结果了
实验总结
这次的实验和之前的刘念老师的web课程很多地方都是相似的,知识是相同的,我突然发现在linux下面有成熟的配件搭建环境起来更加直接简单。还记得当时为了搭建刘念老师的web真的是....而且关于1=1这个恒等式刘老师上课也是讲过的,让我再一次对于安全漏洞方面有了更加深入的理解和了解。倒数第二次试验了,说实话...这学期都快结课了...