DC-1靶机渗透测试
前言:这是我的第一个靶机教程,刚开始自己打的时候也查询了很多资料,也是一步步学过来的。现在也把自己的学习过程和思路也记录一下,希望对大家有帮助。
一、信息收集
-
对目标ip/端口进行探测
使用nmap进行扫描探测: nmap介绍:nmap是用来探测计算机网络上的主机和服务的一种安全扫描器。为了绘制网络拓扑图,Nmap的发送特制的数据包到目标主机,然后对返回数据包进行分析。Nmap是一款枚举和测试网络的强大工具。
nmap使用教程:
-
先查询攻击机ip
命令:
ifconfig
得到攻击机的ip为:192.168.2.128
-
收集靶机ip
因为是靶机,其ip地址我们在创建虚拟机的时候,网络设置和攻击机需要设定成一样的。我们找靶机的ip,就需要在和攻击机的相同网段下查找
扫一下攻击机所在的网段:
命令:
arp-scan -l
查看靶机的ip地址,对应的IP是192.168.2.130
-
对靶机进行端口探测
使用nmap扫描:
命令:
nmap -sV -p- 192.168.2.130
-sV 扫描目标主机端口上运行的软件信息
-p- 扫描全部端口0-6553
80端口是常见的业务端口,访问一下
-
访问80端口:192.168.2.130:80
使用Wappalyzer插件查看指纹信息:
CMS是
Drupal
Apache 2.2.22
PHP 5.4.45
jQuery 1.4.4–>
可以利用cms漏洞来进行突破
二、漏洞查找及利用
-
什么是cms呢?
CMS是"Content Management System"的缩写,意为"内容管理系统"。 它采用统一的信息组织的方法即分类,对同一类型的信息进行分类,且每一类信息都可以进行新建(Add)、查看(View)、编辑(Edit)和删除(Delete)四种不同的操作。除了使用分类的方式组织信息以外,又采用了统一的用户和权限管理对信息的使用进行控制,即构成了一个完整的信息组织和管理的体系。内容管理系统是企业信息化建设和电子政务的新宠,也是一个相对较新的市场.
简单来说,就是建的房子的模板,可能是欧式,可能是中式,也可能是小平房为什么要知道cms?
使用的cms可能会出现漏洞,不同的cms有对应的不同的漏洞,知道了目标网站用的是什么cms,再去网上收集这个cms爆过的漏洞,就可以实现漏洞的利用
简单来说,知道了这个小区的的模板房是什么模式的,再去找其对应的之前爆过的漏洞,然后进行利用
-
寻找漏洞
直接百度drupal漏洞,就可以看到其爆过的漏洞
那我们怎么利用这些漏洞呢?
-
使用Metasploit
其是目前世界上领先的渗透测试工具,也是信息安全与渗透测试领域最大的开源项目之一。
【P3】最强渗透工具 - metasploit(安装配置及使用教程详解)-优快云博客
简单来说,我们可以利用Metasploit来**查找漏洞,利用**漏洞
-
使用Metasploit查找漏洞
kali是自带Metasploit的
打开Metasploit
命令:
msfconsole
再查找drupal的相关漏洞
命令:
search Drupal
-
这里我们使用第二个
命令:
```shell
use 2
```
-
使用Metasploit利用漏洞
-
看需要什么必要参数
命令:
show missing
-
需要配置目标ip地址
命令:
set rhosts 192.168.2.130
-
运行
命令:
run
这时候我们就利用了drupal的漏洞,进入到了靶机的系统
先shell
shell
再利用python来反弹一个shell,得到可交互的shell
命令:
python -c ‘import pty;pty.spawn(“/bin/bash”)’
这个命令利用了pty模块的功能,该模块是Python标准库的一部分,提供了对伪终端(pseudo-terminal)的支持。伪终端允许程序模拟终端交互,就像在命令行界面中操作一样。
1.导入pty模块:首先,它导入pty模块,这是使用伪终端功能的第一步。
2.使用pty.spawn()函数:这个函数用于创建一个子进程,并将该子进程与一个伪终端关联起来。在这个例子中,子进程是执行/bin/bash命令的bash shell。
3.创建交互式shell:通过pty.spawn()函数,可以在Python程序中启动一个交互式shell,这样你就可以在Python脚本中执行bash命令,就像在终端中直接输入命令一样。
-
三、获取flag
-
flag1
得到shell了,先ls,查看一些文件发现有flag1.txt
命令:
cat flag1.txt
得到了flag1,其给的之后的线索是去找cms的配置文件
-
flag2
不知道drupal的配置文件路径啊?直接网上搜(这就是知道cms的好处)
得到配置文件的路径:sites/default/settings.php
cat查看settings.php文件
发现flag2和数据库的账号密码:
用户名:dbuser
密码:R0ck3t
-
flag3
居然知道了数据库的账号密码,登入一下
命令:
mysql -u dbuser -p R0ck3t
注意:进入了数据库之后,就需要使用数据库的相对于的语句,mysql数据库的查询语句需要在后面加";"号
1.查看数据库
show databases;
发现有两个数据库:
第一个数据库information_schema
其是MySQL自带的,它提供了访问数据库元数据的方式。元数据是关于数据的数据,如数据库名或表名,列的数据类型,或访问权限等,通过information_schema我们可以窥透整个MySQL实例的运行情况。
简单来说,就是储存了一些数据库的基础信息
具体可以看这篇文章:mysql中information_schema说明 - 一叶扁舟_test - 博客园
第二个数据库drupaldb,很显然,这个数据库是我们这个靶站cms相关的一个数据库,我们可以先看看drupaldb
2.先需要使用drupaldb
use drupaldb;
3.再查看drupaldb
show tables;
发现有个用户表,查看一下
命令:
select * from users;
可以得到两个用户的用户名和密码,一个是admin的,一个是Fred的。
这里密码明显是经过加密的,无法直接改密码来获取admin用户的权限。
所以我们接下来就有两个思路:
要找到这个加密算法是什么,如果是弱加密算法,可以试试直接破译。然后登入
还有一种方法:因为它加密密码肯定是有一套源码的,而且大概率是存储在本机(靶机)上,如果我们可以直接找它加密密码的脚本,利用这个脚本,来解密或者更改密码。
我们试试第二种方法
先退出数据库(脚本肯定不会存在数据库里面),我们需要去靶机的文件目录查找看看
先搜索一下以password命名相关的文件(这是一个推测,我们猜加密脚本的命名可能带有password字段啥的)
命令:
find / -name password*
可以看到var/www/scripts下有个.sh的脚本。看名字是猜测是以hash加密密码的脚本
尝试直接运行脚本
发现,我们可以利用这个脚本是可以加密一个我们已知的密码,如"mynewpassword"
那有什么用呢?
如果我们加密一个我们已知的密码,然后再进入数据库更改admin用户的密码,是不是就可以达到登入admin用户的目的
先得到一个加密后的密码:123456
得到123456的加密后的值了,这时候我们再利用这个加密后的值,替换掉数据库中users的密码,就可以实现登入这个用户了
这个时候我们再进入数据库,去更改admin的密码
mysql -u dbuser -p R0ck3t
进入数据库后:
update users set pass='加密后的密码' where name='admin';
这个时候,admin的密码就变成123456了(在数据库中还是以加密值的形式存储着)
知道了admin的账户和密码,登入网页看看
登入进去,找到了flag3
-
flag4
看flag4的提示信息,翻译过来就是:
特殊的权限会帮助我们找到passwd,但是需将用到 -exec 命令来找出隐藏的信息
按照意思来,我们需要找到有特殊权限的用户,并且尝试着提权
这时候我们查看一下靶机有哪些的用户(这个用户和数据库里的admin/Fred不是一个概念的,我们要找的是靶机、也就是Linux系统的用户,刚刚数据库里的是drupal这个网站的用户)
那我们去哪里找有特殊权限的用户呢?
可以去看看/etc/passwd文件
其是Linux系统的用户配置文件,存储了系统中所有用户的基本信息,并且所有用户都可以对此文件执行读®操作。
发现有名字为flag4的用户
知道了用户名,其它什么信息也没有,结合flag2的提示,我们试试爆破密码。可以使用hydra工具来爆破密码
由于主机开放了22ssh端口,使用ssh连接
命令:
hydra -l flag4 -P /usr/share/john/password.lst 192.168.2.130 ssh
-l 指定用户名
-P 指定要爆破的密码所需要的字典,这里我们用的是hydra自带的字典
192.168.2.130 ssh 我们需要使用ssh连接靶机,然后爆破密码
我们通过爆破,得到了flag4用户的密码:orange
这个时候,我们有了靶机的用户名和其对于的密码,是不是就可以光明正大的登入靶机了(不再像之前我们用msf工具利用cms漏洞登入靶机获取shell)
如何登入呢?之前我们扫描端口的时候,发现靶机是不是开放了ssh连接,所以,我们可以通过ssh连接登入靶机
使用ssh连接靶机:
ssh flag@192.168.2.130
含义:SSH远程控制服务器作为中介的跳板机,建立本地计算机与特定目标网站之间的加密连接。
然后输入密码orange
连接上后,我们先ls查看当前目录文件
发现flag4.txt,查看flag4.txt,得到flag4
-
thefinalflag
看flag4的提示信息,说到我们能不能以root权限的方法再来一遍?
其实就是提示我们要进行提权或者越权,这时候我们可以用到suid提权
SUID概念:命令一旦具有了SUID标志,这个命令在执行的过程的会短暂的获得root权限。
首先,我们先看我们可以使用那些提权命令
使用find命令查找拥有特殊权限SUID的命令:
find / -perm -4000
发现find指令可以使用SUID命令,可以利用其进行提权
find -name flag4.txt -exec /bin/bash -p \;
这个命令是用于在当前目录及其子录中查找名为 “flag4.txt” 的文件,并且在找到每个文件后执行 /bin/bash -p 命令。
find:这是一个用于在文件系统中搜索文件和目录的命令。-name flag4.txt:这是 find 命令的选项之一,用于指定要搜索的文件名为 “flag4.txt”。
-exec:这也是 find 命令的选项之一,它允许在找到每个文件后执行指定的命令。
/bin/bash -p:这是要执行的命令。/bin/bash 是一个常见的 Unix/Linux shell,而 -p 选项表示以特权(即以 root 用户)运行 bash。这将打开一个交互式 shell 环境,具有 root 用户权限。
所以,当该命令找到名为 “flag4.txt” 的文件时,它将执行 /bin/bash -p 命令,从而打开一个特权 shell 环境。
使用提权命令,查看我们当前的用户,发现是root用户的权限
进入root目录
ls,找到thefinalflag.txt