Shikata Ga Nai

Private? There is no such things.

アプリケーションのマッピングの概要についてかいてみた

Hello there, ('ω')ノ

 

Webアプリケーションハッキングについては。

アプリケーションのマッピングから。

まずは、対象とするアプリケーションについて詳しく知る必要があって。

アプリケーションがどのように機能するかを知れば知るほど。

物事はより簡単になって。

 

1.アプリケーションを手動で参照して。

 アプリケーションが基本的なレベルで何を行うかを理解して。

2.詳細については、robots.txtとsitemap.xmlを探して。

3.自動化されたツールなどを使用して Web サイトの構成をスパイして。

4.プロキシでインターセプトをオフにして。

 アプリケーション全体を手動で参照して、フォームを送信したり。

 多段階ログインを完了したりして。

5.ディレクトリとサブディレクトリを見つけるには。

 ディレクトリブルートフォーシング ツールを使用して。

 さまざまなリストと拡張機能を試したり。

6.Google Dorks を使用して公開情報を識別して。

 ParamSpiderやarchive.orgを使用して、過去のコンテンツを見つけて。

7.Nikto/Wikto Scanを実行して、サーバ上のデフォルトコンテンツや。

 サーバソフトウェアの脆弱性を特定して。

8.アプリケーションの関数のマインドマップを作成して。

 攻撃する関数を分離して。

9.アプリケーション内の複雑な関数を特定して。

 debug=True、test=0などのパラメータを送信して。

 非表示のパラメータを特定して。

10.新しいコンテンツが見つからなくなるまで、これらすべてを繰り返して。


これが、アプリケーションのマッピングは完了するまでの流れで。

今回は、概要レベルで全体のボリューム把握を。

詳細については、またのちほど。

 

Best regards, (^^ゞ

クライアント側の制御のバイパスについてかいてみた

Hello there, ('ω')ノ

 

クライアント側に配置されたコントロールと検証と。

それをどのようにバイパスするかについて。

クライアントサーバアーキテクチャの基本的なセキュリティ上の欠陥は。

サーバがクライアントを制御できないことで。

 

【クライアント経由でデータを送信】

■非表示のフォームフィールド

Webアプリケーションでクライアントからデータを送信する最も一般的な方法で。

 <input type=”text” name=”quantity”>

 <input type=”hidden” name=”price” value=”49”>


非表示のフィールドは、UI にレンダリングされない/画面に表示されて。

ただ、フォームが送信されると下記のリクエストが発生して。

 POST /shop/28/Shop.aspx?prod=1 HTTP/1.1
 Host: example.com
 Content-Type: application/x-www-form-urlencoded
 Content-Length: 20
 quantity=1&price=49


 サーバで検証されていない可能性があるので、負の値を送信したりと。

 

■HTTPクッキー

Cookieは、クライアントからデータを送信する一般的な方法で。

通常のユーザは、Cookieを直接変更することはできず。

ただ、傍受プロキシを使用すると簡単に実行できて。


1)Cookie が設定されている場合、サーバからのレスポンスを傍受して。

 HTTP/1.1 200 OK
 Set-Cookie: DiscountAgreed=15
 Content-Length: 153

 

2)サーバに送信するときにリクエストを変更して。

 追加のリクエストを送信すると対応するリクエストが行われて。

 DiscountAgreed Cookieを変更することで、任意の割引を取得できて。


 POST /shop/92/Shop.aspx?prod=3 HTTP/1.1
 Host: example.com
 Cookie: DiscountAgreed=200
 Content-Length: 10

 quantity=1

 

■URLパラメータ

データは、変数=値の形式でURLで送信されて。

 http://example.com/shop/?prod=3&pricecode=12

 

ブラウザのアドレスバーで簡単に修正できて。

埋め込まれた画像や埋め込まれたiframeや。

事前設定されたパラメータを持つフォームだったり。

アドレスバーを隠すための何らかの手段を使用するアプリケーションは。

ブラウザから直接URLを修正できないので。

傍受プロキシで、インターセプトを使用したりと。

 

■リファラーヘッダ

リファラーヘッダは、リクエストの発信元を示して。

一部のアプリケーションは、要求されたアクションを許可するために。

これらを処理する場合があって。

パスワードリセットのリクエストの例だと。

 GET /auth/CreateUser.ashx HTTP/1.1
 Host: example.com
 Referer: https://example.com/auth/Admin.ashx


サーバがリファラーヘッダに基づいたリセット アクションを許可する場合は。

管理者ユーザのパスワードをリセットすることになる可能性があって。

リファラーヘッダは完全にオプションで。


■不透明データ

データがプレーンテキスト形式でなくて。

何らかのアルゴリズムを使用して暗号化またはエンコードされている場合があって。

これは、アプリケーションが入力データに対して。

追加のチェックを実行することを意味して。

これはそれ自体でバグを引き起こす可能性があって。

 <input type=”hidden” name=”price_token” value=”E76D213D291B8F216D694A”>

 


【ユーザデータのキャプチャ】

■長さ制限

ブラウザは、ユーザが maxlength属性を使用して。

長いデータを入力することを制限する場合があって。

 <input type=”text” name=”quantity” maxlength=”10”>

 

これを回避するには、単に属性を削除して。


■スクリプトベースの検証

スクリプトベースの検証を実行するために javascript に入ります。

送信ボタンがクリックされたときに関数が呼び出される例だと。

 <script>
  function validateForm(theForm)
  {
   var isInteger = /^\d+$/;
   var valid = isInteger.test(quantity) &&quantity > 0 && quantity <= 10;
   if (!valid)
    alert(’Please enter a valid quantity’);
   return valid;
  }
 </script>


このような単純な検証は簡単に回避できて。

1) ブラウザで Javascript を無効にして。

2) リクエストをインターセプトして値を変更して。

3) レスポンスを傍受し、常にtrueを返すように関数を変更して。


■無効フィールド

無効なフィールドはグレー表示され、編集できずサーバーには送信されず。

これらのフィールドは、開発プロセスで使用されている場合があって。

なので、フィールドをテストして、サーバが指定されたフィールドを。

処理するかどうかを確認する必要があって。

 <input type=”text” disabled=”true” name=”price” value=”300”>


【防御:クライアント側データの処理  】

1.クライアントから重要なデータを送信しないで。

 サーバに参照を設定して、サーバ側で利用可能なデータを使用して。

2.他に方法がなければ、難読化・暗号化は必須で。

 暗号化を使用すると、リプレイ攻撃を受ける可能性があって。

 なので、暗号化中には、アイテムに関連するデータを使用して。

 たとえば、商品の賞品が暗号化されている場合だと。

 固有の商品コードとともに暗号化を実行して。

3.割引などのプロファイル固有のものが発行されている場合は。

 プロファイルに保存するか、セッションオブジェクトを使用して。

4.クライアント側からのデータは、クライアント側自体では検証できず。

5.難読化または拡張機能を使用すると攻撃者の速度が低下させても。

 攻撃を止めることはできず。

6.サーバ上でも、常にすべてのクライアント側の検証を複製して。

 

【搾取】
攻撃者として必要なことは、下記のとおりで。

■クライアント経由のデータ送信

1.クライアント経由でデータが送信されるすべてのインスタンスを見つけて。

  (非表示フィールド、URLパラメータ、Cookie、ヘッダーなど)。

2.特定のアイテムがアプリケーションで果たす役割を推測して。

3.アプリケーションの動作に影響を与えるようにアイテムを変更して。

 つまり、脆弱性が公開されているかどうかを確認できて。

 

■不透明データ

1.プレーンテキストがわかっている場合は、データの解読を試して。

2.アプリケーションで関数 else-where を使用して、データの難読化を解除します。

3.価格が難読化されている場合は。

 高価な商品には、低価格の商品のトークンを送信したり。

4.何も機能しない場合は、ロジックを攻撃して。

 長すぎるデータや変更されたデータ、異なる文字セットなどを送信したり。

 

■入力のキャプチャ

1.クライアント側の検証が行われている場所を特定して。

2.クライアント側の検証に失敗したであろう値を送信してみたり。

3.クライアント側の検証がサーバに複製されているかどうかを確認して。

 そうでない場合は、さらに攻撃を行うことができて。

4.クライアントで複数のフィールドが検証されている場合は。

 各フィールドを個別に試して。


Best regards, (^^ゞ

Google Hackingについてかいてみた

Hello there, ('ω')ノ

 

Googleの検索機能を使っての情報収集について。

あくまでも敵を攻撃手法を知るためであったり。

脆弱性診断を行うためであって、絶対に悪用は厳禁で。

たとえば、脆弱性の可能性のあるサイトを探すのに。

下記のような検索をすると。

ある程度、脆弱性を勉強してきた人間だと目的が理解できるわけで。

 inurl: "index.php?id="

 

f:id:ThisIsOne:20210604175822p:plain


下記のサイトで、検索するパターンの参考になって。

 https://www.exploit-db.com/google-hacking-database

 

f:id:ThisIsOne:20210604175054p:plain

 

たとえば、下記であれば。

ログイン ポータルを見つけるためのDorkについて書かれていて。

 

f:id:ThisIsOne:20210604175356p:plain

 

検索結果は、下記のとおりで。

 inurl:"/my-account-login" | allintext:"My Account"

 

f:id:ThisIsOne:20210604175725p:plain

 

他には、下記のようなDorkも。

 

f:id:ThisIsOne:20210604180321p:plain

 

 intitle:"index of /" ssh

 

f:id:ThisIsOne:20210604180355p:plain

 

ディレクトリ一覧が表示されて。

 

f:id:ThisIsOne:20210604180716p:plain

 

それから、従業員/顧客に関するパスワードと情報も。

スピア フィッシングに利用されるわけで。

f:id:ThisIsOne:20210604180940p:plain

 

f:id:ThisIsOne:20210604181022p:plain

 

たとえば、下記のような検索をおこなってから。

 xlsx password

 

f:id:ThisIsOne:20210604181432p:plain

 

目的のDorkを探したりと。

 

f:id:ThisIsOne:20210604181513p:plain

 

Best regards, (^^ゞ

Server-side template injection with a custom exploitをやってみた

Hello there, ('ω')ノ

 

カスタムエクスプロイトを使用したサーバサイドのテンプレートインジェクションを。

carlosのホーム ディレクトリから/.ssh/id_rsaファイル を削除せよとのことで。

 

まずは、ログインして。

 

f:id:ThisIsOne:20210603162717p:plain

 

アバターをアップロードして。

 

f:id:ThisIsOne:20210603162804p:plain

 

コメントを投稿して。

 

f:id:ThisIsOne:20210603162911p:plain

 

正常動作確認を。

 

f:id:ThisIsOne:20210603162946p:plain

 

次にアバターの画像ファイルではなく、PDFファイルをアップロードすると。

 

f:id:ThisIsOne:20210603163313p:plain

 

下記のエラーメッセージが。

これでメソッドとcarlosに関するファイルがわかって。

 User->setAvatar('/tmp/000017508....', 'application/pdf')
 thrown in /home/carlos/User.php on line 28


f:id:ThisIsOne:20210603163232p:plain

 

また、アカウント情報で名前を変更してみると。

 

f:id:ThisIsOne:20210603170114p:plain

 

投稿した名前も更新すると変更されることが確認できて。

 

f:id:ThisIsOne:20210603170135p:plain

 

ということで、アカウントを変更するリクエストをリピータへ。

 

f:id:ThisIsOne:20210603170213p:plain


名前のパラメータを下記に変更してSendすると。

 user.setAvatar('/etc/passwd') 

 

f:id:ThisIsOne:20210603174044p:plain


投稿ページにはエラーメッセージが。

どうやら2番目の引数に画像の MIME タイプが必要らしく。


f:id:ThisIsOne:20210603174010p:plain

 

パラメータに下記の引数を追加して再度、Sendして。

 user.setAvatar('/etc/passwd','image/jpg'

 

f:id:ThisIsOne:20210603174517p:plain

 

投稿ページを更新すると。

 

f:id:ThisIsOne:20210603174425p:plain

 

/etc/passwdファイルの内容が返さたので。

これで、任意のファイルにアクセスできることがわかって。

    

f:id:ThisIsOne:20210603174404p:plain

 

今度は、先ほど表示されたcarlosのphpファイルを読み込むことに。

 user.setAvatar('/home/carlos/User.php','image/jpg')

 

f:id:ThisIsOne:20210603174853p:plain

 

アバターを削除するメソッドがみつかったので。

 

f:id:ThisIsOne:20210603175004p:plain

 

まずは、ファイルをアバターとして設定してSendして。

 user.setAvatar('/home/carlos/.ssh/id_rsa','image/jpg')

 

f:id:ThisIsOne:20210603175145p:plain

 

f:id:ThisIsOne:20210603175333p:plain

 

最後に下記の削除用メソッドをSendすると。

 user.gdprDelete() 

 

f:id:ThisIsOne:20210603175621p:plain

 

クリアできた。

 

f:id:ThisIsOne:20210603175647p:plain


Best regards, (^^ゞ

Mitre ATT&CK NavigatorとART(Atomic Red Team)についてかいてみた

Hello there, ('ω')ノ

 

昨日は、朝から倦怠感で仕事が手に使ず。

午前の体温は36.2度だったものの昼過ぎには37.2度に。

横になって静養に入ったものの加速度的に体温は上昇して38度を超えて。

もしかして、コロナ感染かと思ったものの。

咳はなく、呼吸も苦しくもなく。

なんとなく命の危険を感じて近くの病院へ。

ふらふらして到着すると体温は39度に。

診断結果は、過労と熱中症とのことで。

はじめて40分の点滴を。

熱は下がったものの、今日は血液検査があるようで。

 

さて、今回はMitre ATT&CK Navigatorをつかって。

Atomic Red Teamが、Mitre ATT&CK Matrixのテクニックをどの程度カバーしているか。

レイヤを作成して確認することに。

 

まずは、レイヤ情報を含む JSON ファイルへのリンクを取得することに。

https://github.com/redcanaryco/atomic-red-team/tree/master/atomics/Indexes/Attack-Navigator-Layers

 

f:id:ThisIsOne:20210531172831p:plain

 

下記のフォルダには、Linux、macOS、Windowsと。

すべての組み合わせの各T#内に存在するアトミック テストを表す。

4つの JSON ファイルがあって。

このJSONファイルのレイヤ情報を使用するには。

「raw」をクリックし、各ファイルの生データへを取得する必要があって。

 

https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/Indexes/Attack-Navigator-Layers/art-navigator-layer.json

 

f:id:ThisIsOne:20210531174258p:plain

 

下記のURLをコピーして。

https://raw.githubusercontent.com/redcanaryco/atomic-red-team/master/atomics/Indexes/Attack-Navigator-Layers/art-navigator-layer.json

 

f:id:ThisIsOne:20210531174409p:plain

 

Mitre ATT&CK Navigatorに貼り付けてから。

「>」記号をクリックすると。

 

f:id:ThisIsOne:20210531174521p:plain

 

このレイヤでは、テクニックが赤く表示されて。

たとえば、「ブルートフォース」というテクニックには。

4つのサブテクニックのうち3つが、アトミックテストに関連付けられていて。

 

f:id:ThisIsOne:20210531174644p:plain

 

他のJSONファイルのレイヤを作成するには下記のとおりで。

Linuxについては、下記から。

https://raw.githubusercontent.com/redcanaryco/atomic-red-team/master/atomics/Indexes/Attack-Navigator-Layers/art-navigator-layer-linux.json

 

f:id:ThisIsOne:20210531174953p:plain


macOSについては、下記から。

https://raw.githubusercontent.com/redcanaryco/atomic-red-team/master/atomics/Indexes/Attack-Navigator-Layers/art-navigator-layer-macos.json

 

f:id:ThisIsOne:20210531175028p:plain


Windowsについては、下記から。

https://raw.githubusercontent.com/redcanaryco/atomic-red-team/master/atomics/Indexes/Attack-Navigator-Layers/art-navigator-layer-windows.json

 

f:id:ThisIsOne:20210531175145p:plain

 

その後、LinuxとWindowsのレイヤを組み合わせることも。

 

f:id:ThisIsOne:20210531175841p:plain

 

共通のテクニックは、緑色で。

 

f:id:ThisIsOne:20210531175727p:plain

 

Best regards, (^^ゞ