网络对抗实验8

发布时间 2023-05-25 14:26:58作者: 20201214罗云帆

《网络对抗技术》实验八:web综合

一、实践目标

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.Web

1.1 Web前端HTML

kali默认已安装Apache,输入service apache2 start命令打开Apache服务,输入netstat -aptn查看端口信息,如果80端口被Apache2监听,则启动成功。

 

用虚拟机里的浏览器打开127.0.0.1,可正常打开Apache介绍网页,则开启成功。

 

终端输入 cd /var/www/html 进入Apache目录下,新建一个简单的含有表单的html文件

touch 1214.html创建

vi 1214.html编辑

编辑内容

<html>

<head>

<title>20201214</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/12114.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 ;

}

}

 

登陆成功界面

编写登录成功后跳转的界面,主要任务是获取用户名参数并显示出来

Vim 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>

 

尝试注入攻击

<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>

注入 html

<h1>hellolz<h1>

 

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

输入 service mysql start开启MySQL服务

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

 

创建用户

CREATE USER lizhuang@localhost IDENTIFIED BY '20201214';

 

use mysql

 

 

输入set password for 

root@'localhost'=password('20201214');,修改密码

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

 

Use lyf1

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

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

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

 

MySQL中增加新用户,输入grant select,insert,update,delete on lyf1.* to lizhuang@localhost identified by "20201214"; 命令在MySQL中增加新用户,这句话的意思是将对lyf1数据库的所有表的select,insert,update,delete权限授予当前主机localhost登录的用户,20201214是登录密码。

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

安装php

sudo apt-get install php

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

vi phptest.php

 

<?php

echo"Helloword!Thisis lztestpage!";

?>

输入

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", "20201214", "lyf1");

$query_str1="use lyf1;";

/* 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();

?>

将之前的 1214.html 中的中的 action 设为 test.php  methond设 POST

登录 127.0.0.1/4304.html 查看

但是这里我并未连接成功到数据库。

1.5最简单的攻击

1)SQL 注入

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

 

2、XSS攻击

在用户名输入<script>alert(1)</script>,密码随便输

 

 

1.6.选做

 

1)安装 Wdbgoat

参考博客[webgoat 安装教程(windows)] (https://article.itxueyuan.com/46nQXB)

(这个其实不需要windows+R那步,直接去浏览器打开http://127.0.0.1:8080/WebGoat就行)

(2)打开 Webgoat

(3)注册用户

(4) 登录

(5)sql 注入

SQL Injection (intro) 第 10 页

 

(6)XSS

选择课程如下

 

由于 XSS 最终是要浏览器渲染的,因此,可以先按下 Purchase,看看哪个输入是会回显的

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

<script>alert('20201241lyf')</script>

(7)CSRF

选择课程如下

这个任务是在保持当前页面(页面 1)打开的情况下,在新页面(页面 2)上创建以 csrf-为前缀的新用户,并以该新用户登录。然后在页面 1 上点击下图这个solved 按钮。但是在页面 2 上点击这个按钮也能通关,并且在页面 1 如果不重新登录根本点不了这个按钮,因为使用 csrf 用户登录需要先让原本的用户退出登录,而页面 2 上原本的用户退出了登录,页面 1 也会自动跳转到登录页面了。

 

 

 

基础问题回答

1.什么是表单

表单是一种用于收集和提交用户数据的交互式Web页面元素。它通常包含一系列输入字段,例如文本框、单选按钮、复选框、下拉列表和提交按钮。用户可以在表单中输入数据并将其提交到服务器进行处理。表单通常用于注册、登录、搜索、订购、调查等Web应用程序中。

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

.浏览器可以解析运行多种语言,包括但不限于:

HTML:用于定义网页结构和内容。

CSS:用于定义网页的样式和布局。

JavaScript:用于实现网页的交互和动态效果。

PHP:用于服务器端编程,生成动态网页内容。

Python:用于服务器端编程和数据处理。

Ruby:用于服务器端编程和Web开发。

Java:用于服务器端编程和Web开发。

ASP.NET:用于服务器端编程和Web开发。

 

3 . WebServer 支持哪些动态语言

 

PHP:流行的WebServer Apache 和 Nginx 都支持 PHP,以及一些其他的WebServer,如 Lighttpd 和 Caddy 等。

 

 

Python: 有多种WebServer支持Python,其中包括当前最受欢迎的WebServer之一Gunicorn,nginx和Apache也支持Python解释器。

 

 

Ruby: WebServer支持Ruby,其中包括常见的服务器Puma,以及Passenger,Unicorn和Thin等服务器。

 

 

Node.js: 与其他语言不同,Node.js本身是一个WebServer,可以轻松地处理JavaScript应用程序。

 

 

Java: Java具有自己的WebServer,如Tomcat、JBoss和Jetty等。

 

总的来说,除了这些动态语言,WebServer还支持其他的一些语言,例如Perl、Lua、Go等。

 

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

注入攻击(Injection Attack)是一种常见的Web应用程序漏洞攻击,主要是通过将恶意代码注入到Web应用程序中,从而实现非法操作和获取数据。为了防止注入攻击,可以采取以下一些常见的方法:

输入校验:在接收输入数据时,对数据进行校验和过滤,防止包含恶意代码的输入,比如特殊字符、SQL和代码注入等。

参数化查询:采用参数化查询方式,确保输入的数据能够被正确处理,避免攻击者插入恶意代码。

代码审计:对网站的代码进行审计,查询是否存在注入漏洞,以期早期发现和及时修复漏洞。

最小化权限:在数据库设计时,为数据库用户分配最小化权限,仅给予访问必要表格的权限,减小数据库被攻击的损失。

加密机制:在网站中采用加密技术防止数据被黑客窃取,如使用SSL、TLS等方式实现加密传输。

更新补丁:及时安装网站开发厂商提供的升级补丁,确保程序版本更新至最新状态,以避免已知的漏洞被滥用。

安全培训:对开发人员、管理员和用户开展安全性培训,以提高其防范注入攻击的能力。

综上所述,防范注入攻击需要结合上述多种方法,且需要不断改进措施,保持警觉,以提高Web应用程序安全性保护。

五、实验体会

通过本次实验从另一个角度学习了HTML语言的编写,并加深了对MySQL数据库的理解和应用。最主要的是从反面学习如何防止sql注入和XSS攻击,本次实验虽然不难,但是第一次在Linux环境下部署,还是遇到了很多问题。比如在实验里,由于我的虚机是之前铐别人的,故而参考了负责任的报告进行了修改,然后就是最后始终没法连接到数据库。