小白之vulhub靶机之旅--第一篇
2022-7-25 00:3:6 Author: 白帽子(查看原文) 阅读量:15 收藏

声明:Tide安全团队原创文章,转载请声明出处!文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担!

最近小白除了在搞PHP代码审计外,还在不断的对开源的漏洞靶机进行复现,虽说靶机,相比较真实的渗透测试环境还有一定的差别,但是还是对自己有所提高,毕竟渗透的思路都是一样的,信息收集--漏洞探测--漏洞发现--漏洞验证--撰写渗透测试报告。今天小白就以Vulhub来演示一下这个漏洞的利用,这个过程也会掺和着漏洞原理的分析。这个漏洞靶机我也在freebuff上面看到一些大佬写的文章,小白在这里如果有什么不足之处,还望大佬们指教。话不多说,我们先来搭建一下漏洞靶机环境。特别声明一下:此演示仅供阅读者学习,切勿非法使用,造成不良影响均自己承担。

       小白我是安装在了我的服务器上面,但是小白还是建议自己搭建虚机。这个靶机是依赖docker环境,Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。小白我一般搭建测试环境都是用docker搭建的。在这里docker环境我就不罗嗦过程了,直接下载漏洞靶机,下载地址:git clone https://github.com/vulhub/vulhub.git,服务器是乌班图的系统。下载完毕后,我们看一下下载的目录:

这样我们就成功的把漏洞靶机下载完毕,下面我们怎么启动,首先我们要先启动docker:

1、/etc/init.d/docker start   //启动docker;

2、/etc/init.d/docker status  //查看docker是否启动;

出现下面的界面,就说明docker启动起来了。

开山篇:

主要复现一下常见的漏洞,比如struts2远程代码执行漏洞、php、phpmysadmin、thinkphp、redis、rsync。

首先我们先用docker来编译一下漏洞环境:

首先我们先进入到struts2目录中的s2-016目录中(声明一点,打点地方是为了避免服务器泄漏出去):


执行编译命令:

docker-compose up -d  //会自动的查找目录下的配置文件,如果之前编译过,就不会重新编译。小白我之前编译过此漏洞环境。

漏洞环境编译成功后,我们访问本地的http://localhost:8080/index.action:

我们将上述的URL放入到检测工具中发现存在struts2远程代码执行漏洞:

远程执行命令:

上传jsp脚本:

至于提权后期操作,小白就不演示了,有兴趣的可以去本地搭建环境测试一下。小白之所以以这个016这个漏洞型号为演示,主要是016和046、045危害性特大,一般收到的威胁也最大,只要是存在这个漏洞的网站,一般都是system权限(jsp)。影响版本为Struts 2.0.0 - Struts 2.3.15。小白在给客户做渗透测试的过程中也经常碰到这种漏洞,切勿非法使用。

当漏洞演示完毕后,记得将服务停止,否则测试其它的环境会提示某个端口被占用:

docker-compose down   //停止当前的服务状态,通俗的讲就是把漏洞环境关闭,下次用的时候再启动就可以。


进入到thinkphp目录中发现有4个漏洞测试目录,我们先用5.0.23-rce远程代码执行漏洞,这个漏洞主要是在版本5中,由于没有正确处理控制器名,导致在网站没有开启强制路由的情况下可以执行任意方法,从而导致远程命令执行漏洞。

小白通过代码审计可以发现漏洞主要出现在 ThinkPHPRequest 类的 method 方法中,存在漏洞的位置在thinkphp/library/think/Request.php中。注明:Request 类可以实现对 HTTP 请求的一些设置,其中成员方法 method 用来获取当前请求类型。

进入到5.0.23-rce目录下进行编译环境:

编译成功后,我们访问一下http://localhost:8080

我们来测试一下远程执行命令:

我们通过Post进行请求执行远程命令:

写入一句话,显示phpinfo的信息:

如果了解windows搭建环境测试的话,可以去小白的知乎上面去看看。https://zhuanlan.zhihu.com/p/55402762

进入漏洞环境目录进行编译:

在这一步小白遇到了一个问题,我的服务器貌似不能访问了,想了想估计是搭建漏洞靶机的问题,哎,小白只好将靶机转移到虚机上面。

我们先来通过代码审计来看一下详情,小白就截取一些代码,其它的就不截取了:

我们看一下Index.php55-63行代码,其中If语句是用来判断文件被包含的文件是否符合要求,如果符合就直接include包含。然后退出:

1、是否为空 ;

2、是否为字符串;

3、是否为index开头的,代码规定不能以index开头;

4、是否在$target_blacklist中,代码中规定不能在这个数组中;

5、Core类的checkPageValidity方法判断;

其实通过代码我们可以得知存在文件包含漏洞,前三个最为明显是包含隐患,我们来看一下第4个判断条件,我们去跟踪一下$target_blacklist数组,在代码中我们可以看到$target_blacklist数组中只有import.php和export.php。我们回头再看一下这个判断条件,只要target的值不为这两个文件就直接进入到第5个判断。

我们来看一下第5个条件Core类的checkPageValidity方法判断:

我们跟踪一下checkPageValidity这个函数,在文件libraries/classes/Core.php中,看一下代码if语句,如果$whitelist为空,就会引用静态声明的$goto_whitelist;如果$page未定义或者不是字符型就会返回false;如果$page是$whitelist数组的某个值就会返回true;如果$_page是$whitelist数组的某个值就会返回true;$_page经过urlecode进行解码后如果存在$whitelist数组中的某个值就会返回true,否则就会返回false。

我们在跟踪一下$goto_whilelist,代码主要是规定了被包含的文件名,说白了就是个白名单。

后头在看一下checkPageValidity函数中的判断代码,我们来看第三个if判断语句,前面已经说过了当$page是$whitelist中的某个值,就会返回true,后面可能程序员知道要跟一些东东,所以又做出了判断,$_page为 以?分割符分割的,然后取出前面的字符串再判断值是否存在于$goto_whilelist某个数组中。这样的话后面带参数也会被包含进来。

后面又将$page参数用urlencode解码再进行以?分割取出前面的值做判断。

再看一下后面的代码是怎么写的,我们发现后面又将$page参数进行urlencode解码,解码后再进行以?分隔符分割取出前面的值做判断。所以我们根据白名单构造一个空白的页面:

target=db_datadict.php%253f/../../../../../../../../etc/passwd

%253f是二次进行的url编码,解码后的是?,在include包含文件时,斜杠前面的部分包括问号会被当作文件名,这样就可以成功的包含文件。


进入/opt/vulhub/tomcat/tomcat8,进行编译。

前期我们通过爆破一下后台登陆用户以及密码,tomcat:tomcat:

这个tomcat页面一般部署网站以后就会直接删除或者做一些目录限制,下面我们通过上传war包来获取服务器的webshell,大家可能会有疑问,为何部署正常的jsp脚本,而是war包?通过百度查询得到了答案:

1、war包是用来进行Web开发时一个网站项目下的所有代码,包括前台HTML/CSS/JS代码,以及后台JavaWeb的代码。

2、开发人员开发完毕时,就会将源码打包给测试人员测试,测试完后若要发布则也会打包成War包进行发布。War包

可以放在Tomcat下的webapps或word目录,当Tomcat服务器启动时,War包即会随之解压源代码来进行自动部署。

首先说一下制作war包的方法:

1、首先要确定电脑上需要安装jdk环境;

2、将jsp木马放在JDK_HOME/bin目录下;

3、在cmd命令下执行制作命令:cmd进入JDK_HOME/bin目录,运行"jar cvf shell.war xx.jsp",生成shell.war小马文件;(需要管理员权限)


找到上传war包的地址:http://192.168.106.129:8080/manager/html/list


成功上传jsp脚本木马(至于获取webshell,有兴趣的可以去本地搭环境玩一玩):

除了可以利用上传war包来获取shell,还可以利用MSF中的exploit/multi/http/tomcat_mgr_upload模块来获取shell:

创建一个隧道,可以远程执行命令:

创建uid为0的用户,这样我们就可以通过我们创建的用户来登陆靶机,然后进行抓取密码进行提权:

可见在部署网站的时候一定要做好限制目录访问的权限以及上线前的测试。

进入到漏洞靶机的目录:/opt/vulhub/zabbix/CVE-2016-10134,然后进行编译。

zabbix是一个基于web界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案,zabbix能监视各种网络参数,保证服务器系统的安全运营;并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题,这个监控系统在企业中最为常见。除了这个漏洞外,貌似小白还听说听说可以反弹端口。

输入一下测试代码,看一下是否存在此漏洞:

jsrpc.php?type=9&method=screen.get&timestamp=1471403798083&pageFile=history.php&profileIdx=web.item.graph&profileIdx2=1+or+updatexml(1,md5(0x11),1)+or+1=1)%23&updateProfile=true&period=3600&stime=20160817050632&resourcetype=17

利用测试工具测试一下是否存在漏洞:

获取到密码的MD5值后,通过破解可以得到密码明文:

既然有SQL注入,那我们不妨通过抓包用sqlmap工具来测试一下漏洞是否存在:

经过测试发现,确实存在SQL注入漏洞,数据为Mysql数据库:


今天就先到这吧,下次再和大家分享一下这个靶机的其它的漏洞,大家如果觉得还可以的话,自己可以去本地搭建一下玩一下,可以更多的了解漏洞,建议通过代码或者漏洞原理来做靶机的漏洞复现,这样效果会更好。

E

N

D

guān

zhù

men

Tide安全团队正式成立于2019年1月是新潮信息旗下以互联网攻防技术研究为目标的安全团队,团队致力于分享高质量原创文章、开源安全工具、交流安全技术,研究方向覆盖网络攻防、Web安全、移动终端、安全开发、物联网/工控安全/AI安全等多个领域。

对安全感兴趣的小伙伴可以关注团队官网: http://www.TideSec.com 或长按二维码关注公众号:


文章来源: http://mp.weixin.qq.com/s?__biz=MzAwMDQwNTE5MA==&mid=2650246199&idx=2&sn=15397e01a9bcb51d385918565ecaee31&chksm=82ea579eb59dde8863940e48c8970b61483cd9f7238e3ed959ffa5d1b8be4e6c4d2e1743f8dd#rd
如有侵权请联系:admin#unsafe.sh