Shikata Ga Nai

Private? There is no such things.

Time-Based SQL Injection to Dumping the Databaseを訳してみた

Hello there, ('ω')ノ

 

データベースをダンプするための時間ベースのSQLインジェクションを。

 

脆弱性:

 SQLインジェクション

 Androidのバグ

 

記事:

 https://thevillagehacker.medium.com/time-based-sql-injection-to-dumping-the-database-da0e5bcaa9df

 

SQLインジェクションとは:

攻撃者がアプリケーションがデータベースに対して行うクエリを妨害することを。

可能にするWebセキュリティの脆弱性で。

通常、攻撃者は通常は取得できないデータを表示できて。

これには、他のユーザに属するデータ、またはアプリケーション自体が。

アクセスできる他のデータが含まれる場合があって。

多くの場合、攻撃者はこのデータを変更または削除して。

アプリケーションのコンテンツや動作に永続的な変更を加える可能性があって。

今回は、脆弱性を見つけるために資産追跡アプリケーションをテストしていて。

それは、アンドロイドのアプリケーションで。

アプリをインストールして、それをリバースエンジニアリングして。

ハードコードされた秘密をチェックしたものの何も見つからず。

 

次に、SSL証明書のピン留めをバイパスしたところ。

アプリケーションが、下記を使用していることに気付いて。

 Content-Type: application/json; charset=UTF-8

 

これは、JSONリクエストを使用してアクションを実行するアプリケーションを。

正確に意味しているので。

 

許可なくアクティビティをトリガできれば。

アプリケーションに大きな影響があるとすぐに思ったので。

MobSFからすべての活動を集めることに。

 https://github.com/MobSF/Mobile-Security-Framework-MobSF

 

f:id:ThisIsOne:20210923201144p:plain

 

そのアプリケーションには、2つのダッシュボードアクティビティが存在するという。

アクティビティの1つが注意を引いたので。

最初のアクティビティをトリガするために使用することに。

 com.abc.xyz.view.activity.DashboardActivity ⇨ activity  1com.abc.xyz.view.activity.DashboardActivitySecond ⇨ activity 2

 

アプリケーションのダッシュボードが開くとデフォルトのページが表示されるので。

次に、別のアクティビティを調べて何かを取得できるかどうかを確認すると。

下記のアクティビティが存在し、正常にトリガされて。

 com.abc.xyz.view.activity.SearchActivity

 

探している正確な情報を検索するには多くの情報が必要であったので。

それらすべてを入力すると。

下記のリクエストのJSON本文が注意を引いたので。

インジェクションの脆弱性をチェックすることに。

f:id:ThisIsOne:20210923194704p:plain

 

abc_serial_noオブジェクトが注意を引いたので。

そのオブジェクトにを追加して何が起こるかを確認すると。

500 INTERNAL SERVER ERRORが発生したので。

このオブジェクトはSQLインジェクションを実行することに対して脆弱で。

 

POSTリクエストをファイルにコピーして。

それをsqlmapに渡してプロセスを自動化して。

バックエンドデータベースを見つけることに。

 sqlmap -r example.txt banner

 

f:id:ThisIsOne:20210923194734p:plain

 

すると、バックエンドデータベースはPostgreSQLで。

データベースバナーを取得しようとしたとき、sqlmapはJSONオブジェクトの。

abc_serial_noが、時間ベースのSQLインジェクションに対して。

脆弱であることを示したので。

ペイロードを適用してサーバからの応答が、5,044ms遅延していることを確認して。

下記がペイロードで。

 ”abc_serial_no”: ”1' AND 9520=(SELECT 9520 FROM PG_SLEEP(5)) AND ‘GRTs’=’GRTs”

 

f:id:ThisIsOne:20210923194803p:plain

 

下記のようにsqlmapを使用してデータベースを取得して。

 sqlmap -r example.txt --dbs

 

f:id:ThisIsOne:20210923194829p:plain

 

データベースの取得:

 sqlmapは、プロセス全体を自動化してデータベース全体を提供してくれて。


参考文献:

    https://portswigger.net/web-security/sql-injection
    https://github.com/thevillagehacker/Bug-Hunting/tree/main/SQL-Payloads
    https://owasp.org/www-community/attacks/SQL_Injection
    https://www.w3schools.com/sql/sql_injection.asp

 

Best regards, (^^ゞ

CORS misconfig that worths USD200を訳してみた

Hello there, ('ω')ノ

 

200米ドル相当のCORSの設定ミスを。

 

脆弱性:

 CORSの設定ミス

 

記事:

 https://mikekitckchan.medium.com/cors-misconfig-that-worths-usd200-4696eda5ab4c


今回は、ターゲットをredacted.comと呼ぶことに。

このバグによって、攻撃者はCORSの誤った設定を利用して。

被害者からトークンを盗むことができるので。

攻撃者はそのトークンを使用して、被害者に代わって。

ターゲットの不正なサービスを利用できて。

 

バックグラウンド:

ほとんどの要求と応答をテストしたもののあまり興味深いものはなかったので。

Burp Suiteですべてのリクエストとレスポンスを再確認すると。

下記のリクエストの1つがCORSに対して脆弱であることに気付いて。

 

GET /token HTTP/1.1
Host: subdomain.redacted.com
Origin: www.redacted.com
Connection: close
Accept: */*
Cookies: some-Cookies=xxxxxxxxxxxx;

 

そして、応答は下記のようになって。

{"some_token": "xxxxxxxxxxxxxxxxxxxxxx"}

 

Originヘッダをwww.evil.comに変更しても。

このエンドポイントは、200の応答を返すので。

攻撃者は被害者のトークンを盗むことができて。

ただ、これをバグとして報告してもNAとしてクローズされる可能性があるので。

このトークンが何であるか。

そしてこれを使用してターゲットに影響を与える方法を理解する必要があって。

 

エスカレーション:

そのため、jsファイル、Webアプリ、トークンの名前、サブドメイン名などに。

関する要求/応答履歴の検索に何時間も費やして。

最後に、Webアプリで生成されたトークンに関連するJSファイルを見つけることに。

このファイルには、下記のようなJSONが含まれていて。

 {"unique_service": "subdomain.redacted.com"}

 

したがって、トークンはここで説明する「unique_service」にリンクされている必要があると思います。


ターゲットのドキュメントを読むとunique_serviceに使用率の制限があって。

ユーザは、無料の制限を超えてそのサービスを使用すると。

料金を支払う必要があって。

サービスは、下記を経由して到達することができて。

 subdomain2.redacted.com/service

 

提供されたトークンは、下記のようなリクエストで認証トークンとして機能して。

 

POST /service HTTP/1.1
Host: subdomain2.redacted.com
Authorization: Bearer <some_token>

 

また、subdomain2は認証トークンのみをチェックして。

ユーザのセッションはチェックしないこともわかったので。

攻撃者がトークンを盗むことができれば、攻撃者はユーザに代わって。

サービスを使用して、Webアプリの無料の制限をすべて消費することができるわけで。

 

エクスプロイト:

攻撃者は、悪用するために自分がホストしているWebサイトに。

下記のスクリプトを挿入するだけで。

 

<html> 
<body> 
<script>history.pushState('', '', '/')</script> 
<form action="https://subdomain.redacted.com/token"> 
<input type="submit" value="Submit request" /> 
</form> 
</body>
</html>

 

自分のWebサイトがevil.comであるとすると。

攻撃者は被害者をだまして、適切なログインセッションで。

redacted.comと同じブラウザでevil.comをクリックさせることができて。


次にevil.comは、https://subdomain.redacted.com/tokenにリクエストを送信して。

トークンを要求して。

被害者は、同じブラウザにログインしているので。

そのセッションCookieも検証のために送信されて。

ターゲットは、リクエストの発信元をチェックしないので。

トークンをevil.comに返して。

最後に攻撃者はトークンを使用して、被害者のサービスの無料制限を消費できて。


結果:

このバグのポイントは、行き詰まった場合は。

すべての要求/応答をもう一度調査してみることで。

各トークン/パラメータの目的を理解してみて。

時間をかけてWebアプリのロジックを理解して。

また、ターゲットのドキュメントを読むことは。

ターゲットをよりよく理解するために常に役立って。

 

Best regards, (^^ゞ

Second Order Race Conditionを訳してみた

Hello there, ('ω')ノ

 

二次競合状態を。

 

脆弱性:

 競合状態

 

記事:

 https://0xdekster.medium.com/second-order-race-condition-be8aaf774783

 

ウェブサイトには登録プロセスがあって。

登録するには電話番号を入力する必要があって。

電話番号、メールアドレス、ユーザー名、詳細を入力したら。

確認を成功させるために6桁のOTPコードを入力して。

電話番号を確認する必要があって。

6桁のOTPを提供して、キャプチャサービスを確認した後に。

登録ボタンを押して、リクエストを傍受することに。

 

このリクエストのパラメータで調査し始めて試したのは。

Single OTP verification and single Captcha Verification」のリクエストで。

異なるユーザ名で複数のアカウントを登録することで。

 

このPOSTリクエストをTurbo Intruderに送信してから。

 https://portswigger.net/research/turbo-intruder

 

f:id:ThisIsOne:20210922170413p:plain

 

f:id:ThisIsOne:20210922170004p:plain

 

インジェクションポイントを下記のようにパラメータを操作して。

 username ⇦ abc123%s

 email ⇦ abc123%s@gmail.com

 

次に、Turbo Intruderのデフォルトのrace.pyスクリプトを使用して。

 

f:id:ThisIsOne:20210922172204p:plain

 

パラメータの数に応じてインジェクションポイントをカスタマイズして。

リクエストを攻撃開始すると。

 

f:id:ThisIsOne:20210922164726p:plain

 

Turbo Intruderのステータスコードで、「302」として3つのリクエストがあって。

これは、「Single OTP verification and single Captcha Verification」を使用して。

3つの異なるアカウントを作成したことを意味しているわけで。

 

Best regards, (^^ゞ

Story of Account Takeover : Using Social Login with Mass Assignment Vulnerability to hack accounts !を訳してみた

Hello there, ('ω')ノ

 

ソーシャルログインと大量割り当ての脆弱性を使用してアカウントのハッキングを。

 

脆弱性:

 一括割り当て

 アカウントの乗っ取り

 

記事:

 https://kaif0x01.medium.com/story-of-account-takeover-using-social-login-with-mass-assignment-vulnerability-to-hack-accounts-21e4d5856f5e

 

プログラム名をREDACTEDとすると。

このプログラムにはモバイルアプリが含まれているので。

Playストアから直接アプリをダウンロードしてテストを開始することに。

ターゲットアプリには、FacebookでログインやGoogleでログインなどの。

ソーシャルログインがあったので、この機能をチェックし始めることに。

アプリには、SSL Pinning(不正なSSL証明書を検知する)があったので。

fridaスクリプトでバイパスして、BurpSuiteを起動することに。

 https://frida.re/docs/home/

 

f:id:ThisIsOne:20210922144601p:plain

 

脆弱性の背景:

ターゲットアプリは、ユーザがメール、電話番号や。

ソーシャルログインチャネル(FacebookやGoogleなど)から。

サインアップできる金融アプリで。

Facebook機能を使用したサインアップには。

攻撃者が被害者の電話番号を知っているだけで被害者のアカウントを。

完全に乗っ取ることができる大量割り当ての脆弱性があって。


APIの一括割り当ての脆弱性とは:

一括割り当ての脆弱性は、ユーザがアプリケーションで。

意図されていないサーバ側の変数を初期化または上書きできる場合に発生して。

リクエストに追加のパラメータを含めるようにリクエストを手動で作成すると。

悪意のあるユーザがアプリケーションの機能に悪影響を与える可能性があって。


再現手順:

1.アプリのFacebookボタンでログインをクリックして。

2.Burp Suiteを使用してリクエストをインターセプトして。

3.Facebookでアプリを承認した後、HTTPリクエストが開始されて。

 

HTTPリクエスト:

    POST /signup/users/socialLogin HTTP/1.1
    Content-Type: application/json; charset=UTF-8
    Content-Length: 834
    Host: api.redacted.com
    Connection: close
    Accept-Encoding: gzip, deflate
    User-Agent: okhttp/4.2.1

{“profile_picture”:”http://graph.facebook.com/3061xxxxxxxxx/picture?type=large","emailId":"example@gmail.com","socialType":"FB","fname":"test","pincode":"","dob":"","mobile":"","city":"","gender":"","androidId":"3c91804d96d13669","deviceToken":"xxxx","appVersion":"1.0.0|10","country":"","socialId":"306199919","addressl2":"","lname":"Test"}

 

上記のHTTPリクエストには、一括割り当てに対して。

脆弱なmobileパラメータがあって。

 

4.mobileパラメータの値に被害者のアカウントの電話番号を入力して。

 リクエストを転送して。

5.これで、被害者のアカウントに攻撃者の電子メール(emailId)が添付されて。

6.するとユーザは、自分のメールアカウントを更新、削除することはできず。

 

Best regards, (^^ゞ

Blind Command Injection - It hurtsを訳してみた

Hello there, ('ω')ノ

 

ブラインドコマンドインジェクションを。

 

脆弱性:

 コマンドインジェクション

 RCE

 

記事:

 https://shahjerry33.medium.com/blind-command-injection-it-hurts-9f396c1f63f2


概要 :

コマンドインジェクションは、ホストオペレーティングシステム上で。

任意のコマンドを実行する攻撃の一種で。

コマンドインジェクションは、アプリケーションが安全でないユーザ提供データを。

システムシェルに渡すときに発生して。

入力検証が不十分だと、コマンドインジェクションが可能で。

 

一般的にコマンドインジェクションを見つけるのは難しいですが。

コマンドインジェクションをテストしているときに下記に気づいて。

多くのペイロードをテストしましたが、何も機能せず。

 GET parameter/?search=

 

Burp Suiteで応答を確認したところ。

「このオブジェクトはJavaScriptスペースにいくつかの%symbols%を格納して。

libsがそれらを読み取れるようにする」

と書かれていたので。

ブラインドコマンドインジェクションである可能性があると考えて。

tcpdumpを使用して調べることに。

 

この脆弱性を見つける方法:

1.ターゲットのWebサイトにアクセスして。

 いくつかの一般的なパラメータ(今回は、/?search=)を確認して。

 

2.パイプ演算子を使用してペイロードを注入しようとすると応答がなくて。

 通常の200OKで。

f:id:ThisIsOne:20210922131339p:plain

 

3.テストに多くのペイロードを使用した結果。

 ヌルバイト文字を使用したバイパスである1つだけが機能して。

 

f:id:ThisIsOne:20210922131359p:plain

 

4.それがブラインドコマンドインジェクションであることを知っていたので。

 kaliで、tcpdumpを開始することに。


f:id:ThisIsOne:20210922131418p:plain

 

下記からペイロードを使用できて。

https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command%20Injection

 

f:id:ThisIsOne:20210922134812p:plain

 

動作したカスタムペイロードは、下記のとおりで。

 http://www.mytarget.com/?search=%00{.exec|ping <MyIP>

 

ブラインドコマンドインジェクションをチェックするには。

tcpdumpの代わりにwiresharkを使用することもできて。

 

コマンドインジェクションをテストするためのいくつかの一般的なパラメータ:

/?query=
/?email=
/?id=
/?username=
/?user=
/?to=
/?from=
/?search=
/?query=
/?q=
/?s=
/?shopId=
/?blogId=
/?phone=
/?mode=
/?next=
/?firstname=
/?lastname=
/?locale=
/?cmd=
/?sys=
/?system=

 

コマンドインジェクションの脆弱性を自動的に検出するための優れたツールがあって。

 https://github.com/commixproject/commix

 

f:id:ThisIsOne:20210922131451p:plain

 

Commixは、Anastasios Stasinopoulosによって作成された自動ツールで。

このツールを使用すると、特定の脆弱なパラメータまたはHTTPヘッダで。

コマンドインジェクションの脆弱性を簡単に見つけて悪用できて。

 

緩和策:

コマンドインジェクションを防ぐために、アプリケーション層コードから。

OSコマンドを呼び出さないように。

 

Best regards, (^^ゞ