2019-2020-2 20175329许钰玮《网络对抗技术》Exp8 Web基础

实验目的

实验内容

  • 操作程序规律
    • 运行脚本或可执行文件
    • 查看配置文件
    • 出错找日志

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这个恒等式刘老师上课也是讲过的,让我再一次对于安全漏洞方面有了更加深入的理解和了解。倒数第二次试验了,说实话...这学期都快结课了...

猜你喜欢

转载自www.cnblogs.com/xyejava/p/12868140.html