• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

徐嘉远

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

网络对抗实验八 Web安全--20201313

《网络对抗技术》——Exp8 Web安全

目录
  • 《网络对抗技术》——Exp8 Web安全
    • 一、实践目标
    • 二、基础问题回答
      • 1.什么是表单
      • 2.浏览器可以解析运行什么语言
      • 3 . WebServer 支持哪些动态语言
      • 4. 防范注入攻击的方法有哪些?
    • 三、实验流程
      • 1.Web
        • 1.1 Web前端HTML
        • 1.2 Web前端 :javascript
        • 1.3 Web后端 :MySQL基础
        • 1.4 Web后端:编写PHP网页,连接数据库,进行用户认证
        • 1.5最简单的攻击
          • (1)SQL注入
          • (2)XSS攻击
      • 2.选做
    • 四、实验体会

一、实践目标

1.Web前端HTML

能正常安装、启停Apache。理解HTML,理解表单,理解GET与POST方法,编写一个含有表单的HTML。

2.Web前端javascipt

理解JavaScript的基本功能,理解DOM。

在(1)的基础上,编写JavaScript验证用户名、密码的规则。在用户点击登陆按钮后回显“欢迎+输入的用户名”

尝试注入攻击:利用回显用户名注入HTML及JavaScript。

3.Web后端:MySQL基础:正常安装、启动MySQL,建库、创建用户、修改密码、建表

4.Web后端:编写PHP网页,连接数据库,进行用户认证

5.最简单的SQL注入,XSS攻击测试

6.选做Webgoat或类似平台的SQL注入、XSS、CSRF攻击各一例。

二、基础问题回答

1.什么是表单

"表单"是指在网页中用于收集用户输入的一种HTML元素。表单通常包含各种输入字段,如文本框、单选按钮、复选框、下拉列表等,以及一个提交按钮。用户可以在这些输入字段中输入信息,然后通过点击提交按钮将这些信息发送到服务器进行处理。在HTML中,表单是通过

标签来创建的。

总之,"表单"是网页中用于收集用户输入的一种HTML元素,它包含各种输入字段和一个提交按钮。用户可以通过表单输入信息并将其发送到服务器进行处理

2.浏览器可以解析运行什么语言

浏览器主要可以解析运行以下几种语言:

  1. HTML(超文本标记语言):HTML是用于创建网页结构和内容的标准标记语言。它使用一系列标签来定义网页的标题、段落、链接、图像等元素。

  2. CSS(层叠样式表):CSS是用于描述网页外观和布局的样式表语言。它可以控制网页中元素的颜色、字体、大小、边距等样式属性。

  3. JavaScript:JavaScript是一种脚本语言,用于实现网页上的交互功能。它可以实现动态内容、动画效果、表单验证等功能。

这三种语言通常被称为前端开发的基础,它们共同构成了网页的结构、样式和交互功能。除此之外,浏览器还支持一些其他技术,如WebAssembly、SVG(可缩放矢量图形)等,但它们的应用范围相对较小

3 . WebServer 支持哪些动态语言

Web服务器支持多种动态语言,以下是一些常见的动态语言:

  1. PHP:PHP是一种广泛使用的开源脚本语言,特别适用于Web开发。它可以嵌入到HTML中,用于生成动态网页内容。

  2. Python:Python是一种易于学习且功能强大的编程语言。通过使用Web框架(如Django、Flask等),Python可以用于开发动态网站。

  3. Ruby:Ruby是一种面向对象的脚本语言,通过Ruby on Rails等Web框架,可以用于开发动态网站。

  4. JavaScript:JavaScript主要用于浏览器端的脚本语言,但通过Node.js,它也可以用于服务器端开发,实现动态网站功能。

  5. Java:Java是一种面向对象的编程语言,通过使用Servlet、JSP等技术,可以用于开发动态网站。

  6. Perl:Perl是一种灵活且功能强大的脚本语言,通过使用Catalyst、Dancer等Web框架,可以用于开发动态网站。

  7. ASP.NET:ASP.NET是微软开发的Web应用框架,使用C#或VB.NET等编程语言,可以用于开发动态网站。

这些动态语言都可以用于Web服务器开发,具体选择哪种语言取决于项目需求、开发团队的熟悉程度以及其他因素

4. 防范注入攻击的方法有哪些?

防范注入攻击的方法有以下几种:

  1. 输入验证:对用户输入的数据进行验证,确保数据符合预期的格式和类型。例如,如果您期望输入是一个数字,那么您应该确保输入的确是一个数字,而不是包含字母或特殊字符的字符串。

  2. 参数化查询:在编写数据库查询时,使用参数化查询而不是字符串拼接。参数化查询可以防止SQL注入攻击,因为它将用户输入与查询语句分开处理。

  3. 使用预编译语句:预编译语句(也称为预处理语句)是一种将查询语句与用户输入分开处理的方法。预编译语句可以提高查询性能,并防止注入攻击。

  4. 转义特殊字符:在将用户输入插入到查询语句或HTML文档中之前,对特殊字符进行转义。这可以防止SQL注入和跨站脚本(XSS)攻击。许多编程语言和框架都提供了内置的函数或库来帮助您执行字符转义。

  5. 使用安全的库和框架:使用经过验证的安全库和框架,它们通常已经实现了防范注入攻击的措施。例如,使用Django、Flask等Web框架可以帮助您更容易地实现安全的Web应用。

  6. 最小权限原则:为应用程序和数据库用户分配最小的必要权限。这可以限制注入攻击的影响范围,即使攻击者成功注入恶意代码,他们也无法访问或修改敏感数据。

  7. 定期审计和更新:定期审计您的代码和数据库,确保它们是最新的,并修复已知的安全漏洞。这可以帮助您及时发现并防范潜在的注入攻击。

总之,防范注入攻击需要采取多种措施,包括输入验证、参数化查询、使用预编译语句、转义特殊字符、使用安全的库和框架、遵循最小权限原则以及定期审计和更新。通过实施这些措施,您可以降低应用程序受到注入攻击的风险

三、实验流程

1.Web

1.1 Web前端HTML

kali默认已安装Apache,直接使用 service apache2 start命令打开Apache服务即可。

使用service apache2 status 查看服务情况

此时在浏览器输入 127.0.0.1,如果可以打开Apache的默认网页,则表示开启成功!

启动成功!

使用 cd /var/www/html进入Apache目录下,新建一个简单的含有表单的html文件 1313.html

并写入如下内容:

<html>

<head>

<title>20201313</title>

<meta http-equiv="Content-Type" content="test/html; charset=utf-8" />

</head>

<body>

<h2>Login</h2>

<center>

<form action="myindex" method="get" name="form_login">

<input placeholder="username" name="user" class="user" type="text" onfocus="if (th is.value=='Your name') this.value='';" />

<br>

</br>

<input placeholder="Password" name="Password" class="pass" type="password" onf ocus="if (this.value=='Your password') this.value='';"/>

<br>

</br>

<input type="submit" value="Login" onClick="return validateLogin()"/>

</form>

</center>

</script>

</body>

</html>

在网页中输入/var/www/html/1313.html,显示一个网页表单

1.2 Web前端 :javascript

添加一段JavaScript代码,以完成对用户是否填写账号和密码的判断,在用户点击登陆按钮后回显“欢迎+输入的用户名”

在</center>后添加如下代码

<!--//main-->

<script language="javascript">

function validateLogin(){

var sUserName = document.form_login.user.value;

var sPassword = document.form_login.Password.value;

if ((sUserName =="") || (sUserName=="Your name")){

alert("need name!");

return false ;

}

if ((sPassword =="") || (sPassword=="Your password")){

alert("need password!");

return false ;

}

}

页面如下:(显示需要填写用户名或者密码)

然后编写登陆成功界面

主要任务是获取用户名参数并显示出来,在当前目录下新建一个myindex的文件

<html>

<head>

<title>myindex</title>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

</head>

<script language="JavaScript" type="text/javascript">

var searchStr = location.search;

searchStr = searchStr.substr(1);

var searchs = searchStr.split("&");

var username = searchs[0].split("=");

document.write("欢迎您:"+username[1]);

</script>

<body>

<h2 align="center">myindex</h2>

</body>

</html>

登陆成功后效果如下:

尝试注入攻击

这里先对myindex里的内容进行修改,如下:

<html>

<head>

<title>myindex</title>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

</head>

<body>

<h2 align="center">myindex</h2>

<h3 id="n"></h3>

<script language="JavaScript" type="text/javascript">

function myname() {

var searchStr = location.search;

searchStr = searchStr.substr(1);

var searchs = searchStr.split("&");

var username = searchs[0].split("=");

return username[1];

}

document.getElementById("n").innerHTML = decodeURIComponent(myname());

</script>

</body>

<a id='n'></a>

</html>

尝试注入攻击

<h1>hello20201313xjy<h1>

注入 Javascript

1.3 Web后端 :MySQL基础

输入 service mysql start开启MySQL服务

输入sudo mysql -u root -p使用mysql,默认密码是password

创建用户

CREATE USER xujiayuan@localhost IDENTIFIED BY '20201313';

use mysql

输入set password for root@'localhost'=password('20201313');修改密码

输入create database XJY1;创建一个新的数据库XJY1,创建好之后查看一下show databases;

使用use XJY1;使用我们创建的数据库

输入create table login(username VARCHAR(20),password VARCHAR(20));建立数据库表login,并设置字段基本信息

使用insert into 表名 values('值1','值2','值3'...);插入数据;

insert into login values ('20201313@qq.com', '20201313');

输入select * from login;查询表中的数据

在MySQL中增加新用户,输入grant select,insert,update,delete on XJY1.* to xujiayuan@localhost identified by "20201313";

登录xujiayuan用户然后进入XJY1对表login进行select操作,发现成功:

1.4 Web后端:编写PHP网页,连接数据库,进行用户认证

安装php

sudo apt-get install php

在/var/www/html目录下新建一个PHP测试文件phptest.php

vi phptest.php

访问127.0.0.1/phptest.php

成功执行了 PHP 代码

连接数据库,进行用户认证

写 test.php 代码

<?php

$uname=$_POST["user"];

$pwd=$_POST["Password"];

echo $uname;

$query_str="SELECT * FROM login where username='$uname' and password='$pwd';";

$mysqli = new mysqli("127.0.0.1", "root", "20201313", "XJY1");

$query_str1="use XJY1;";

/* check connection */

if ($mysqli->connect_errno) {

printf("Connect failed: %s\n", $mysqli->connect_error);

exit();

}

echo "connection ok!";

/* Select queries return a resultset */

if ($result = $mysqli->query($query_str1))

echo"<br>Success into database!";

echo$uname;

if ($result = $mysqli->query($query_str)) {

if ($result->num_rows > 0 ){

echo "<br> Welcome login Mr/Mrs:{$uname}:<br> ";

}

else {

echo "<br> login failed!!!! <br> " ; }

/* free result set */

$result->close();

}

$mysqli->close();

?>

将之前的 1313.html 中的中的 action 设为 test.php,method改为 POST

登录 127.0.0.1/1313.html 查看

输入正确如下:

密码错误如下:

1.5最简单的攻击

(1)SQL注入

输入' or 1=1#密码随意

登陆成功

(2)XSS攻击

在用户名输入<script>alert("xss attack")</script>密码随意

2.选做

(1)安装 Wdbgoat

(2)打开 Webgoat

这里如果遇到问题说8080端口被占用,可以使用语句set WEBGOAT_HSQLPORT=12345,然后再次运行图中命令java -jar .\webgoat-server-8.2.2.jar,发现其显示运行在了12345端口,但其实还是在8080端口,我也不是很清楚为什么,但是确实可以用了。

(3)注册用户并登录

(4)sql 注入

SQL Injection (intro) 第 10 页

顺利过关!

(5)XSS

选择课程如下

从上图可知,电话号码那个输入框的输入参数是会回显的在这个输入框中尝试输入

 <script>alert('20201313xjy')</script>

告警弹出,顺利过关

(6)CSRF

选择课程Login CSRF attck

意思就是你要注册一个csrf-你之前注册并登录的用户的用户名,并且是新建一个网页并登录后,你会发现你原本登录的用户的页面退出了登录,如下:

这里在新的用户的界面里回到那个页面,显示如下:

成功通关!

四、实验体会

本次实验运用到了与web网页有关的很多知识,比如html的书写,JavaScript的书写,php的书写,以及和网页挂钩的数据库相关的知识,然后针对java语言写的内容我们可以采用sql注入攻击进行攻击,或者使用跨站脚本xss进行攻击,然后我们又在一些靶场网站对这类攻击进行了进一步的学习。本次实验过程循序渐进,让我慢慢对网页的建立和相关的攻击方法有了更加系统的认识,也让我更加明白实践对这门课的重要意义。

posted on 2023-05-24 14:43  徐嘉远  阅读(120)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3