HTB-Forge

news2024/10/5 18:32:58

HTB-Forge

  • 信息收集
    • 80端口
  • 立足
  • user -> root

请添加图片描述

信息收集

在这里插入图片描述
在这里插入图片描述

80端口

在这里插入图片描述
试试上传图片看看有什么限制。
在这里插入图片描述

jpg上传成功,并且会给一个随机的文件名存储图片,过了一阵子图片就会被清除。
在这里插入图片描述
上传phpinfo后访问界面出现报错。
在这里插入图片描述
在这里插入图片描述
看来没有执行上传的PHP代码,对目录进行枚举。
在这里插入图片描述

在这里插入图片描述
子网枚举。

在这里插入图片描述

在这里插入图片描述
貌似没办法绕过对localhost的检测。

在这里插入图片描述
看到这种情况就会联想到SSRF。先分析一下现在的情况:

  • 一个图片上传网站,不支持php代码,暂不知道语言。
  • 一个本地才能访问的子域admin.forge.htb,无法伪造访问IP。
  • 一个无法访问的ftp服务。

所以要解决的问题:

  • 确认文件上传网站的语言。
  • 寻找SSRF的入口。

先看能不能判断是什么语言编写的。
在这里插入图片描述
在这里插入图片描述
可能是python,只是猜测。再看看问题2,入口在哪里。然后我发现这个居然是可以点击的。

upload from local
upload from url

在这里插入图片描述
那第一件事就是去访问一下21端口。
在这里插入图片描述
只允许http和https?那我去看看http://admin.forge.htb总可以吧。
在这里插入图片描述
想用http访问21端口,结果也在黑名单里。
在这里插入图片描述
当我使用http://127.1:21会出现python的报错,证明这个服务是python编写。
在这里插入图片描述
当python收到空的header/body就会出现此错误。不过没关系我们找到了替代127.0.0.1的白名单。接下来就是对协议的限制。但是感觉没有办法绕过,只能看通过其他手段读取FTP服务。
在这里插入图片描述

OK,整理一下:

  • 前提:存在SSRF
  • 目标:读取21端口和admin.forge.htb
  • 已有条件:127.1:21绕过127.0.0.1黑名单、目标能够访问本地并且保持kee-alive状态,我们可以输入
  • 缺失部分:怎么让其使用ftp

到这我倒是想到了一个方法,但是有一个前提,存在一个脚本会检查我们的输入是否是http/https,通过后在发给python的模板渲染,如果慢慢读取找到网站的url完整路径,还有参数,那么是否可以让绕过协议检测,比如http://forge.htb/upload?param=ftp://127.1:21

请添加图片描述
curl uploads会出现重定向
在这里插入图片描述
尝试修改重定向位置利用重定向到到主界面去。新建一个文件内容如下:
HTTP/1.1 301 MOVED PERMANENTLY

Server: Apache/2.4.41 (Ubuntu)
Location: http://forge.htb/
Content-Type: text/html; charset=utf-8

将redirect的输出作为nc的输入。连接上后ctrl+c中断就能看到上传成功。
在这里插入图片描述

curl生成的网站就可以看到forge.htb主页代码了。
在这里插入图片描述
不过试了半天还是找不到办法绕过协议,还有一个admin的子域名没看。去看看。

在这里插入图片描述
在这个管理员界面还有一个超链接指向/announcements,重定向到/announcements去看看内容。
在这里插入图片描述

  • An internal ftp server has been setup with credentials as user:heightofsecurity123!
  • The /upload endpoint now supports ftp, ftps, http and https protocols for uploading from url.
  • The /upload endpoint has been configured for easy scripting of uploads, and for uploading an image, one can simply pass a url with ?u=<url>.

我们知道ftp凭证user:heightofsecurity123!、知道upload页面支持的协议、知道参数是?u=,这下就好办了。
在这里插入图片描述

http://admin.forge.htb/upload?u=ftp://user:heightofsecurity123!@127.0.0.1:21

在这里插入图片描述
ftp服务器的位置貌似就在某个用户的家目录,也可能是诱饵。先试试吧。

Location: http://admin.forge.htb/upload?u=ftp://user:heightofsecurity123!@127.0.0.1:21/.ssh/

运气不错
在这里插入图片描述

立足

在这里插入图片描述
前面我们知道有一个凭证:user:heightofsecurity123!,用户是user。

在这里插入图片描述

user -> root

在这里插入图片描述
文件内容如下:

#!/usr/bin/env python3
import socket
import random
import subprocess
import pdb

port = random.randint(1025, 65535)	 #生成大于等于1025小于65535的数作为port值

try:
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 	#创建套接字,使用IPv4和TCP
    sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)	#level是SOL_SOCKET,为了在套接字级别上设置选项
    															#SO_REUSEADDR会启动监听服务器并绑定与之相关的端口
    sock.bind(('127.0.0.1', port))								#绑定本地IP与生成的port到socket上
    sock.listen(1)												#等待的个数
    print(f'Listening on localhost:{port}')						#打印一些信息
    (clientsock, addr) = sock.accept()							#建立客户机的连接,返回值是一个新的socket和IP,port
    clientsock.send(b'Enter the secret passsword: ')			#发送数据
    if clientsock.recv(1024).strip().decode() != 'secretadminpassword':	#接收数据并移除空格后对其解码后的值是不是secretadminpassword
        clientsock.send(b'Wrong password!\n')					#不是就发送Wrong password!
    else:
        clientsock.send(b'Welcome admin!\n')					#是就发送Welcome admin!
        while True:												#开始无线循环
            clientsock.send(b'\nWhat do you wanna do: \n')		#发送admin要做的列表
            clientsock.send(b'[1] View processes\n')
            clientsock.send(b'[2] View free memory\n')
            clientsock.send(b'[3] View listening sockets\n')
            clientsock.send(b'[4] Quit\n')
            option = int(clientsock.recv(1024).strip())
            if option == 1:
                clientsock.send(subprocess.getoutput('ps aux').encode())	#以下皆为根据选择做出对应的事情
            elif option == 2:
                clientsock.send(subprocess.getoutput('df').encode())
            elif option == 3:
                clientsock.send(subprocess.getoutput('ss -lnt').encode())
            elif option == 4:
                clientsock.send(b'Bye\n')
                break
except Exception as e:														#一个处理错误的办法,虽然pdb可以更好处理错误,但是会执行我们输入的命令
    print(e)
    pdb.post_mortem(e.__traceback__)
finally:
    quit()

这是一个socket的服务端应用,需要我们写一个客户端进行socket通信。简易的socket客户端代码如下:

import socket

host = '127.0.0.1'          
port = int(input("port: ")) #Server info

s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect((host,port))      #Connect Server

while True:
    print(s.recv(1024).decode('utf-8')) #Print Server data
    data = input("postdata: ")          #Input data
    s.send(bytes(data,'utf-8'))         #Send data to Server
s.close()

在这里插入图片描述
也可以通过nc来实现,就不用写一个简单的socket客户端了。
在这里插入图片描述

代码里面对异常的处理是用pdb,我在客户端ctrl+c强制中断进程引发了处理错误的方法pdb,在pdb中输入的命令会被执行。
在这里插入图片描述
在这里插入图片描述
接下来就很明确了。

在这里插入图片描述

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

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

相关文章

第43天-DP-第九章 ● 139.单词拆分 ● 关于多重背包,你该了解这些! ● 背包问题总结篇!

文章目录 1. 单词拆分2.多重背包3. 背包总结 1. 单词拆分 s class Solution { public:bool wordBreak(string s, vector<string>& wordDict) {unordered_set<string> wordSet(wordDict.begin(), wordDict.end());// 1. dp[i] 为true代表 可以拆分为一个或者多…

PySyft框架

openmined社区开源的pysyft框架可以提供安全的联邦学习&#xff0c;有助于解决基于“不可见数据”的统计分析与建模开发。在PySyft中&#xff0c;syft是重要的张量&#xff0c;通过建立SyftTensor抽象类来表现张量链的运算或数据状态转换。如图5-7所示&#xff0c;张量链的结构…

3.3 泰勒公式例题分析

例1 写出函数f(x)带有拉格朗日余项的n阶麦克劳林公式 我的答案&#xff1a; 一、信息 1.f(x)的表达式 2.目标求这个f(x)的n阶麦克劳林公式 二、分析 条件1&#xff1a;告诉我f(x)的表达式为我后续带入公式做准备 条件2&#xff1a;告诉我用什么公式和此次求解的方向 三…

【ONE·C++ || 二叉搜索树】

总言 二叉树进阶&#xff1a;主要介绍二叉搜索树相关内容。 文章目录 总言1、基本介绍1.1、什么是二叉搜索树 2、相关实现2.1、基本框架2.1.1、如何构建二叉树单节点2.1.2、如何定义一个二叉搜索树 2.2、非递归实现&#xff1a;插入、查找、删除2.2.1、二叉搜索树插入&#xf…

系统集成项目管理工程师 笔记(第16章:变更管理)

文章目录 16.1.2 项目变更的分类 50416.1.3 项目变更产生的原因 50516.2 变更管理的基本原则 50516.3 变更管理角色职责与工作程序 50616.3.1 角色职责 50716.3.2 工作程序 50716.4.1 变更管理操作要点 511 第16章 变更管理 504 16.1 项目变更的基本概念 504 项目变更是指在信息…

05 KVM虚拟化Linux Bridge环境部署

文章目录 05 KVM虚拟化Linux Bridge环境部署5.1 安装Linux Bridge5.1.1 安装bridge-utils软件包5.1.2 确认安装是否成功 5.2 配置Linux Bridge5.2.1 创建网桥br05.2.2 将物理网卡ens33绑定到Linux Bridge5.2.3 配置ens33的ip5.2.4 为Linux Bridge网桥br0分配ip5.2.4.1 DHCP设置…

JavaWeb04(登录绑值模糊查询功能实现连接数据库)

目录 一.实现登录功能 2.2 制作简易验证码 2.3 完成登录验证 2.4 登录实现 ①连接字符串 private static final String URL"jdbc:oracle:thin:localhost:1521:orcl"; ②加载驱动 OracleDriver private static final String URL"jdbc:oracle:thin:localh…

更好地提问ChatGPT_常用prompt表

对常见的用途&#xff0c;记录该表以便获得ChatGPT更高质量的回复。 类别目的提问方式要点文案写作周报、日报、年终总结本周我做了以下几件事情&#xff1a;出差客户办事处、交流演示、初步数据分析。请帮我写一份周报要点形式列举工作内容。可以说明职位&#xff0c;以便工作…

【五一创作】web小游戏开发:华容道(一)

web小游戏开发:华容道(一) 华容道htmlcss素材原图素材验证游戏关卡华容道 老顾儿时的记忆啊,也是一个经典的益智游戏。 游戏规则就不用再介绍了吧,就是让曹操移动到曹营就算胜利。 CSDN 文盲老顾的博客,https://blog.csdn.net/superrwfei html 经过上次的扫雷,大家应…

JavaScript 内存泄漏

内存的释放流程&#xff1a; 分配内存内存中的读写垃圾回收 对于内存的使用&#xff0c;所有语言基本都是一样的&#xff0c;只是更底层的语言在对于 ”分配内存“ 和 ”使用内存“ 是明确的&#xff0c;但是在高级语言中&#xff08;比如本文的 JS&#xff09;是隐藏了。 JS …

『python爬虫』05. requests模块入门(保姆级图文)

目录 安装requests1. 抓取搜狗搜索内容 requests.get2. 抓取百度翻译数据 requests.post3. 豆瓣电影喜剧榜首爬取4. 关于请求头和关闭request连接总结 欢迎关注 『python爬虫』 专栏&#xff0c;持续更新中 欢迎关注 『python爬虫』 专栏&#xff0c;持续更新中 安装requests …

Spring 中的顺序问题(别迟疑就是你想知道的顺序问题)

Spring 中的一些顺序问题 Spring 中的顺序问题并不是不重要&#xff0c;比如多个 BeanFactoryPostProcessor如何知道先执行哪一个&#xff1b;为什么自定义的 Bean 可以覆盖默认的自动装配的 Bean&#xff1b;AOP 拦截器链中拦截器的顺序是如何确定的等等问题。 相信看完这篇…

(数学知识)试除法判断质数,分解质因数,埃式与线性筛质数

质数 质数是指在大于1的自然数中&#xff0c;除了1和它本身以外不再有其他因数的自然数。 试除法判定质数 你会发现如果说一个数要分成两个数相乘的话&#xff0c;那么这两个数肯定都是成对出现的&#xff0c;有一大一小的相对关系。因此不需要从2遍历到n&#xff0c;循环的…

AI智能课程:第七讲-不会写代码?有chatGPT不用慌

chatGPT辅助自动化测试-常见用途 根据代码写需求 作为python编程小白&#xff0c;如何安装python环境 ### 怎么用python发送http请求 如何在http请求中&#xff0c;请求头带上token值&#xff0c;怎么发送请求 websrvice协议&#xff0c;用python语言基于websrvice发送请求…

【数据结构】第十三站:排序(下)归并排序

文章目录 一、归并排序递归法1.归并排序的基本思想2.归并排序的代码实现 二、归并排序非递归1.可否使用栈来模拟&#xff1f;2.直接改非递归(简化版)3.处理边界之一把梭哈4.处理边界之归并一次拷贝一次 一、归并排序递归法 1.归并排序的基本思想 归并排序&#xff08;MERGE-SO…

网络安全事件调查,如何追溯攻击者的行踪和攻击路径

在当今互联网的世界里&#xff0c;网络安全已成为一个非常重要的话题。随着网络攻击的不断增加&#xff0c;如何保护我们的网络安全已成为一个严峻的挑战。为了防止网络攻击&#xff0c;需要了解攻击者的行踪和攻击路径&#xff0c;以便更好地预防和应对网络攻击。 网络安全事…

SQLite 用C语言开发的原因有哪些?

SQLite 用C语言开发的原因有哪些&#xff1f; 一、引言1.1、SQLite是什么&#xff1f;1.2、SQLite的历史和现状 二、SQLite的优点三、使用C语言开发SQLite的原因3.1、C 语言的优势3.2、对比其他编程语言 四、SQLite与其他数据库的对比4.1、关系型数据库MySQL4.2、关系型数据库P…

Python小姿势 - 线程和进程:

线程和进程&#xff1a; Python里面线程是真正的并行执行&#xff0c;进程是可以并行执行的。 所谓进程&#xff0c;就是操作系统中执行一个程序的独立单元&#xff0c;它是系统进行资源分配和调度的基本单位。一个进程可以创建和撤销另一个进程&#xff0c;同一个进程内可以并…

Vue电商项目--axios二次封装

postman测试接口 刚刚经过postman工具测试&#xff0c;发现接口果然发生了改变。 新的接口为http://gmall-h5-api.atguigu.cn 如果服务器返回的数据code字段200&#xff0c;代表服务器返回数据成功 整个项目&#xff0c;接口前缀都有/api字样 axios二次封装 XmlHttpRequ…

EMC VPLEX VS2 FRU故障备件更换基本流程

本文是针对VPLEX VS2 备件更换流程的详细操作方法&#xff0c;其实VS6也是类似的。 首先要说明一点&#xff0c;EMC VPLEX的任何硬件故障更换都不是直接插拔来完成的&#xff0c;一定要执行脚本要完成更换&#xff0c;本文就是描述如何启动这个脚本和常见的一些问题&#xff0…