Linux靶机的Capture The Flag|DC-1
前言:前段时间一直备考ing,没有继续更新blog,寒假期间希望好好学习,及时更新,愿和大家一起学习,一起进步!
0X01 Main Point
- find命令查找有特殊权限suid的命令进行提权
- /etc/passwd和/tec/shadow的获取(如果二者都能得到,可通过john爆破)
- searchsploit和msf框架的了解掌握
- msf里的shell部分无回显,可利用python.pty模块进行shell
0X02 正文
这里是使用的vulnhub的DC1的Linux靶机,VM加载镜像后发现让你输入登录账户和密码,应该就是一个服务器。所以在攻击机上先得到靶机的目标IP。

得到目标IP是172.20.10.9后进行嗅探端口,nmap启动。

这里
-p-
参数是指定所有的端口都进行扫描,-sV
参数是版本检测是用来扫描目标主机和端口上运行的软件的版本.它不同于其它的扫描技术,它不是用来扫描目标主机上开放的端口,不过它需要从开放的端口获取信息来判断软件的版本.使用版本检测扫描之前需要先用TCP SYN扫描开放了哪些端口. 得到开放了22、80/111/32850
这些端口。我们知道80
端口是针对HTTP,而22
端口则是针对SSH。
我们发现 Drupal是使用PHP语言编写的开源内容管理框架 ,启动 msf!

这里我们使用rank:excellent的2018年的漏洞,发现可以反弹shell!
注意:选择后应该
show options
查看哪些是Required的,必须要全部填上最后exploit
执行才有效!
发现只需要设置rhost,
set rhost 172.20.10.9
设置后,执行可以反弹shell.
这样我们就成功进入,看目录发现有flag1

提示说“每个网站都有日志,你的,你的也不例外”,这样我们就去找日志,在这个目录下有一个
web.config
看了一下发现没啥用,继续找!找到了一个CHANGELOG.txt
但是无权打开,估计是要提权。找到了另外一个类似日志的PHP
settings.php我们查看后发现:

告诉了 flag2 和数据库用户名和密码,这样我们自然地想法是登录数据库查看
user
和password
,从而进行登录刚开始的80端口的页面,看里面的信息。
但是发现在msf的shell下mysql连接没有回显,那这样我们并不能登录数据库,这里就用到了python的pty模块。

查看Python版本后也是2.7,13,所以我们使用这个模块来获取交互式shell。

www-data用户,在debian/ubuntu上,www-data是默认运行web服务的用户/组,一般在通过apt安装web服务程序时生成。
现在来登录Mysql,结合之前有的数据库名称和密码,进行连接。

之后的操作就常规的看数据库,查表,查字段,发现有如下用户和密码,不过密码显然是经过加密的,个人感觉爆破得很费经,但事实上看了其他大佬的文章后发现用John the Ripper也比较容易得到,但是我的kali 2019并没有成功下载好,所以这一段我只能在物理机实践。

看到有两个User,
admin
和Fred
,这里继续启动 searchsploit,查看Drupal有哪些发现过的漏洞可以利用,但是我们先得知道目前的版本,以便于直接有针对性地选择出脚本。遍历各种目录后发现在bootstrap.inc
这个文件下有说明。
7.2.4的Drupal版本,现在查看
searchsploit
的Drupal脚本。
由于截图原因,无法看到每个脚本的用途(实际上有显示),这里我们选择的是34992.py这个脚本,
cat
查看这个脚本需要的参数,直接构造使用即可。
这个脚本的功能是新建一个权限用户,现在重新再mysql中查看用户发现:

用户名:crispr 密码:123456,这样我们登录进去后得到flag3。

0x03 提权
- 以root账户登录(尝试使用爆破未果)
- 普通用户登录,查找具有suid权限位的命令去get shell
suid权限位:说明可以以root权限执行命令
这里提示的关键词有find
、perms
、-exec
,使用的是find
具有suid权限的文件,因为具有suid权限的文件,执行过程中会使用root权限,这样我们就可以利用root权限查看 /etc/passwd和/etc/shadow,主要是知道/etc/shadow,里面存放的是各种用户的hash密码,如果我们既知道 /etc/passwd 也知道 /etc/shadow ,就可以通过爆破来得到真实密码,从而SSH连接root账户得到flag。
flag4@DC-1:~$ touch getshell
flag4@DC-1:~$ find / -type f -name getshell -exec "whoami" \;
root
flag4@DC-1:~$ find / -type f -name getflag -exec "/bin/sh" \;
cd /root
ls
thefinalflag.txt
cat thefinalflag.txt
这里首先传建一个文件名为getshell的新的文件,然后执行find查找,由于find具有suid权限位,所以可以执行exec
查看后是root
权限,
/bin/sh
在shell脚本的开头往往有一句话来定义使用哪种sh解释器来解释脚本。
目前常见的shell脚本中主要有以下两种方式:
(1) #!/bin/sh
(2) #!/bin/bash
注意:每个脚本开头都使用"#!","#!"实际上是一个2字节魔法数字,这是指定一个文件
类型的特殊标记,在这种情况下,指的就是一个可执行的脚本。在#!之后,接一个路径名,
这个路径名指定了一个解释脚本命令的程序,这个程序可以是shell,程序语言或者任意
一个通用程序。
sh是bash的一种特殊的模式,也就是 /bin/sh 相当于 /bin/bash --posix。说白了
sh就是开启了POSIX标准的bash 。
在一般的linux系统当中(如redhat),使用sh调用执行脚本相当于打开了
bash的POSIX标准模式
得到最终的flag!