php基础语法

ads
  





原文链接:https://github.com/smyhvae/Web/blob/master/08-Ajax/01-%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%88%86%E7%B1%BB%E5%8F%8APHP%E5%85%A5%E9%97%A8.md

PHP的常见语法

PHP代码执行方式

  • 在服务器端执行,然后返回给用户结果。如果直接使用浏览器打开,就会解析为文本。

  • 意思是说,需要浏览器通过 http请求,才能够执行php页面。

这里只列举常用的PHP语法,更为详细的语法教程可以查阅 api 文档。

第一段 php 代码

将 WampServer 跑起来,在D:wampwww下新建一个1.php文件,代码如下:

1.php:

<?php
echo "hello smyhvae";
?>
  • 1

  • 2

  • 3

在浏览器中输入http://127.0.0.1/2018-02-28/1.php,效果如下:

代码的编写位置

上方代码中,注意php语言的格式,第一行和第三行的格式中,没有空格。代码的编写位置在<?php 代码写在这里?>

注释

php 注释的写法跟 js 一致。

<?php
//这是单行注释
/*
这是多行注释
*/

?>
  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

变量

  • 变量以$符号开头,其后是变量的名称。大小写敏感。

  • 变量名称必须以字母或下划线开头。

举例:

	$a1;
$_abc;
  • 1

  • 2

数据类型

PHP支持的数据类型包括:

  • 字符串

  • 整数

  • 浮点数

  • 布尔

  • 数组

  • 对象

  • NULLL

定义字符串时需要注意:

  • 单引号`` :内部的内容只是作为字符串。

  • 双引号"" :如果内部是PHP的变量,那么会将该变量的值解析。如果内部是html代码,也会解析成html。

说白了,单引号里的内容,一定是字符串。双引号里的内容,可能会进行解析。

	echo "<input type=`button` value=`smyhvae`>";
  • 1

上面这个语句,就被会解析成按钮。

	// 字符串
$str = '123';

// 字符串拼接
$str2 = '123'.'哈哈哈';


// 整数
$numA = 1; //正数
$numB = -2;//负数

// 浮点数
$x = 1.1;

// 布尔
$a = true;
$b = false;

// 普通数组:数组中可以放 数字、字符串、布尔值等,不限制类型。
$arr1 = array('123', 123);
echo $arr1[0];

// 关系型数组:类似于json格式
$arr2 = $array(`name`=>`smyhvae`, `age`=>`26`);
echo $arr2[`name`]; //获取时,通过 key 来获取

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

  • 11

  • 12

  • 13

  • 14

  • 15

  • 16

  • 17

  • 18

  • 19

  • 20

  • 21

  • 22

  • 23

  • 24

  • 25

  • 26

上方代码中注意,php 中字符串拼接的方式是 .。要注意哦。

运算符

PHP 中的运算符跟 JavaScript 中的基本一致,用法也基本一致。

  • 算数运算符:+-/*%

  • 赋值运算符:x = yx += y,x -= y等。

举例:

<?php
$x = 10;
$y = 6;

echo ($x + $y); // 输出 16
echo ($x - $y); // 输出 4
echo ($x * $y); // 输出 60
echo ($x / $y); // 输出 1.6666666666667
echo ($x % $y); // 输出 4
?>
  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

函数的定义

语法格式:


function functionName() {
//这里写代码
}
  • 1

  • 2

  • 3

  • 4

(1)有参数、无返回值的函数:

	function sayName($name){
echo $name.'你好哦';
}
// 调用
sayName('smyhvae');
  • 1

  • 2

  • 3

  • 4

  • 5

(2)有参数、参数有默认值的函数:

	function sayFood($food='西兰花'){
echo $food.'好吃';
}
// 调用
sayFood('西葫芦');// 如果传入参数,就使用传入的参数
sayFood();// 如果不传入参数,直接使用默认值
  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

(3)有参数、有返回值的函数:

	function sum($a,$b){
return $a+$b
}
sum(1,2);// 返回值为1+2 = 3
  • 1

  • 2

  • 3

  • 4

类和对象

PHP中允许使用对象这种自定义的数据类型。必须先声明,实例化之后才能够使用。

定义最基础的类:

	class Fox{

public $name = 'itcast';
public $age = 10;
}

$fox = new $fox;
// 对象属性取值
$name = $fox->name;
// 对象属性赋值
$fox->name = '小狐狸';
  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

  • 11

带构造函数的类:

	class fox{
// 私有属性,外部无法访问
var $name = '小狐狸';
// 定义方法 用来获取属性
function Name(){
return $this->name;
}
// 构造函数,可以传入参数
function fox($name){
$this->name = $name
}
}

// 定义了构造函数 需要使用构造函数初始化对象
$fox = new fox('小狐狸');
// 调用对象方法,获取对象名
$foxName = $fox->Name();
  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

  • 11

  • 12

  • 13

  • 14

  • 15

  • 16

  • 17

内容输出

  • echo:输出字符串。

  • print_r():输出复杂数据类型。比如数组、对象。

  • var_dump():输出详细信息。

	$arr =array(1,2,'123');

echo'123';
//结果:123


print_r($arr);
//结果:Array ( [0] => 1 [1] => 2 [2] => 123 )

var_dump($arr);
/* 结果:
array
0 => int 1
1 => int 2
2 => string '123' (length=3)
*/


  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

  • 11

  • 12

  • 13

  • 14

  • 15

  • 16

  • 17

循环语句

这里只列举了foreachfor循环。

for 循环:

	for ($x=0; $x<=10; $x++) {
echo "数字是:$x <br>";
}

  • 1

  • 2

  • 3

  • 4

foreach 循环:

	$colors = array("red","green","blue","yellow");

foreach ($colors as $value) {
echo "$value <br>";
}
  • 1

  • 2

  • 3

  • 4

  • 5

上方代码中,参数一:循环的对象。参数二:将对象的值挨个取出,直到最后。

如果循环的是对象,输出的是对象的属性的值。

输出结果:

	red
green
blue
yellow
  • 1

  • 2

  • 3

  • 4

php中的header()函数

浏览器访问http服务器,接收到响应时,会根据响应报文头的内容进行一些具体的操作。在php中,我们可以根据 header 来设置这些内容。

header()函数的作用:用来向客户端(浏览器)发送报头。直接写在php代码的第一行就行。

下面列举几个常见的 header函数。

(1)设置编码格式:

	header('content-type:text/html; charset= utf-8');
  • 1

例如:

<?php
header('content-type:text/html; charset= utf-8');
echo "我的第一段 PHP 脚本";
?>
  • 1

  • 2

  • 3

  • 4

(2)设置页面跳转:

	header('location:http://www.baidu.com');
  • 1

设置页面刷新的间隔:

	header('refresh:3; url=http://www.xiaomi.com');
  • 1

php中的 get 请求和 post 请求

get 请求

可以通过$_GET对象来获取。

举例:下面是一个简单的表单代码,通过 get 请求将数据提交到01.php。

(1)index.html:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<!-- 通过 get 请求,将表单提交到 php 页面中 -->
<form action="01.php" method="get">
<label for="">姓名:
<input type="text" name="userName"></label>
<br/>
<label for="">邮箱:
<input type="text" name="userEmail"></label>
<br/>
<input type="submit" name="">
</form>

</body>
</html>
  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

  • 11

  • 12

  • 13

  • 14

  • 15

  • 16

  • 17

  • 18

  • 19

  • 20

(2)01.php:

<?php
header('content-type:text/html; charset= utf-8');
echo "<h1>php 的get 请求演示</h1>";
echo '用户名:'.$_GET['userName'];
echo '<br/>';
echo '邮箱:'.$_GET['userEmail'];
?>
  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

上方代码可以看出,$_GET是关系型数组,可以通过 **$_GET[key]**获取值。这里的 key 是 form 标签中表单元素的 name 属性的值。

效果:

post 请求

可以通过$_POST对象来获取。

举例:下面是一个简单的表单代码,通过 post 请求将数据提交到02.php。

(1)index.html:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<!-- 通过 post 请求,将表单提交到 php 页面中 -->
<form action="02.php" method="post" >
<label for="">姓名:
<input type="text" name= "userName"></label>
<br/>
<label for="">邮箱:
<input type="text" name= "userEmail"></label>
<br/>
<input type="submit" name="">
</form>

</body>
</html>
  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

  • 11

  • 12

  • 13

  • 14

  • 15

  • 16

  • 17

  • 18

  • 19

  • 20

(2)02.php:

<?php
header('content-type:text/html; charset= utf-8');
echo "<h1>php 的 post 请求演示</h1>";
echo '用户名:'.$_POST['userName'];
echo '<br/>';
echo '邮箱:'.$_POST['userEmail'];
?>
  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

上方代码可以看出,$_POST是关系型数组,可以通过 **$_POST[key]**获取值。这里的 key 是 form 标签中表单元素的 name 属性的值。

效果演示:

实际开发中,可能不会单独写一个php文件,常见的做法是:在 html 文件中嵌入 php 的代码。

比如说,原本 html 中有个 li 标签是存放用户名的:

	<li>smyhvae</li>
  • 1

嵌入 php后,用户名就变成了动态获取的:

	<li><?php
echo $_POST[`userName`]
?></li>
  • 1

  • 2

  • 3

php 中文件相关的操作

文件上传 $_FILES

上传文件时,需要在html代码中进行如下设置:

(1)在html表单中,设置enctype="multipart/form-data"。该值是必须的。

(2)只能用 post 方式获取。

代码如下:

(1)index.html:

  <form action="03-fileUpdate.php" method="post" enctype="multipart/form-data">
<label for="">照片:
<input type="file" name = "picture" multiple=""></label>
<br/>
<input type="submit" name="">
</form>

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

(2)在 php 文件中打印 file 的具体内容:

<?php
sleep(5);// 让服务器休息一会
print_r($_FILES); //打印 file 的具体内容
?>
  • 1

  • 2

  • 3

  • 4

演示效果:

上方现象可以看出:

  • 点击提交后,服务器没有立即出现反应,而是休息了一会sleep(5)

  • wamp/tmp目录下面出现了一个.tmp文件。

  • .tmp文件一会就被自动删除了。

  • 服务器返回的内容中有文件的名字[name] => computer.png,以及上传文件保存的位置D:wamptmpphp3D70.tmp。服务器返回的内容如下:

	Array ( [upFile] => Array ( [name] => yangyang.jpg [type] => image/jpeg [tmp_name] => D:wamptmpphpCC56.tmp [error] => 0 [size] => 18145 ) )
  • 1

文件保存

我们尝试一下,把上面的例子中的临时目录下面的文件保存起来。这里需要用到 php 里的 move_uploaded_file()函数。#

格式如下:

	move_uploaded_file($_FILES['photo']['tmp_name'], './images/test.jpg');
  • 1

参数解释:参数一:移动的文件。参数二:目标路径。

(1)index.html:(这部分的代码保持不变)

	<form action="03.fileUpdate.php" method="post" enctype="multipart/form-data">
<label for="">照片:
<input type="file" name = "picture" multiple=""></label>
<br/>
<input type="submit" name="">
</form>
  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

(2)PHP代码:

暂略。

WampServer 中修改上传文件的大小

(1)打开 WampServer的文件php.ini

(2)修改php.ini中的如下内容:

设置文件最大上传限制:(值的大小可以根据需求修改)

	file_uploads = On;         是否允许上传文件 On/Off 默认是On
upload_max_filesize = 32M; 设置 上传文件的最大限制
post_max_size = 32M; 设置 通过Post提交的最多数据
  • 1

  • 2

  • 3

考虑网络传输快慢:这里修改一些参数:

	max_execution_time = 30000      ; 脚本最长的执行时间 单位为秒
max_input_time = 600 ; 接收提交的数据的时间限制 单位为秒
memory_limit = 1024M ; 最大的内存消耗
  • 1

  • 2

  • 3

HTTP 协议

请求

客户端发出的请求,主要由三个组成部分:请求行、请求头、请求主体。如下图所示:

1、请求行:

  • 请求方法:GET or POST

  • 请求URL

  • HTTP协议版本

2、请求头:

常见的请求头如下:

User-Agent:浏览器的具体类型  如:User-Agent:Mozilla/5.0 (Windows NT 6.1; rv:17.0) Gecko/20100101 Firefox/17.0

Accept:浏览器支持哪些数据类型  如:Accept: text/html,application/xhtml+xml,application/xml;q=0.9;

Accept-Charset:浏览器采用的是哪种编码  如:Accept-Charset: ISO-8859-1

Accept-Encoding:浏览器支持解码的数据压缩格式  如:Accept-Encoding: gzip, deflate

Accept-Language:浏览器的语言环境  如:Accept-Language zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3

Host:请求的主机名,允许多个域名同处一个IP地址,即虚拟主机。Host:www.baidu.com

Connection:表示是否需要持久连接。
属性值可以是Keep-Alive/close,HTTP1.1默认是持久连接,它可以利用持久连接的优点,当页面包含多个元素时(例如Applet,图片),显著地减少下载所需要的时间。
要实现这一点,Servlet需要在应答中发送一个Content-Length头,最简单的实现方法是:先把内容写入ByteArrayOutputStream,然后在正式写出内容之前计算它的大小。如:Connection: Keep-Alive

Content-Length:表示请求消息正文的长度。对于POST请求来说Content-Length必须出现。

Content-Type:WEB服务器告诉浏览器自己响应的对象的类型和字符集。例如:Content-Type: text/html; charset='gb2312'

Content-Encoding:WEB服务器表明自己使用了什么压缩方法(gzip,deflate)压缩响应中的对象。例如:Content-Encoding:gzip

Content-Language:WEB服务器告诉浏览器自己响应的对象的语言。

Cookie:最常用的请求头,浏览器每次都会将cookie发送到服务器上,允许服务器在客户端存储少量数据。

Referer:包含一个URL,用户从该URL代表的页面出发访问当前请求的页面。服务器能知道你是从哪个页面过来的。Referer: http://www.baidu.com/

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

  • 11

  • 12

  • 13

  • 14

  • 15

  • 16

  • 17

  • 18

  • 19

  • 20

  • 21

  • 22

  • 23

  • 24

  • 25

  • 26

  • 27

  • 28

3、请求体:

指的是提交给服务器的数据。

需要注意的是,如果是往服务器提交数据,需要在请求头中设置Content-Type: application/x-www-form-urlencoded(在ajax中需要手动设置)。

响应

响应报文是服务器返回给客户端的。组成部分有响应行、响应头、响应主体。

1、状态行:

HTTP响应行:主要是设置响应状态等信息。

2、响应头:

Cookie、缓存等信息就是在响应头的属性中设置的。

常见的响应头如下:

Cache-Control

响应输出到客户端后,服务端通过该报文头属告诉客户端如何控制响应内容的缓存。

下面,的设置让客户端对响应内容缓存3600秒,也即在3600秒内,如果客户再次访问该资源,直接从客户端的缓存中返回内容给客户,不要再从服务端获取(当然,这个功能是靠客户端实现的,服务端只是通过这个属性提示客户端“应该这么做”,做不做,还是决定于客户端,如果是自己宣称支持HTTP的客户端,则就应该这样实现)。

Cache-Control: max-age=3600

ETag

一个代表响应服务端资源(如页面)版本的报文头属性,如果某个服务端资源发生变化了,这个ETag就会相应发生变化。它是Cache-Control的有益补充,可以让客户端“更智能”地处理什么时候要从服务端取资源,什么时候可以直接从缓存中返回响应。

ETag: "737060cd8c284d8af7ad3082f209582d"

Location

我们在Asp.net中让页面Redirect到一个某个A页面中,其实是让客户端再发一个请求到A页面,这个需要Redirect到的A页面的URL,其实就是通过响应报文头的Location属性告知客户端的,如下的报文头属性,将使客户端redirect到iteye的首页中:

Location: http://www.google.com.hk

Set-Cookie

服务端可以设置客户端的Cookie,其原理就是通过这个响应报文头属性实现的。

Set-Cookie: UserID=JohnDoe; Max-Age=3600; Version=1


  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

  • 11

  • 12

  • 13

  • 14

  • 15

  • 16

  • 17

  • 18

  • 19

  • 20

  • 21

  • 22

  • 23

  • 24

  • 25

  • 26

  • 27

3、HTTP响应体:

如果请求的是HTML页面,那么返回的就是HTML代码。如果是JS就是JS代码。

抓包工具

常见的抓包工具有:Fiddler、Charles。

Fiddler使用简介
Charles使用简介








CTF部落

高质量CTF社区,致力于国内网CTF比赛研究,每日分享行业最新资讯,交流解答各类技术问题。星球中可以获取各类CTF比赛信息、解题工具、技巧、书籍、各种资源,发布政府机关、企业、厂商网络安全招聘信息,及内类内推资格。所有发布的内容均精心挑选、成体系化,让你远离无用信息及零碎的知识点。


加入星球后获得:

  • 各类CTF比赛信息、解题工具、技巧、书籍、靶场资源;

  • CTF学习思维导图,0基础开启CTF之路;

  • 遇到任何技术题都快速提问与讨论交流的思路;

  • 组织队伍参与各类CTF比赛;

  • 面试大厂心得及内推资格;

加入星球后,可以跟我 1 对 1 免费提问交流、帮你确定安全学习方向和路线、和大家一起交流学习,从而激励你持续学习!

随着加入的星友越多,压力就越大,所以保证质量的同时,会适当提高门槛。现在限时限量扫码抢购500张¥100优惠券体验三天,如果不满意三天可以免费全额退款,尽早体验、以优惠价加入肯定是不亏的。

如果觉得有用,记得、收藏文章哦!
,回复“CTF”,领取CTF各方向学习/解题思维导图。回复“面试”,领取网安面试必考题及面试经验。

往期招聘


奇安信安全岗位招聘

天融信安全岗位招聘

深信服安全岗位招聘,有校招

安恒信息岗位招聘,高薪,可实习

绿盟科技安全岗位招聘,高薪

山石网科岗位招聘,高薪,可实习,大专可报

永安在线安全岗位招聘,高薪,大专可报

迪普科技安全岗位招聘,高薪,大专可报

亚信安全岗位招聘,高薪,大专可报

启明星辰安全岗位招聘,百万年薪,大专可报

中孚信息安全岗位招聘,高薪,学历不限

安天移动安全岗位招聘,高薪,学历不限

北京万里红安全岗位招聘,高薪,学历不限

上海观安信息安全岗位招聘,高薪

吉大正元安全岗位招聘,百万年薪

北信源安全岗位招聘,高薪

北京神州泰岳安全岗位招聘,高薪

任子行安全岗位招聘,高薪

北京明朝万达安全岗位招聘

联通数科安全岗位招聘

杭州美创科技安全岗位招聘,高薪

北京长亭科技安全岗位招聘,百万年薪

网宿科技安全岗位招聘

梆梆安全岗位招聘,高薪

北京亿赛通安全岗位招聘,百万年薪

东方通安全岗位招聘,高薪

竹云科技安全岗位招聘,高薪

上海派拉软件安全岗位招聘,高薪

青藤云安全岗位招聘,高薪

恒安嘉新(北京)安全岗位招聘,高薪

北京芯盾时代安全岗位招聘,高薪

北京指掌易科技安全岗位招聘,高薪

北京飞天诚信安全岗位招聘,高薪,大专可报

深信服安全岗位招聘,百万年薪专场招聘

北京亚鸿世纪安全岗位招聘,高薪

绿盟科技安全岗位招聘,高薪

奇安信安全岗位招聘,高薪

博智安全岗位招聘,高薪

海泰方圆安全岗位招聘,百万年薪,大专可报

中国电子云安全岗位招聘

闪捷信息安全岗位招聘

北京珞安科技安全岗位招聘,高薪,大专可报,可实习

上海爱数信息安全岗位招聘,高薪

杭州天宽安全岗位招聘

西安交大捷普安全岗位招聘

想进安全大厂么!快来看面试题及经验



往期CTF


CTF之misc杂项解题技巧总结(六)——视频、音频文件

CTF之misc杂项解题技巧总结(五)——图片文件

CTF入门必备之题型介绍

CTF之misc杂项解题技巧总结(四)——SWF游戏和取证分析

CTF之misc杂项解题技巧总结(三)——压缩文件

CTF之misc杂项解题技巧总结(二)——隐写术

CTF之misc杂项解题技巧总结(一)——编码与加密

干货|CTF工具资源库

11月全球CTF比赛时间汇总来了!

新手如何入门CTF?ctf比赛/学习资源整理,记得收藏!

CTF之web常见题型及解题技巧总结

CTF学习之CRYPTO(密码学)总结

CTF pwn 中最通俗易懂的堆入坑指南

CTF之misc杂项解题技巧总结(七)——流量分析、搜索引擎及

12月全球CTF比赛时间汇总来了!

ctf比赛/学习资源整理,记得收藏!文末有CTF群

CTF-REVERSE练习之逆向初探

CTF学习路线推荐,建议收藏

CTF解题基本思路步骤(misc和web)

Linux PWN从入门到熟练

Linux PWN从入门到熟练(二)

CTF apk 安卓逆向考点、例题及三款移动应用安全分析平台

CTF 六大方向基础工具合集

CTF-MISC基础-压缩包隐写总结及常见套路

建议收藏,CTF网络安全各方向入门知识汇总

超详细,手把手教你打造CTF动态靶场

移动安全入门教程--Xposed篇

基于Ubuntu搭建CTFd平台(全网最全)

年度总结,2022年CTF精华文章汇总

1月全球CTF比赛时间汇总来了!

CTF指南--隐写术总结

ctf杂项misc之文件修复,含文件结构修复、高度修复、标识修复

ctf杂项misc之音频隐写总结

CTF之web安全赛题解析

一道简单Chacha20_RC4算法CTF题目

CTF学习、项目、工具知识仓库

网络安全个人技能发展路线图

CTF-综合测试(高难度)【超详细】

CTFHUB--技能树--SSRF全解(上篇)

CTFHUB--技能树--SSRF全解(下篇)

网络安全初、中、高阶学习路线图,建议收藏!

2023年网络安全技术自学路线图及职业选择方向

逆向分析学习入门教程

CTF PWN新手入门篇,PWN学习总结

网络安全ctf比赛/学习资源整理,解题工具、思路、靶场、学习路线,推荐收藏!

网络安全思维导图

网络安全 CTF(加密, 解密)全过程解析

CTF网络安全之Misc-zip压缩包分析

CTF无线网络安全技术基础

2月国内外CTF比赛时间汇总来了!

网络安全面试题(含答案)

网络安全思维导图

Kali linux无线网络渗透详解笔记

数据库语法整理及WAF绕过方式

干货|网络安全渗透测试面试问题汇总,持续更新 建议收藏

几道ctf的密码入门题目

CTFer成长之路之CTF中的SQL注入

CTFer成长之路之命令执行漏洞

端口漏洞总结



BugKu CTF


BugKu CTF(杂项篇MISC)—想要种子吗

BugKu CTF(杂项篇MISC)—社工-进阶收集

BugKu CTF(杂项篇MISC)—善用工具

BugKu CTF(杂项篇MISC)—隐写2

BugKu CTF(杂项篇MISC)—只有黑棋的棋盘

BugKu CTF(杂项篇MISC)—隐写

BugKu CTF(杂项篇MISC)—1和0的故事

BugKu CTF(杂项篇MISC)—放松一下吧

BugKu CTF(杂项篇MISC)—白哥的鸽子

更多CTF比赛信息、writeup请点击公众号菜单栏CTF








END





扫码关注



网络安全研究所

更多精彩等着你

最后编辑于:2024/1/22 拔丝英语网

admin-avatar

英语作文代写、国外视频下载

高质量学习资料分享

admin@buzzrecipe.com