2.17 通过文件上传漏洞渗透某Windows 2012服务器并提权
一般的CMS系统都会有文件上传功能。目前绝大多数流行的CMS系统,都会对文件上传有严格的限制,也即过滤,对所有不安全的文件都会进行过滤,禁止上传。但是,在一些公司定制开发的系统中,尤其是高校、政府和个人站点中,这种文件上传漏洞仍然存在。
2.17.1 初步渗透
1.对目标端口进行扫描
直接进行端口扫描。选择全TCP端口扫描,如图2-164所示,可以判断该服务器为Windows服务器,服务器开放了21、80、3306、3389等端口。
图2-164 扫描服务器开放端口
2.在浏览器中对该IP地址进行访问
对一些敏感端口进行访问,例如http://115.159.**.***:70、http://115.159.**.***/、http://115.159.**.***:5985/等。在本案例中,80端口开放了Web服务,且存在文件目录信息泄露,如图2-165所示。
图2-165 存在文件目录信息泄露
3.对存在的Web目录逐个进行访问测试
对该IP地址下存在的Web目录逐个进行访问,具体如下。
http://115.159.**.***/7z~/ http://115.159.**.***/Discuz_X3.2_SC_GBK/ http://115.159.**.***/ExtJS/ http://115.159.**.***/blog/portal.ejf http://115.159.**.***/ext-4.2.1/ http://115.159.**.***/ext-6.0.0/ http://115.159.**.***/member/ http://115.159.**.***/mywebsite/ http://115.159.**.***/phpMyAdmin/ http://115.159.**.***/phpdig-1.8.8/ http://115.159.**.***/phpweb/ http://115.159.**.***/touch-2.4.2/examples/ http://115.159.**.***/shop/
对可以利用的目录进行筛选,其中http://115.159.**.***/shop/明显为后台管理页面,如图2-166所示。对这种存在后台的目录,可以先进行一些常见的弱口令登录测试,例如admin/admin、admin/admin888、admin/123456登录,对没有机制码验证的后台还可以进行暴力破解。
4.后台绕过漏洞
访问地址http://115.159.**.***/shop/admin/,直接获取后台的部分管理权限,说明系统对后台权限限制不严格,如图2-167所示,未进行授权处理。单击“增加商品”选项,在输入框中输入任意内容,然后直接选择一个一句话后门PHP文件上传,结果上传成功。
图2-167 直接上传WebShell
2.17.2 获取WebShell
1.寻找WebShell地址
到前台查看最新上传的商品信息,找到刚才添加的“111”,如图2-168所示,上传的伪造图片文件未成功显示。单击右键,在新窗口中打开该图片,成功获取该WebShell的地址http://115.159.**.***/shop/admin/upimages/1.php,如图2-169所示。
图2-168 寻找新增的商品信息
图2-169 获取WebShell地址
2.收集和查看服务器上的敏感信息
对获取的WebShell地址使用“中国菜刀”一句话后门软件进行管理,然后对服务器上的文件进行查看,寻找和收集有用的敏感信息。如图2-170所示,查看Discuz!论坛数据库配置文件信息。
图2-170 收集数据库配置信息
3.获取数据库root账号密码
使用服务器上的phpMyAdmin登录,如图2-171所示,成功登录该MySQL数据库服务器。获取数据库root账号和密码的目的是在无法提权的情况下尝试进行MySQL数据库提权。
图2-171 登录MySQL数据库服务器
2.17.3 使用WebShell进行提权并登录服务器
1.使用WebShell进行提权
在WebShell中打开终端管理界面,如图2-172所示,使用“whoami”、“netstat-an | find "3389"”命令分别查看系统目前运行的权限和3389端口开放情况,结果显示为系统最高权限,且开放了3389端口。
图2-172 查看3389端口和系统当前用户权限
使用命令“net user king$ temp2005! */add”、“net localgroup administrators king$/add”,尝试添加管理员用户。如图2-173所示,成功添加管理员账号。
图2-173 添加管理员账号
2.登录远程终端
在命令行下运行mstsc.exe,打开远程桌面登录窗口,输入IP地址及刚才添加的用户名和密码,如图2-174所示,成功登录系统。
图2-174 成功登录远程终端
2.17.4 总结与思考
获取FTP账号和密码。访问目录C:\Users\Administrator\AppData\Roaming\FileZilla Server\,打开FileZilla配置文件recentserver.xml,如图2-175所示,获取其adminstrator账号的密码,经过Base64解密,密码为“NXNZVhHmc4q”。
图2-175 获取FTP账号和密码
在使用Apache架构搭建的PHP环境下,Windows提权极其容易,因为默认权限绝大部分都是system权限,所以可以直接获取服务器权限。因此,如果采用该架构,必须对文件目录信息泄露进行处理。
一些CMS备份文件也可以利用。在本例中,如果Discuz!论坛进行了数据库备份,通过文件目录泄露漏洞可以直接下载数据库。DedeCms等也存在备份文件。攻击者在获取数据库备份文件后,通过还原数据库,可以获取管理员账号和密码,进而通过CMS漏洞来获取WebShell。
Windows 2012服务器获取密码难度加大。在本例中使用wce等工具无法直接获取明文密码。尽管通过管理员权限运行cmd命令后获取了本机的Hash值,但以“AA3D”开头的Hash值通常无法破解,如图2-176所示。
图2-176 获取密码Hash值