この記事では、謙虚な意見(以前は黒人のバグハンターでした)で、道を切り開く価値がある方法を書きたいと思います。 そして、Kali linuxでは決してありません(結局のところ、彼らは首都のポリテクニックで教えています。
あなたが私の道に部分的に興味があるなら、猫へようこそ。
Habrユーザーはすでに多くの手順を完了しているため、レベルに安全にスキップできます。 基本的に、このOSは私の専門であり、最も一般的であるため、この投稿はWindowsに関するものです。 ここでのコードは、バッファオーバーフローの脆弱性の例として考えますが、既成のエクスプロイトには到達しません。これは別の非常に広範なトピックです。
ステップ0. lamerからnoobへ
まず第一に、あなたが働いているオペレーティングシステムを勉強する必要があります。 どんなに些細なことに聞こえるかもしれませんが、OSの知識は、時にはその逆ではないことを示します。
たとえば、Windows 10のUACバイパスは、eventvwrの使用中に機能する1つのprocmonのおかげで発見されました。 おもしろいですが、権限を増やすという事実は、最初にeventvwrが1つのブランチでレジストリキーを探し、それを見つけずに、別のブランチで探しました。 実際、最初は通常は何も見つかりませんでした。最終的には、ファイルへのパスをそこに書き込み、アプリケーションが昇格された権限で起動したらすぐにeventvwrを実行するだけで十分でした。
ここでは1バイトも解決されていませんが、研究者はUACのバイパスを発見しました。
そのため、最初にオペレーティングシステムを学習します。 徹底的に。 彼女のデバイスでさまざまな本を読んでください。 特にWindowsでは、Mark Russinovichに「Internal Windows device」とアドバイスできます。 autorunsやprocmonなどの一般的なユーティリティの著者からの本
Windowsの場合:RegMonやFileMonなどのプログラムで遊んでください。 OSキャストを「前」と「後」にして比較することができます。 OS設定の変更など、さまざまなパラメーターの変更内容を確認します。
仮想マシンを配置し、最も倒錯した方法でOSを「殺す」ことを試み、それを修正します。
その後、再びRegMonとFileMonに戻って、さまざまなサンプルを実行できます。 その後、あなたはすでに症状によってほとんどすべてのmalvarを見つけることができます。
Malvarはここから入手できます。
非表示のテキスト
注意! 悪意のあるファイルへのリンクを含むサイト
ご自身の責任で行ってください
弊社が作成したマルウェアの多くはRUマシンでは開始されません;ロシアレイアウトのない仮想マシンにENGマシンを配置します
MalwareBlacklist.com
malwr.com(登録が必要です)
kernelmode.info(よく知られているかなりのマルウェア)
ご自身の責任で行ってください
弊社が作成したマルウェアの多くはRUマシンでは開始されません;ロシアレイアウトのない仮想マシンにENGマシンを配置します
MalwareBlacklist.com
malwr.com(登録が必要です)
kernelmode.info(よく知られているかなりのマルウェア)
使用しているオペレーティングシステムを学習したら、さらに先に進むことができます。
ステップ1. Noobから開発者へ
この段階で、プログラミング言語を学びます。 たとえば、python-初心者にはかなり良いですし、将来、エクスプロイトの作成やファジング(後で検討します)に役立つでしょう。
その後、siを学ぶと、メモリを操作することの理解が得られ、パフォーマンスについて考えるように教えられ、母国語としても役立ちます。
少なくとも一般的な原則では、さらにアセンブリ言語。 レジスタとは何か、スタックとは何か、基本的な命令。 逆に有用で、読書は特別な知識を必要としません。
この順序:python、C / C ++、アセンブラー
ステップ2.開発者から優秀な開発者へ
この時点で、悪いコードと良いコードを区別することを学ぶ必要があります。 エラーを確認し、アセンブラーを知ってください。
このステップに合格したかどうかを確認する方法は? 次のコードが何につながるか教えてください:
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <string.h> void Encr(char *in, char *out, int key) { for (int i = 0; i < strlen(in); i++) out[i] = in[i] + key; } int main(int argc, char *argv[]) { char EncryptedStr[10] = { 0 }; if (argc > 1) { Encr(argv[1], EncryptedStr, 5); printf("Encrypted: %s\n", EncryptedStr); } return 0; }
このプログラムは、引数に文字列を受け取り、キー5を使用してCaesarのアルゴリズムで暗号化し、結果をEncryptedStrに保存します。
このコードの何が悪いのか、何につながるのか?
答えは:
非表示のテキスト
このプログラムでは、9文字より長い文字列(10番目の文字がゼロ)を渡すと、バッファオーバーフローが発生する可能性があります。 スタック上の関数からの戻りアドレスを上書きし、プロセスメモリで任意のコードを実行できるようにします。 これがサーバーソフトウェアにある場合-これは、権限のないユーザーがサーバー上で任意のコードを実行できるという事実につながる可能性があります
しかし、このコードは2000年代のものです。 現時点では、DEP、ASLR、セキュリティCookieなどの技術があるため、このホールを悪用することは困難です。 ただし、これもバイパスされます。 たとえば、ret2libcを読むことができます
ステップ3.優れた開発者からリバースへ
IDA Proを使用したアセンブラーリストで前の例を見てみましょう
非表示のテキスト
どんなにあなたが大騒ぎしても、ここでRCEを見つけるのは私にとっても難しい。 しかし、人生の例はもっと複雑です。 そのため、特別なツール-ファザーがあります。
ファザーとは何ですか? これは、
たとえば、アプリケーションの場合、最も単純なファザーは次のようになります。
#/usr/bin/python import subprocess i = 0; while True: i += 1 if subprocess.call('test1.exe {0}'.format("A" * i), shell=True) != 0: print 'Crashed with arguments: {0}'.format("A" * i) break print "Finished"
結果は次のとおりです。
非表示のテキスト
フェイザーの詳細については、 こちらをご覧ください。
したがって、ソースコードまたは逆アセンブリスキルがなければ、脆弱性が見つかります。 あらゆる種類の入力を生成するファザーを作成できます。
逆から搾取者へ
エクスプロイトの作成を開始できたら。
たとえば、アプリケーションの場合、最も単純なエクスプロイトは擬似コードで次のようになります
#/usr/bin/python import subprocess subprocess.call('test1.exe '.format("A" * 10 + address + there_shellcode), shell=True);
ここで、addressはメモリ内の書き換え可能なバッファのアドレスであり、there_shellcodeはバッファがオーバーフローしたときに実行されるシェルコードです。
これが正確にどのように配置されているかはGoogleで確認できます。
結論の代わりに
私のオプションは、カット前の記事とは対照的に、はるかに広範囲で実用的です。 ただし、より複雑です。
スクリプトdddiを介して、または悪用を介して-あなただけが選択します。