私は、スクリプト言語( Perl 、 Ruby 、 Python 、javascript、さらにはLua !!!)がハッキングと侵入テストに最適であることを知っています。
私の質問は:これらの言語を適切にする理由は何ですか?私が知っていることから、それらは他の言語よりも遅く、より高い抽象化レベルで動作します、つまり、ハードウェアから離れすぎていることを意味します。 考えられる唯一の理由は、高度な文字列操作機能のためですが、他の言語にもそのような機能があると思います。
言語はやることに役立ちます。どのタイプのものが適しているかは、言語のタイプ、使用可能なフレームワーク、OSに対応するインタプリタ/コンパイラなどに完全に依存します。
あなたが言及したものを見てみましょう:
では、これらがペンテストに特に適している理由は何ですか?まあ、ほとんどのペンテストは、特定のテストのために特定の仕事をするための使い捨てツールを書くことを含みます。迅速な作業を行うたびに、CまたはC++でそのようなツールを作成するのは面倒で時間がかかります。さらに、プラットフォームは、プラットフォーム固有のコンパイルを必要とするプラットフォーム固有のバイナリまたはソースを生成する傾向があり、クロスプラットフォームスクリプトただ実行するではありません。スクリプト言語を使用すると、このようなツールをすばやく簡単に作成できる柔軟性が得られます。
たとえば、RubyおよびPythonは、包括的なライブラリを備えているため、より複雑なタスクで人気がありますが、Perlは、迅速なデータ処理ハックで人気があります。JavaScriptは一般的に利用されていますCのような他の言語は、OSとのインターフェースとなるより低レベルのタスクに使用される傾向があります。
今、コインの反対側はペイロードとして使用される言語です。要件が非常に多様であるため、ここで線がぼやけます。 Windowsボックスを攻撃するには、OSが提供するもの以外に依存関係のないペイロードが役立ちます。これは、C、C++、VBScript、x86 asm、C#/ VB.NET(.NET 2.0は最近のほとんどのマシンにあります)などです。Linuxボックスを攻撃するには、C、C++、bashスクリプト、またはPerlを使用します。 Javaは、クロスプラットフォーム攻撃でも一般的です。
1日の終わりに、-あなたが仕事に最適な言語を選択してください!
ここに私が見つけた素晴らしい答えがあります 類似したコンテキストのスタックオーバーフローの質問 @tqbf:(私はこの答えをここにコピーしました、彼らが好まれるかもしれない正当な理由を与えるので、それが将来の読者に役立つ)
RubyはMetasploitのネイティブ言語であるため、おそらく必要になるでしょう。これは、事実上の標準であるオープンソースの侵入テストフレームワークです。 Rubyが提供するもの:
Metasploit's フレームワーク、オペコード、シェルコードデータベース
Metasploitの Ruby lorcon 802.11の生のバインディング
Metasploitの802.11クライアントサイドリダイレクト用のKARMAバインディング
Libcurl およびWebツール作成用のnet/http
EventMachine Webプロキシおよびファジング作業(またはよく知られているMongrel Webサーバーを拡張するRFuzz)
Metasm シェルコード生成用
Distorm x86分解の場合
BinData バイナリファイル形式のファジング。
2番目の場所はPythonです。 PythonよりもRubyで利用できるペンテストライブラリが多くあります(ただし、Metasploitを相殺するには不十分です)。商用ツールはPythonもサポートする傾向があります---イミュニティCANVASまたはCORE Impactの顧客であれば、Pythonが必要です。 Pythonは以下を提供します:
ツイスト ネットワークアクセス用
PaiMei プログラムのトレースおよびプログラム可能なデバッグ用
CANVASおよびImpactサポート
Dornseif's リモートデバッグ用のfirewireライブラリ
WinDbgとのレディ統合 リモートWindowsカーネルデバッグ用(カーネルデバッグ用のRubyにはまだ良い答えはありません。そのため、私はまだ時々Pythonを使用しています)。
Peach Fuzzer とSully for fuzzing
Web侵入テスト用のSpikeProxy(また OWASP Pantera )。
当然のことながら、多くのWeb作業はJavaツールを使用しています。デファクトスタンダードのWebペンテストツールはBurp Suiteで、Javaスイングアプリです。 RubyとPythonには、そのようなツールへのアクセスに使用できるJavaバリアントがあります。また、RubyとPythonの両方が提供します:
生のパケット作業のためのlibpcapとの直接統合
暗号化のためのOpenSSLバインディング
IDA Pro拡張
APIアクセス用の成熟した(または少なくとも妥当な)C外部関数インターフェース
UI作業用のWxWindows、およびWeb UI用のまともなWebスタック
どちらの言語でも問題はありませんが、主流のペンテスト作業では、MetasploitはおそらくPythonの利点をすべて排除しており、現在、x86逆処理では、Pythonの優れたデバッグインターフェイスですべてを排除しています。 Rubyのメリット。
また、2008年です。「スクリプト言語」ではありません。彼らはプログラミング言語です。 ;)
ここでは、ライブラリ、コードを書く時間、クロスプラットフォームの互換性が重要です。 Pythonを使用すると、最小限のコード行で非常に短い時間で概念実証のエクスプロイトを思い付くことができました。これは、広範な標準ライブラリとあなたがダウンロードできる追加のライブラリー私はそれがペンテストとハッキングに使用されるpythonの最大の強みだと思います。
例1000文字/ 1000バイト長の文字列が必要です。
Pythonでは:
print "A"*1000
Cでは:
for(i=0;i<1000;i++)printf("A");`
(含まれているすべてのマンボジャンボとは別に)
これは単なる例です。しかし、あなたが見ることができるように、そのような些細なタスクにかかる時間はPythonでははるかに簡単です。
コードからhttpリクエストなどを送信したい場合、違いはさらに強化されます。 Pythonのurllib
、httplib
などを使用すると、2行のコードで実行できます。
これについてはすでにいくつかの良い答えがありますが、別の見方をします。スクリプト言語がハッキングに使用される傾向がある1つの理由は、スクリプト言語が開発の速度(および容易さ)を最適化することです。
例として、侵入テストスクリプトにはRubyを使用します。 Ruby = Javaなどの言語と比較した場合のスクリプト(例:メソッド/変数の宣言)。
これらの言語の欠点の1つは、実行時の速度が遅いことですが、問題ではない多くのハッキング作業では、開発の速度がより重要です。
ハッキングに適した言語を定義するものは、次のとおりです。
Javaの例を見てみましょう。すべてのプラットフォームで動作し、多くのシステムにインストールされます。これにより、ハッカーのコードが実行される可能性がかなり高くなり、その言語が標的となるシステムにインストールされます。
特定の高度に使用されているプログラミング言語のコミュニティでは、言語の脆弱性が見つかることもあります。そのため、ハッカーはその脆弱性を標的にすることができ、言語の分布が高いため、攻撃の変化が非常に大きくなります。
私はこれらの分野の知識はありませんが、言及されたプログラミング言語はすべて迅速なプログラミングを可能にします。つまり、実行時間は効率的であるがプログラミング(およびデバッグ)には非効率的である場合よりも、特定の時間枠ではるかに多くの異なるアイデアを試すことができます。 Cなどのプログラミング言語。それはポイントかもしれません。
完全なブレインストームの場合、言語の速さは重要ではありません。
この種の操作に最も有用で強力な言語の1つは、質問の中で忘れられているようです。
bash についてhacking environmentについてお話ししたいと思います。はい シェル 他の多くのものを保持している可能性があるシェルから彼の名前を取得します。
Un * xでは、他のツールを実行できるように、主に Shell コンソールにログインしています。
より遅い言語の場合:
$ time for ((i=1000000;i--;));do :;done
real 0m4.755s
user 0m4.628s
sys 0m0.124s
time Perl -e 'map{1}(0..1000000)'
real 0m0.199s
user 0m0.112s
sys 0m0.060s
$ time python -c 'for a in range(1000000): 1==1
real 0m0.119s
user 0m0.096s
sys 0m0.020s
はい! 100万ステップループで4秒以上は非常に遅いですが、コマンドラインコンソールにログインすると...
script
やscriptreplay
などのツールを使用すると、すべてのジョブの非常に正確なトレースを保持できますscreen
などのツールを使用することで、別々のコンソールで並列タスクを実行し、すべての入出力を共有できますそのうちの。nc
|sed
|ssh
|python
...あなたはから始めることができます:
$ mkdir /tmp/hackingGoogle
$ cd $_
より
$ nc google.com 80 <<<$'HEAD /fonts/ HTTP/1.0\r\n\r'
HTTP/1.0 200 OK
Content-Type: text/html; charset=utf-8
...
そこから、ping
、traceroute
、openssl
、nmap
など、必要なすべてのツールを使用できます。
$ openssl s_client -connect google.com:443 -ign_eof \
<<< $'HEAD / HTTP/1.0\r\n\r' 2>&1 | \
openssl x509 -in /dev/stdin -out certfile
$ openssl x509 -in certfile -noout -fingerprint
SHA1 Fingerprint=67:1B:98:92:48:86:FF:E1:C5:02:44:C5:9F:F3:96:78:08:F5:0A:45
$ openssl x509 -in certfile -noout -subject
subject= /C=US/ST=California/L=Mountain View/O=Google Inc/CN=*.google.com
SSLに興味がある場合は、いくつかのサンプルスクリプト
$ wget https://www.google.com/fonts/
$ vi index.html
$ wget https://www.google.com/fonts/webfonts.nocache.js
$ smjs < <(sed < webfonts.nocache.js 's/Window....')
...
javascript...
$ ip=();ANS=false;while read -a line;do if [[ "$line" = ";;" ]];then [[
"${line[1]}" = "ANSWER" ]] && ANS=true || ANS=false; fi ; $ANS && [[
"${line[2]}" == "IN" ]] && ip+=(${line[4]});done < <(Dig www.google.com)
$ printf "%s\n" ${ip[@]}
173.194.116.51
173.194.116.52
173.194.116.48
173.194.116.49
173.194.116.50
検索対象に応じて、すべてのツールをあらゆる組み合わせで幅広く使用できます。
$ grep ^64 < <(for Host in ${ip[@]};do ping -c2 $Host&done;wait)|sort -t. -nk4
64 bytes from 173.194.113.112: icmp_req=1 ttl=54 time=45.4 ms
64 bytes from 173.194.113.112: icmp_req=2 ttl=54 time=47.8 ms
64 bytes from 173.194.113.113: icmp_req=1 ttl=54 time=41.4 ms
64 bytes from 173.194.113.113: icmp_req=2 ttl=54 time=40.2 ms
64 bytes from 173.194.113.114: icmp_req=1 ttl=54 time=43.1 ms
64 bytes from 173.194.113.114: icmp_req=2 ttl=54 time=39.0 ms
64 bytes from 173.194.113.115: icmp_req=1 ttl=54 time=47.0 ms
64 bytes from 173.194.113.115: icmp_req=2 ttl=54 time=42.1 ms
64 bytes from 173.194.113.116: icmp_req=1 ttl=54 time=43.9 ms
64 bytes from 173.194.113.116: icmp_req=2 ttl=54 time=39.0 ms
これは書き直されて:
これにより、〜5台のホストで2つのpingparallelized(通常は1秒しかかかりません)が行われます。
ip=()
ANS=false
while read -a line;do
if [[ "$line" = ";;" ]] ;then
[[ "${line[1]}" = "ANSWER" ]] && ANS=true || ANS=false
fi
$ANS && [[ "${line[2]}" == "IN" ]] &&
ip+=(${line[4]})
done < <(Dig www.google.com)
grep ^64 < <(
for Host in ${ip[@]};do
ping -c2 $Host &
done
wait
) |
sort -t. -nk4
目標が決まったら、たくさんのbrainf @#@ ingの後、一般的なhackerが好みのエディターを実行して、 exploit次の実行を自動化するスクリプトとして。
使用する言語の選択は、主にハッカーの好みに依存します。 (上司が必要としない場合。)
ペンテスト、スキャン、調査、分析に特化したツールはすでにたくさんあります。 debian を使用する場合、 Debian Forensics Environment ...を確認できます。
とにかく、この種のジョブの各ステップをテストしてログに記録するための最良の環境は Shell ( bash ;-)のようなものです