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,完结散花。

相关推荐
R.lin12 分钟前
Java 8日期时间API完全指南
java·开发语言·python
毕设源码-赖学姐18 分钟前
【开题答辩全过程】以 高校教学质量监控平台为例,包含答辩的问题和答案
java·eclipse
高山上有一只小老虎25 分钟前
翻之矩阵中的行
java·算法
火钳游侠39 分钟前
java单行注释,多行注释,文档注释
java·开发语言
曼巴UE542 分钟前
UE FString, FName ,FText 三者转换,再次学习,官方文档理解
服务器·前端·javascript
wanhengidc1 小时前
云手机的存储空间可以灵活扩展吗?
运维·服务器·科技·智能手机·云计算
code bean1 小时前
【CMake】为什么需要清理 CMake 缓存文件?深入理解 CMake 生成器切换机制
java·spring·缓存
selt7911 小时前
Redisson之RedissonLock源码完全解析
android·java·javascript
Danileaf_Guo1 小时前
256台H100服务器的RoCEv2无损与全互联算力网络建设方案
运维·服务器·网络
RestCloud1 小时前
智能制造的底层基建:iPaaS 如何统一 ERP、MES 与 WMS 的数据流
java·wms·erp·数据传输·ipaas·mes·集成平台