靶场部署
下载网址:Vulnerable By Design - Search: DC- ~ VulnHub
tips:强烈建议各位师傅们使用迅雷或idm要不然下载靶场将是一个十分痛苦的环节
之后环境搭建操作步骤一致故此处搭建环境以DC-1为例
将下好的压缩包解压,你就会看到一个.ova文件,用VMware将其打开即可打开过程中可能会遇到如下报错
点击重试即可
tips:将DC-1的配置改为net模式,更改网络适配器需要在虚拟机关闭时才能更改
相关知识
指纹
和人一样网站也有指纹作为自己唯一id,网站指纹是 Web 服务组件在开发时留下的类型、版本等标记信息,包括 Web服务器指纹、Web运用指纹及前端框架指纹等。我们可以通过前端网页和返回一些 HTTP 头信息来判断网站使用的哪些开发框架、服务器、系统,在渗透测试时也可以提供有针对性的测试思路。
这里介绍两个指纹检测工具:
-
whatweb
该工具是kali自带的工具
-
wappalyzer插件
该插件可在谷歌插件市场中下载,作为浏览器插件使用方式简单,有可视化界面读取方便
SUID提权
在进入提权之前我们需要了解一些概念
ruid(real uid):实际用户ID其实就是当前登录系统的用户ID
euid(effective uid):有效用户ID就是当前进程是以那个用户ID来运行的
suid(saved set-user-ID):而保存的设置用户ID实际上就是有效用户ID的一个副本
提权原理:
在运行一个进程时,该进程的有效用户ID在一般情况下是实际用户的ID,但是如果该可执行文件具有SUID的权限,那么他的有效用户ID就是这个可执行程序的拥有者。
用人话来说就是,如果一个可执行文件留有suid位,当一个用户执行该文件时将获得与该文件所有者相同的权限;
eg:a是一个可执行文件且所有者是root,之后他还留有suid位,此时一个普通用户运行了此文件,那么此时该普通用户就获得了和root一样的权限,我们只要加以维持权限我们将成功获得root权限;
现在已知的具有SUID权限的二进制可执行文件大体有如下这些:
nmap vim find bash more less nano cp awk
本题中使用; find提权
语法:find [path…] [expression]
path为查找路径,.为当前路径,/为根目录
expression即为参数
-name: 按文件名查找文件
-perm: 按照文件权限来查找文件,4000,2000,1000为分别表示SUID,SGID,SBIT,如777为普通文件的最高权限,7000为特殊文件的最高权限
-user: 按照文件属主来查找
-size n: 文件大小是n个单位
-type: d:目录 f:文件 c:字符设备文件 b:块设备文件
-exec: find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为’command’ { } ;,注意{ }和\;之间的空格。
一个find提权的实例演示
因为本地环境中find并非留有suid权限所以先进行更改
sudo chmod u+s /bin/find
更改好后检查是否添加成功
进行提权测试
tips:留suid为提权时需要加-p
防范
不要轻易给易被利用的文件以SUID权限,防止SUID的滥用导致黑客在进入服务器时轻易获取root权限。
信息收集
使用nmap发现存活主机
也可以使用arp-scan探测
sudo arp-scan -l
发现目标靶机探测存活端口
我们可以看到开放了3个端口其中包含80端口,所以我们尝试进行访问
进入后是一个登录界面尝试弱口令无果,所以继续信息收集
之后我们进行指纹识别
whatweb -v ip
信息收集至此算告一段落,接下来就开始漏洞利用了
漏洞利用
之后使用msf查询对应框架的漏洞
搜所drupal披露漏洞
tips:优先利用时间接近且rank为excellent
在use时可以use对应的数字也可以时Name
这里看看2018的
options中required为yes的是必填选项
填写好后进行攻击,等待msf运行完毕连接shell
这里我们使用一个伪终端便于观察
python -c "import pty;pty.spawn('/bin/bash')"
这里我也疑惑了很久为什么不用他自己的shell而用了python的pyt之后在阅读师傅的文章时发现了这样一句话:
当我们拿到一个webshell的时候,我们能够执行一些命令,但是这些命令都是非交互的,也就是说不存在上下文的概念。当我们想使用vim、top等命令时,webshell就无能为力了。
flag1
在www目录下查看发现了flag1.txt,cat一下给了我们下一个flag的提示
Every good CMS needs a config file - and so do you. #一个好的cms需要一个配置文件你也如此
flag2
这里需要寻找配置文件
find . -name "set*"
tips:drupal7的目录结构及术语 - Just Code - ITeye博客
这里做一个小小的解释/sites/default/settings.php 配置文件,主要是数据库连接配置
根据flag1的提示我们cat一下看看我们看到了flag2
flag3
flag2处有一段提示
Brute force and dictionary attacks aren't the * only ways to gain access (and you WILL need access). * What can you do with these credentials? 蛮力和字典攻击不是 *只有获得访问权限的方法(您将需要访问权限)。 * 您可以使用这些凭据做什么?
关于蛮力和字典让我们想起了访问ip时首页是一个登录界面,所以猜测这里应该以管理员身份进入网站拿到下一个flag
关于提权,这里尝试了一下suid没有成功就没有继续了,flag2中我们获得了数据库账户和密码所以我们先连接一下数据库再继续操作
查询数据库相关信息
查询表单看到其中的users表,进去看看
select * from users\G;
tips:\G的作用是将查到的结构旋转90度变成纵向,这样更便于我们观察
我们找到了admin账户和密码,但是由于安全性考虑数据库中的密码并非是以明文的方式存储的(防止管理员撞库操作)这里经过了hash加密,此时我们需要继续寻找存储时的加密文件
进入查看一下加密文件
我们可以看出这玩意的用法貌似是这样的
因为我们可以进行数据库的连接所以我们可以将管理员密码也进行修改从而登录站点将生成的密码改为我们自己的
update users set pass="$S$D05OmGdE1kegARENQFfQ3UcGTLzgxak3lXsWzGGZ0oqelFyT.MB7" where name="admin";
此时再利用账户admin密码123456即可进入网站
flag4
根据passwd我们去产看一下/etc/passwd
进入查看
您可以使用相同的方法来查找或访问 root 中的flag吗?
可能。但也许这并不容易。 或者也许是?
flag5
这里就设计到提权,查看默认以root权限执行的程序
find / -perm -u=s -type f 2>/dev/null
顺便试一试suid可不可以结果发现失败了
看到有find所以使用find提权
进入/root目录下就可以获得最后的flag
find / -exec "/bin/bash" -p \;
参考文章
浅谈Linux下的ruid、euid、suid及普通用户可执行程序以root权限特权运行的方法 - 简书 (jianshu.com)
(17条消息) linux——SUID提权太菜了怎么办?的博客-CSDN博客suid提权的思路和过程
(17条消息) find基础命令与提权教程hyled-Ava的博客-CSDN博客find提权
(17条消息) DC-1靶场实战详解a310034188的博客-CSDN博客dc-1靶场
简谈SUID提权 - FreeBuf网络安全行业门户