web任务一:Web环境准备
内容:
1.安装phpstudy,python,JAVA(jdk8)并配置好相关的环境,安装常用工具burpsuit,kali等;
2.学习HTTP协议(请求与响应),学习利用burpsuite 实现简单的抓包改包;
3.掌握PHP的基本语法、数据类型、变量常量
4.学习markdown语法
解
1.安装phpstudy,python,JAVA(jdk8)并配置好相关的环境,安装常用工具burpsuit,kali等
安装phpstudy:https://www.xp.cn/
python安装(一直在电脑上,略)
java安装
教程:https://jingyan.baidu.com/article/e75aca85b29c3b142edac6a8.html
结果如下
burpsuit安装
教程:https://www.cnblogs.com/v1vvwv/p/how-to-install-BurpSuite.html
效果图(再次感谢某同学的帮助)
kali因虚拟机原因安装失败至今未找到解决方法(这就很淦)(2020.5.2已解决)
踩坑记录:
1.安装kali的iso文件要在虚拟机创建好后添加(iso并非光盘)
2.2019,4版本用中文会出现乱码。
2.http协议学习&burpsuit实现抓包改包
一、http协议学习
主要学习网址:https://www.cnblogs.com/an-wen/p/11180076.html
学习笔记
1.工作原理
HTTP协议定义Web客户端如何从Web服务器请求Web页面,以及服务器如何把Web页面传送给客户端。HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求报文,请求报文包含请求的方法、URL、协议版本、请求头部和请求数据。服务器以一个状态行作为响应,响应的内容包括协议的版本、成功或者错误代码、服务器信息、响应头部和响应数据。
(个人理解:问XXX吃了吗,答XXX吃了)
2.请求与响应
①客户端连接到Web服务器
一个HTTP客户端,通常是浏览器,与Web服务器的HTTP端口(默认为80)建立一个TCP套接字连接。例如,http://www.baidu.com。
② 发送HTTP请求
通过TCP套接字,客户端向Web服务器发送一个文本的请求报文,一个请求报文由请求行、请求头部、空行和请求数据4部分组成。
③服务器接受请求并返回HTTP响应
Web服务器解析请求,定位请求资源。服务器将资源复本写到TCP套接字,由客户端读取。一个响应由状态行、响应头部、空行和响应数据4部分组成。
④ 释放连接TCP连接
若connection 模式为close,则服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接;若connection 模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求;
⑤ 客户端浏览器解析HTML内容
客户端浏览器首先解析状态行,查看表明请求是否成功的状态代码。然后解析每一个响应头,响应头告知以下为若干字节的HTML文档和文档的字符集。客户端浏览器读取响应数据HTML,根据HTML的语法对其进行格式化,并在浏览器窗口中显示。
(个人理解:在路上,小B找到小A,小B问小A吃了吗;小A答小B吃了;小B收到小A吃了。小A等着小B接着问,过了一会小B没问,大路朝天各走一边。)
3.
请求-响应模式(有问才有答)
无状态保存(刚刚你跟我说啥了,对啊刚刚我跟你说啥了)
4.请求
方法
HTTP/1.1协议中共定义了八种方法
GET
向指定的资源发出“显示”请求。使用GET方法应该只用在读取数据,而不应当被用于产生“副作用”的操作中,例如在Web Application中。其中一个原因是GET可能会被网络蜘蛛等随意访问。
HEAD
与GET方法一样,都是向服务器发出指定资源的请求。只不过服务器将不传回资源的本文部分。它的好处在于,使用这个方法可以在不必传输全部内容的情况下,就可以获取其中“关于该资源的信息”(元信息或称元数据)。
POST
向指定资源提交数据,请求服务器进行处理(例如提交表单或者上传文件)。数据被包含在请求本文中。这个请求可能会创建新的资源或修改现有资源,或二者皆有。
PUT
向指定资源位置上传其最新内容。
DELETE
请求服务器删除Request-URI所标识的资源。
TRACE
回显服务器收到的请求,主要用于测试或诊断。
OPTIONS
这个方法可使服务器传回该资源所支持的所有HTTP请求方法。用’*'来代替资源名称,向Web服务器发送OPTIONS请求,可以测试服务器功能是否正常运作。
CONNECT
HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。通常用于SSL加密服务器的链接(经由非加密的HTTP代理服务器)。
注意:区分大小写,HTTP服务器至少应该实现GET和HEAD方法
URL(统一资源定位符)
超文本传输协议(HTTP)的统一资源定位符将从因特网获取信息的五个基本元素包括在一个简单的地址中:
传送协议。
层级URL标记符号(为[//],固定不变)
访问资源需要的凭证信息(可省略)
服务器。(通常为域名,有时为IP地址)
端口号。(以数字方式表示,若为HTTP的默认值“:80”可省略)
路径。(以“/”字符区别路径中的每一个目录名称)
查询。(GET模式的窗体参数,以“?”字符为起点,每个参数以“&”隔开,再以“=”分开参数名称与数据,通常以UTF8的URL编码,避开字符冲突的问题)
片段。以“#”字符为起点
以https://www.baidu.com:80/search/error.html 为例, 其中
https,是协议;
www.baidu.com,是服务器;
80,是服务器上的默认网络端口号,默认不显示;
/search/error.html,是路径(URI:直接定位到对应的资源);
(该网址不存在)
请求头
请求头:请求头由关键字/值对组成,每行一对儿,中间用英文冒号分割。常见的有:
User-agent :浏览器类型;
Accept:客户端可识别的文件类型
Host:请求的主机名
Connection:连接方式,有keep-alive,close两种
请求格式
栗子
打开hao123抓包
方法:GET
URI:/?tn=93718154_hao_p
协议:HTTP/1.1
请求头部:
Accept: text/html, application/xhtml+xml, image/jxr, /
Host: www.hao123.com
Connection: Keep-Alive
Accept-Language: zh-CN
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko
Accept-Encoding: gzip, deflate
请求数据:
Cookie: BAIDUID=37152F80B6A99F145466DE92347C5EE7:FG=1; tnwhiteft=XzFYUBclcWb1P1D3nHRYgv99Udqsuzc_cMw1cWCkPH6LrjmYrH6Lxf; ft=1; Hm_lvt_0703cfc0023d60b244e06b5cacfef877=1587864985; __bsi=8389814246531762982_00_20_R_R_8_0303_c02f_Y
5.响应
响应格式
状态码
状态代码的第一个数字代表当前响应的类型:
1xx消息——请求已被服务器接收,继续处理
2xx成功——请求已成功被服务器接收、理解、并接受
3xx重定向——需要后续操作才能完成这一请求
4xx请求错误——请求含有词法错误或者无法被执行
5xx服务器错误——服务器在处理某个正确请求时发生错误
学习网址:https://www.runoob.com/http/http-status-codes.html
响应头
学习网址:https://www.runoob.com/http/http-header-fields.html
**
二、burpsuit实现抓包改包
**
抓包/截包/改包教程:https://blog.csdn.net/scnu_jiechao/article/details/44241597
抓包运行效果:
改包:将hao123改为baidu
搜索web改为safe
3.PHP的基本语法、数据类型、变量常量
菜鸟教程:https://www.runoob.com/php/php-tutorial.html
**
基础知识
**
PHP 文件的默认文件扩展名是 “.php”。
PHP 文件通常包含 HTML 标签和一些 PHP 脚本代码。
基本语法
PHP 脚本可以放在文档中的任何位置。
PHP 脚本以 <?php 开始,以 ?> 结束
PHP 中的每个代码行都必须以分号结束。分号是一种分隔符,用于把指令集区分开来。
输出指令:echo 和 print;
栗子:
<?php
echo "Hello World!";
?>
<?php 内容 ?> 可以在任何地方插入
echo:输出语句
输出示例:Hello World!
变量常量
变量规则:
以$开始,后面跟变量名称;
变量名必须以字母或下划线开始;
变量名只由字母数字字符及下划线组成;
变量名不包含空格;
区分大小写;
栗子
<?php $txt="Hello world!"; $x=5; $y=10.5; ?>
注意:PHP 是一门弱类型语言
在上面的实例中,我们注意到,不必向 PHP 声明该变量的数据类型。
PHP 会根据变量的值,自动把变量转换为正确的数据类型。
在强类型的编程语言中,我们必须在使用变量前先声明(定义)变量的类型和名称
PHP 变量作用域
变量的作用域是脚本中变量可被引用/使用的部分。
PHP 有四种不同的变量作用域:
local,global,static,parameter
局部和全局作用域:
在所有函数外部定义的变量,拥有全局作用域。除了函数外,全局变量可以被脚本中的任何部分访问,要在一个函数中访问一个全局变量,需要使用 global 关键字。
栗子
<?php
$x=5; // 全局变量
function myTest()
{
$y=10; // 局部变量
echo "<p>测试函数内变量:<p>";
echo "变量 x 为: $x";
echo "<br>";
echo "变量 y 为: $y";
}
myTest();
echo "<p>测试函数外变量:<p>";
echo "变量 x 为: $x";
echo "<br>";
echo "变量 y 为: $y";
?>
运行结果:
测试函数内变量:
变量 x 为:
变量 y 为: 10
测试函数外变量:
变量 x 为: 5
变量 y 为:
x为全局变量不能在函数中被引用,y仅在函数中不可能在函数外被引用。
global 关键字
global 关键字用于函数内访问全局变量。
在函数内调用函数外定义的全局变量,我们需要在函数中的变量前加上 global 关键字:
例如:
<?php
$x=5;
$y=10;
function myTest()
{
global $x,$y;
$y=$x+$y;
}
myTest();
echo $y; // 输出 15
?>
运行结果:
15
在函数中x和y均被定义为全局变量,可以调用函数外的x,y,所以运行结果为15;
Static 作用域
当一个函数完成时,它的所有变量通常都会被删除。然而,有时候我希望某个局部变量不要被删除这需要“static”
栗子
<?php
function myTest()
{
static $x=0;
echo $x;
$x++;
}
myTest();
myTest();
myTest();
?>
运行结果:
012
每次调用该函数时,该变量将会保留着函数前一次被调用时的值。
注意:该变量仍然是函数的局部变量。
常量
常量是一个简单值的标识符。该值在脚本中不能改变。
一个常量由英文字母、下划线、和数字组成,但数字不能作为首字母出现。 (常量名不需要加 $ 修饰符)。
注意: 常量在整个脚本中都可以使用。
设置 PHP 常量
设置常量,使用 define() 函数,函数语法如下:
bool define ( string $name , mixed $value [, bool $case_insensitive = false ] )
该函数有三个参数:
name:必选参数,常量名称,即标志符。
value:必选参数,常量的值。
case_insensitive :可选参数,如果设置为 TRUE,该常量则大小写不敏感。默认是大小写敏感的。
默认区分大小写:
<?php
// 区分大小写的常量名
define("GREETING", "欢迎访问 Runoob.com");
echo GREETING; // 输出 "欢迎访问 Runoob.com"
echo '<br>';
echo greeting; // 输出 "greeting"
?>
不区分大小写:
<?php
// 不区分大小写的常量名
define("GREETING", "欢迎访问 Runoob.com", true);
echo greeting; // 输出 "欢迎访问 Runoob.com"
?>
注意
常量是全局的,常量在定义后,默认是全局变量,可以在整个运行的脚本的任何地方使用。
echo 和 print 语句
echo 和 print 区别:
cho - 可以输出一个或多个字符串;
print - 只允许输出一个字符串,返回值总为 1
注意:echo 输出的速度比 print 快, echo 没有返回值,print有返回值1
echo 是一个语言结构,使用的时候可以不用加括号,也可以加上括号: echo 或 echo()
print 同样是一个语言结构,可以使用括号,也可以不使用括号: print 或 print()
数据类型
整型:
至少一个数字;
没有逗号和空格;
无小数点;
可正可负;
有十进制, 十六进制( 以 0x 为前缀)或八进制(前缀为 0);
$x = 5985;
$x = -345; // 负数
$x = 0x8C; // 十六进制数
$x = 047; // 八进制数
字符串:
一个字符串是一串字符的序列,就像 “Hello world!”,可以将任何文本放到单引号或双引号中。
浮点型:
浮点数是带小数部分的数字,或是指数形式。
$x = 10.365;
$x = 2.4e3;
$x = 8E-5;
PHP 布尔型
布尔型可以是 TRUE 或 FALSE。
$x=true;
$y=false;
布尔型通常用于条件判断
PHP 数组
数组可以在一个变量中存储多个值。
栗子
<?php
$cars=array("php","c","python");
?>
PHP NULL 值
NULL 值表示变量没有值。NULL 是数据类型为 NULL 的值。
NULL 值指明一个变量是否为空值。 同样可用于数据空值和NULL值的区别。
可以通过设置变量值为 NULL 来清空变量数据:
<?php
$x="Hello world!";
$x=null;
var_dump($x);
?>
PHP 类型比较
虽然 PHP 是弱类型语言,但也需要明白变量类型及它们的意义,因为我们经常需要对 PHP 变量进行比较,包含松散和严格比较。
松散比较:使用两个等号 “== ”比较,只比较值,不比较类型。
严格比较:用三个等号“ ===” 比较,除了比较值,也比较类型。
运算符
加减乘除:“+”,“-”,“*”,“/”
取反:“-”
<?php
$x =2;
echo -$x;
?>
结果:-2
并置:“.”例如:“Hi” . “Ha” 结果:HiHa
条件语句:
在 PHP 中,提供了下列条件语句:
if 语句 - 在条件成立时执行代码
if…else 语句 - 在条件成立时执行一块代码,条件不成立时执行另一块代码块
if…elseif…else 语句 - 在若干条件之一成立时执行一个代码块
switch 语句 - 在若干条件之一成立时执行一个代码块
循环语句语句
while - 只要指定的条件成立,则循环执行代码块
do…while - 首先执行一次代码块,然后在指定的条件成立时重复这个循环
for - 循环执行代码块指定的次数
foreach - 根据数组中每个元素来循环代码块
条件语句与循环语句用法与C大致相同。
数组:
数组能够在单个变量中存储多个值;
array() 函数用于创建数组:
array();
在 PHP 中,有三种类型的数组:
数值数组 - 带有数字 ID 键的数组
关联数组 - 带有指定的键的数组,每个键关联一个值
多维数组 - 包含一个或多个数组的数组
获取数组的长度 - count() 函数
count() 函数用于返回数组的长度(元素的数量)
可用for循环遍历数组
字符串函数:https://www.runoob.com/php/php-ref-string.html