有一朋友公司开发了一套基于 PHP 开发的预约 api 端口服务,他想知道网站是否安全, 后找我给他们做一次检测,就有了以下内容。 此次渗透测试涉及到的内容不是很多,主要是告诉我们在任何意思渗透测试中,我们都要抱定信念,即使遇到困难我们也能克服。 注:为了保密,目标域名使用 test.com 替代。 首先进行了信息收集目标域名:test.com IP: xxx.xxx.xxx.xxx 软件环境:windows+apache+mysql 访问 test.xxx
直接打开就是后台页面,输入账号密码(demo 站源码,里边提供了账号密码和数据库)、登入进去
一个标准的企业站的功能,有新闻维护、会员编辑的功能。渗透测试的最终目的是拿到目标权限,所以获取一个 webshell 是我们最先要突破的地方。 首先大致浏览了下后台功能,为了得到权限,我们可以通过常规的手段,后台的上传,命令执行,文件包含等手段,最简单有效直接的就是文件上传。
直接上传 php 文件提示文件格式不允许。
首先看下上传地址:
使用的是百度的 ueditor2014 的编辑器,这编辑器没有什么可利用的漏洞,不过可以看下他的配置有没有疏忽的地方。
基本是官方默认配置,放弃此路,继续翻后台,找到一个数据备份的地方,
数据备份的功能 asp 中经常遇到,php 的网站里边一些成型的 cms 里边也有这功能,不过都是经历过蹂躏太多次,安全性都不错,这套系统是他们自己开发的,所以这些地方有可能会存在安全漏洞。四个基本功能,备份、还原、下载、删除、
测试了下,功能没有做什么限制,都可以使用。不过这个备份功能我们利用的地方有限,注意到一个事情,直接下载、删除,都会用到文件名,xxxx.sql.gz 难道是文件直接存在的?
这套程序是给予 yii 框架开发的,而且目标站做了伪静态,所以还原之后应该是 url:
看到这个地方就想到会不会存在一个任意下载的漏洞?
打开源码找到 databack 控制器看下源码
直接通过 download 方法去下载提交过来的 file 参数的文件名,文件存在 config['path ']
download 方法是个下载文件的方法,没有做任何过滤
本机搭建下测试下,是否存在
的确有生成的文件,那么我们可以测试是否存在任意下载漏洞,直接下载网站的配置文件
测试成功:(同时还存在一个任意删除漏洞,不过此处用处不大,有些 cms 中可能会存在重装漏洞,删除 install.lock 文件)
人品不错是 root、只要找到外联或者 phpmyadmin 登录进去就能 getshell、成功离赢取白富美又近了一步。 对于找 phpmyadmin 这种事情,主要方法是扫目录, 个人推荐,如果是这种单站的情况下,直接访问 IP,或者扫描端口(有些主机系统,例如护卫神会直接开一个 8889 之类的端口作为 phpmyadmin 的登录的地方,) 直接访问 IP //XXX.XXX.XXX.XXX
发现是 wamp 的集成环境,看到 tools 里边有 phpinfo()可以得到物理路劲,方便后期导出shell。
接着找 phpmyadmin XXX.XXX.XXX.XXX/phpmyadmin/
存在不过访问不了,因为 WampServer 只允许本地访问,phpmyadmin,放弃了。
峰回路转: 访问 IP 的时候,发现一共有三个域名,其中一个为 test.test.com 看样子应该是测试站
是个测试站。而且存在遍历目录的漏洞,猜测下路径
把其余的几个文件都下载下来,分析了下发现是个调试用户注册的网站,其中存在一个注入漏洞
构造 url:
提交数据成功 <
在次访问:
提示用户已经存在, 因为偷懒扔到 sqlmap 里边发现,不能 getshell,只能手工去搞。这种情况下,目前有效的方法是执行 sql 语句进行 outfile 导出文件。
通常的方法是
尝试多次失败。直接导出数据尝试
看看是否导出成功
注意这个地方文件大小只有 200k左右访问 猜测下应该是注入的当前表数据,因为自己使用的是 dumpfile,所以只有几条数据(注意后期研究 dumpfile 和 intofile 的区别),主要是不知道表有多少内容。
直接导出整个表
当前表有 2m 左右 下载回来
是纯文本形式。binggo,用户名没有做限制,可以直接写入 shell 尝试、准备写入 shell
例如插入
备份 shell
备份成功
然后访问
发现访问可以,但是 shell 总是连不上,shell 密码 为 hello+admin 拼接之后的 md5 的值,但是总是连接不上, 通过任意下载漏洞下载 123001.php 文件
发现里边有 shell 密码那里空格“ 21232f297a57a5a743894a0e4a801fc3 ”连接 shell,连接成功
总结: 本次渗透测试还有小插曲,就是截断的时候因为是直接插入到 user 表中,而且没有其他的方式能够修改 user 表内容,一旦插错网站就挂了,所以一定要谨慎处理,尤其是不要乱插注释型的。要不然就没办法截断,尤其是注意引号转义的问题。还有最后一步的 shell 连接,要处理好空格的问题,中间疏忽掉了,走了两步弯路,通过任意下载直接复制粘贴密码,最终突破了。
本文为网络安全技术研究记录,文中技术研究环境为本地搭建或经过目标主体授权测试研究,内容已去除关键敏感信息和代码,以防止被恶意利用。文章内提及的漏洞均已修复,在挖掘、提交相关漏洞的过程中,应严格遵守相关法律法规。