web-dev-qa-db-ja.com

ハッキングに役立つプログラミング言語を何と定義していますか?

私は、スクリプト言語( PerlRubyPython 、javascript、さらにはLua !!!)がハッキングと侵入テストに最適であることを知っています。

私の質問は:これらの言語を適切にする理由は何ですか?私が知っていることから、それらは他の言語よりも遅く、より高い抽象化レベルで動作します、つまり、ハードウェアから離れすぎていることを意味します。 考えられる唯一の理由は、高度な文字列操作機能のためですが、他の言語にもそのような機能があると思います。

32
NlightNFotis

言語はやることに役立ちます。どのタイプのものが適しているかは、言語のタイプ、使用可能なフレームワーク、OSに対応するインタプリタ/コンパイラなどに完全に依存します。

あなたが言及したものを見てみましょう:

  • Perl
    • スクリプト言語
    • 一般的用途
    • 90年代以降、ほとんどの* nix OSで使用できます。
    • 迅速なハックや短いスクリプトに最適です。
  • ルビー
    • スクリプト言語
    • 一般的用途
    • クロスプラットフォーム
    • オブジェクト指向
    • 反射(独自の構造とコードを見ることができます)
    • 動的フレームワークに最適
  • Python
    • スクリプト言語
    • 一般的用途
    • クロスプラットフォーム
    • 明確で読みやすいソースコード用に設計
    • ライブラリの巨大なフレームワーク
  • JavaScript
    • スクリプト言語
    • ウェブベース
    • クロスプラットフォーム(すべての主要ブラウザで利用可能)

では、これらがペンテストに特に適している理由は何ですか?まあ、ほとんどのペンテストは、特定のテストのために特定の仕事をするための使い捨てツールを書くことを含みます。迅速な作業を行うたびに、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日の終わりに、-あなたが仕事に最適な言語を選択してください!

30
Polynomial

ここに私が見つけた素晴らしい答えがあります 類似したコンテキストのスタックオーバーフローの質問 @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年です。「スクリプト言語」ではありません。彼らはプログラミング言語です。 ;)

16
NlightNFotis

ここでは、ライブラリ、コードを書く時間、クロスプラットフォームの互換性が重要です。 Pythonを使用すると、最小限のコード行で非常に短い時間で概念実証のエクスプロイトを思い付くことができました。これは、広範な標準ライブラリとあなたがダウンロードできる追加のライブラリー私はそれがペンテストとハッキングに使用されるpythonの最大の強みだと思います。

例1000文字/ 1000バイト長の文字列が必要です。

Pythonでは:

print "A"*1000

Cでは:

for(i=0;i<1000;i++)printf("A");`

(含まれているすべてのマンボジャンボとは別に)

これは単なる例です。しかし、あなたが見ることができるように、そのような些細なタスクにかかる時間はPythonでははるかに簡単です。

コードからhttpリクエストなどを送信したい場合、違いはさらに強化されます。 Pythonのurllibhttplibなどを使用すると、2行のコードで実行できます。

7
sudhacker

これについてはすでにいくつかの良い答えがありますが、別の見方をします。スクリプト言語がハッキングに使用される傾向がある1つの理由は、スクリプト言語が開発の速度(および容易さ)を最適化することです。

例として、侵入テストスクリプトにはRubyを使用します。 Ruby = Javaなどの言語と比較した場合のスクリプト(例:メソッド/変数の宣言)。

これらの言語の欠点の1つは、実行時の速度が遅いことですが、問題ではない多くのハッキング作業では、開発の速度がより重要です。

6
Rory McCune

ハッキングに適した言語を定義するものは、次のとおりです。

  1. 言語の使用法
  2. クロスプラットフォームのサポート。

Javaの例を見てみましょう。すべてのプラットフォームで動作し、多くのシステムにインストールされます。これにより、ハッカーのコードが実行される可能性がかなり高くなり、その言語が標的となるシステムにインストールされます。

特定の高度に使用されているプログラミング言語のコミュニティでは、言語の脆弱性が見つかることもあります。そのため、ハッカーはその脆弱性を標的にすることができ、言語の分布が高いため、攻撃の変化が非常に大きくなります。

6
Kao

私はこれらの分野の知識はありませんが、言及されたプログラミング言語はすべて迅速なプログラミングを可能にします。つまり、実行時間は効率的であるがプログラミング(およびデバッグ)には非効率的である場合よりも、特定の時間枠ではるかに多くの異なるアイデアを試すことができます。 Cなどのプログラミング言語。それはポイントかもしれません。

6
Mok-Kong Shen

私の2セント:

まず bash (または他の Shell )を実行してください!!

完全なブレインストームの場合、言語の速さは重要ではありません。

この種の操作に最も有用で強力な言語の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秒以上は非常に遅いですが、コマンドラインコンソールにログインすると...

考慮すべき主な利点:

  • history履歴を保存またはコピーして、後で参照したり、スクリプトを作成したりできます。
  • logscriptscriptreplayなどのツールを使用すると、すべてのジョブの非常に正確なトレースを保持できます
  • Cut'n pastexターミナルまたはscreenなどのツールを使用することで、別々のコンソールで並列タスクを実行し、すべての入出力を共有できますそのうちの。
  • fifonc|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
...

そこから、pingtracerouteopensslnmapなど、必要なすべてのツールを使用できます。

$ 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 ...を確認できます。

とにかく、この種のジョブの各ステップをテストしてログに記録するための最良の環境は Shellbash ;-)のようなものです

3
F. Hauri