VulnHub::DC-1
实验环境
一共有五个flag,有多种方法去提权,我们最终目标是去拿到/root的flag。总的来说,难度不高,适合新人练手
渗透过程
0x01 信息搜集
由于不知道靶机IP地址,进行D段扫描,获得靶机IP地址。
进行端口扫描:
nmap命令
-sS: 半开扫描,记入系统日志风险小
-sP:扫描端口前,先使用ping扫描,保证主机存活
-A: 全面系统检测,启用脚本检测和扫描
主机开放了22(SSH),80(HTTP),111(RPCBInd),45684端口。
直接访问web服务,是一个Drupal搭建的站。
0x02 开打
flag1
使用AWVS进行扫描,得到该页面存在Drupal的一个漏洞CVE-2018-7600
使用msf尝试利用此漏洞:
获得shell
在 /var/www/ 下有个flag1.txt,提示我们去看配置文件
flag2
利用Python模拟tty使目录更易于辨认:
python -c 'import pty;pty.spawn("/bin/sh")'
drupal的配置文件是 /sites/default/settings.php ,主要是数据库连接配置
我们发现了flag2以及数据库账号密码
flag3
登上数据,查看数据库中的信息。
发现账号,和经过加密的密码,flag2中给的提示暴力破解不是唯一的方法
思路一:恢复密码
搜索了一下,Drupal 7已不再采用Drupal 6和5时代的简单的MD5加密了。据某个帖子说是因为现在有一个在线的MD5数据库,可以查到很多MD5码的原文,因此Drupal 7的开发者认为不能再继续采用这种极不安全的方法了,因此Drupal 7采用了新型的Hash加密方法来确保密码安全。新型加密方法是“加了盐(Salt)“的MD5码,简单理解就是并不会直接将password进行MD5加密,而会和用户名或其它随机字符串组合在一起后再MD5加密。
查到的资料表示:在Drupal 7的安装目录中的scripts目录下,有一些Drupal 7开发者准备好的PHP脚本,可以执行一些高级操作。其中有一个脚本名为:password-hash.sh,它的功能是传入一个密码(字符串),即返回加密后的密码字符串。
或者打开Google或者百度搜索该cms框架忘记密码的解决办法,就可以看到别人做好的明文和密文,可以拿来直接用,也有文章直接说明它是如何加密的
生成密码字符串
对原密码进行替换。
登录web服务,得到flag3
思路二:查找可利用漏洞,添加新管理员账户
使用searchsploit
查找可用漏洞:
利用CVE-2014-3704
exp
添加新管理员用户admin1
登录成功
flag4
flag3的提示提到了权限,于是想到先查看用户列表。
发现flag4用户
切换到falg4的家目录,发现flag4.txt
flag5
flag4提示flag in root
发现最终flag,但是无权限打开,flag3中提醒了“-exec”,猜测需要提权。
使用find可以获取root权限
附录1 SUID提权
0x01 SUID
什么是suid?通俗的理解为其他用户执行这个程序的时候可以用该程序所有者/组的权限。
0x02 SUID提权
那么什么是suid提权呢?我理解的就是有个文件,它有s标志,并且他输入root,那么我们运行这个程序就可以有了root的权限,并且这个程序还得能执行命令,不然没什么用处,那么我们就能从普通用户提升到了root权限了。
0x03 常见的可用于suid提权的命令
Nmap
Vim
find
Bash
More
Less
Nano
cp
0x04 查找符合条件的文件
以下命令可以发现系统上运行的所有SUID可执行文件。具体来说,命令将尝试查找具有root权限的SUID的文件。
find / -user root -perm -4000 -print 2>/dev/null
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -exec ls -ldb {} \;
附录2 find命令
0x01 描述
find命令 用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。
0x02 语法
find(选项)(参数)
-exec<执行指令>:假设find指令的回传值为True,就执行该指令;
-perm<权限数值>:查找符合指定的权限数值的文件或目录;
0x03 实例
借助-exec
选项与其他命令结合使用
找出当前目录下所有root的文件,并把所有权更改为用户tom
find .-type f -user root -exec chown tom {} \;
上例中, {} 用于与 -exec 选项结合使用来匹配所有文件,然后会被替换为相应的文件名。
找出自己家目录下所有的.txt文件并删除
find $HOME/. -name "*.txt" -ok rm {} \;
上例中, -ok 和 -exec 行为一样,不过它会给出提示,是否执行相应的操作。