Jump to content

0x00概要

ターゲットサイトはhttp://www.example.comです。公式ウェブサイトはAPIの使用文書を提供していますが、テスト後に脆弱性は見つかりませんでした。ディレクトリ、ポートスキャンなどで利用可能なポイントは見つかりませんでした。後で、公式ウェブサイトがクライアントのダウンロードを提供したことがわかりました。

0x01情報収集

最初にクライアントのパッケージをつかみました。 FiddlerとBurpsuiteを使用してキャッチできませんでした。私はそれがHTTPプロトコルではないと疑った。 Wiresharkを使用して、実際にHTTPプロトコルを使用していることを確認しましたが、データパケットは簡単に再生できませんでした。最後に、WSEXPlorerを使用して、指定されたプロセスのパケットをキャプチャし、通信データを正常にキャプチャしました。キャプチャされたデータは次のとおり、緑色はリクエストパケットであり、赤いものは応答パケットでした。在这里插入图片描述

データパケットは2つの部分に分割されます。1つはリクエストラインとリクエストヘッダーです。

在这里插入图片描述

1つはリクエスト本体です。在这里插入图片描述

それを一緒にスプライシングすることは、データパケット在这里插入图片描述をリプレイするために強盗に配置できます

0x03テストプロセス

リクエストパケットが暗号化されてから送信され、返された応答パケットも暗号化されていることがわかります。ただし、暗号化と復号化は常にクライアントで実行されるため、クライアントを分析することから始めることができます。

Exeinfo PEを使用してシェルを確認すると、NETフレームワークC#によって開発されたプログラムが使用されていることがわかります。在这里插入图片描述

DNSPYを使用して、NETプログラムにリバースエンジニアリングツールを使用して、クライアントの暗号化と復号化を分析できます。開いた後、クラスとメソッドの命名はすべて不規則な数値文字であり、コードが難読化されていることがわかりました。在这里插入图片描述

難読化されたコードは読み取り分析を使用せず、DE4DOTを使用して防1障害を試みることができ、多くの難解性暗号化ツールをサポートしてソースコードを難読化できます。

de4dot-x64.exe origin.exe

耐性のあるプログラムOrigin-Cleaned.exe 在这里插入图片描述を入手できます

溶け防止プログラムをDNSPYにドラッグして表示すると、復元されて読みやすくなります。在这里插入图片描述

その通信はHTTPプロトコルを使用しているため、httphelperという名前のクラスがあることがわかりました。分析のフォローアップ。コードには、図に示すように、データを暗号化してPOSTリクエストを開始する方法であると疑われるPOST機能は表示されません。在这里插入图片描述

M.Encrypt()は、要求されたパラメーターを暗号化するために呼び出され、メソッドをフォローアップし、MMクラスの下でキー暗号化関数がtest05関数である必要があることがわかりました。在这里插入图片描述

ブレークポイントを設定して、プログラムが暗号化と送信用にこの関数を呼び出すかどうかを確認します。プレーンテキストと暗号文にブレークポイントを設定します。在这里插入图片描述

F5はプログラムを開始し、アカウントパスワードTest123456を入力し、ログイン在这里插入图片描述

プログラムはブレークポイントで停止し、プレーンテキストには、Test123456とMD5が入力したアカウントによって暗号化されたパスワードが含まれていました。在这里插入图片描述

暗号化されたコンテンツをリリースして取得すると、ここの暗号化関数が呼び出されていることを確認できます。在这里插入图片描述

後に、応答パッケージの復号化がMMクラスのTest06関数を呼び出し、リクエストパッケージの暗号化関数Test05と応答パッケージ復号化関数Test06がDLLの対応する関数を呼び出すことが後に確認されました。在这里插入图片描述

ここでの暗号化と復号化は、2つのセットのメソッドを呼び出します。これを使用して、リクエストパケットの暗号化されたデータを復号化することはできません。テストを容易にし、迅速に暗号化および復号化するために、暗号化と復号化関数が差し引かれ、DLLの関数が独立したプログラムにコンパイルするために呼び出されるため、アルゴリズムを分析する必要はありません。

ここでは、SharpDeveloped Compiledを使用しています。VisualStudioを使用すると、常にエラーが報告されます.

public static string decryptresponse(string cipher){

byte [] bytes=encoding.utf8.getBytes(cipher);

byte [] array=new byte [bytes.length + 128];

int count=program.test06(ref bytes [0]、ref array [0]);

string text=encoding.utf8.getString(array、0、count);

テキストを返します。

}

public static string encryptrequest(string plain){

byte [] bytes=encoding.utf8.getBytes(plain);

int num=bytes.length * 2 + 128;

if(num32){

num=64;

}

byte [] array=new byte [num];

int num2=0;

num2=test05(ref bytes [0]、ref array [0]);

文字列result=encoding.utf8.getString(array、0、num2);

返品結果;

}

暗号化在这里插入图片描述

復号化在这里插入图片描述

次に、PythonのFlask Frameworkを使用して、プロキシ転送プログラムをローカルに作成して、Burpsuiteでのリプレイテストを促進します。

プロセスは次のとおりです。

Plantextデータパケットをローカルにプロキシエージェントに送信します。リクエストパケットを受信します。発信者はリクエストパケットを暗号化します。暗号化されたデータパケットは、サーバー発信者に転送されます。サーバーによって返されたコンテンツは復号化され、プレーンテキストデータに戻り、Flask Import Request、Flaskからローカルに戻ります

urllib.parseインポート見積もりから

リクエストをインポートします

OSをインポートします

ヘッダー={

'user-agent':' mozilla '、

'content-type':'アプリケーション/x-www-form-urlencoded '、

'Accept-Encoding':' gzip、deflate '、

}

app=flask( 'example')

@app.route( '/example'、method=['post'])

def proxy():

form=request.form

request_plain=''

フォーム:のキーの場合

request_plain +='{}={}'。フォーマット(key、form [key])

Response_Plain=test(request_plain)

RESONSE_PLAINを返します

def encrypt(filename):

encrypt_cmd='crypto.exe -encrypt {}'。フォーマット(filename)#暗号化されるコンテンツはファイルから読み取ります

result=os.popen(encrypt_cmd)#exe exeを実行します

request_cipher=quote(result.read())#encryptedコンテンツURLエンコード後、 +サインを%2Bサーバーに変換して認識します

request_cipherを返します

def decrypt(filename):

decrypt_cmd='crypto.exe -decrypt {}'。フォーマット(filename)#decryptedのコンテンツはファイルから読み取ります

result=os.popen(decrypt_cmd)#exe exeを実行します

response_plain=result.read()#復号化されたコンテンツを読み取ります

RESONSE_PLAINを返します

def test(request_plain):

url='http://example.com/api/'

plain_txt='plain.txt'

f1:としてopen(plain_txt、 'w')

f1.writeLines(request_plain)#plaintextをplain.txtに保存します

request_cipher=encrypt(plain_txt)#encrypt plantext

response=requests.post(url=url、data=request_cipher、headers=headers)#send request

cipher_txt='cipher.txt'

f2:として開いている(cipher_txt、 'w')

f2.writeLines(response.text)#storage ciphertext in cipher.txt

Response_plain=decrypt(cipher_txt)#decrypt ciphertext

RESONSE_PLAINを返します

__name__=='__main __' :の場合

app.run(host='0.0.0.0'、port=9999、debug=true)

ここでリクエストされるインターフェイスは毎回同じであり、唯一の変更はリクエスト本体のパラメーターです。 CodeServiceにはすべてのインターフェイスのすべてのプレーンテキストがあり、すべてが抽出されます。在这里插入图片描述

Burpsuite〜在这里插入图片描述で通常テストできます

最後に、SQL注入はインターフェイスで正常に発見されました。在这里插入图片描述

0x04要約

1。指定されたプロセスのパッケージをWSEXPlorerを介してつかみ、HTTPプロトコルのデータパケットが暗号化されていることを発見します。アンチオブスケートを試すために、多くの難解な暗号化ツールDE4DOT-X64.EXE ORIGIN.EXE5によって難読化されたソースコードをサポートします。 DNSPYを使用してプログラムを再コンパイルし、プログラムの暗号化、ブレークポイントの関数メソッドを表示し、F5を押して実行します。プログラムはブレークポイントで停止し、プレーンテキストには、私が入力したアカウントTest123456とMD5によって暗号化されたパスワードが含まれています。 6.プログラムの暗号化と復号化関数セグメントを見つけ、メインコードを切り取り、Python 7に記述します。次に、PythonのFlask Frameworkを使用して、プロキシ転送プログラムをローカルに書き込み、Burpsuiteでのリプレイテストを促進します。プロセスは次のとおりです。Plantextデータパケットをプロキシエージェントにローカルに送信します。リクエストパケットが受信されます。発信者はリクエストパケットを暗号化します。暗号化されたデータパケットは、サーバー発信者に転送されます。サーバーによって返されるコンテンツは復号化され、プレーンテキストデータにローカルに返されます。

元の接続:https://Blog.csdn.net/qq_32727277/article/details/102783316

0 Comments

Recommended Comments

There are no comments to display.

Guest
Add a comment...