ハッカーは使用Pythonの技術を必要としますか?

Pythonは、脆弱性開発分野の業界標準となっている、読者は(Rubyのセキュリティ上の脆弱性検出ツールで書か除く)検証ツールの概念のほとんどはPythonで書かれていることがわかります。Pythonスクリプトは、開発者が対話するための迅速かつ簡単な方法で、リモートサービスを記述したバイナリファイルを扱う、およびC言語のライブラリ(またはJavaのJython /ネットのIronPythonの)することができます。これは、他のフレームワークや言語への依存の開発の必要性を排除し、「内蔵バッテリ」原則巨大な標準ライブラリです。

PythonのデータとPDFのセットを終えた小扁は、Pythonの学習教材を学ぶ必要があるグループに追加することができます:631 441 315、とにかくアイドルそれがアイドル状態である、~~たくさんの友人を学ぶ方が良いです

いくつかは、互換性があることができ、Python3.0に基づいて例のほとんどは、後で書く:私はあなたが注意してください(世界より安全な場所がいくつか作るのを助けるためにこれらの将来の仕事を見つけることが、読者は個人的なPythonプログラミング経験を共有したいです)全ての枝をPYTHON。

1.環境設定

スクリプトを書きたいか、ほとんどのプロジェクトでは、我々はすべての最高は、同じ場所に依存して、読者をお勧めします(ほかにのみいくつかの特別なプロジェクトで使用頼るように)。このツールは、単純な機能を持っている(Python3.3がすでにツールが含まれます)、virtualenvのと呼ばれるツールを使用する必要がこれらの要件を満たすために、それは、地球環境に基づいて、あるは、あなたのPythonプロジェクトとは無関係に発生し、中断されていません環境:

方法#は、新しい環境を生成し、次のとおりです。
$ virtualenvの<新しい環境へのパス>
#またはPython3.3環境上の:
$のpython3 -mvenv <新しい環境へのパス>
この環境で使用する#前に、あなたは最初にそれをアクティブにする必要があります
$をソース<の新しい環境へのパス> /アクティブの/ binに
#環境を禁止するにも非常に簡単です:
$の非アクティブ化

2.インストールの依存関係

何度もの読者は、大規模なPythonのPythonライブラリのコミュニティを準備するための個人的なツールが結果を得るすぐに私たちを助けることができると、あります。あなたは個人的な管理ソ​​フトウェアパッケージまたは最も権威のPIPツールで利用できるPythonのパッケージマネージャによるこれらのライブラリをインストールすることができます。PIPを使用すると、これらのグローバル依存関係(#pipインストール)、またはユーザーごとのインストールを(インストールすることができます

どのようなPythonのハッカー技術が使用されますか?

 

)をインストールピップ。読者は手動で個人的な使用のパッケージマネージャを解放することができ、またはライブラリベースのPython3.4はピップインストールパッケージを提供します。

iPythonと呼ばれる基本的なパッケージのpythonは、通常、私はあなたが実験をしようとするときに、私は依存関係をインストールします現在のタスクを、解決するためにどのように100%わからないんだけど、あります。IPythonは、Pythonで計算され、共通のPythonコマンドラインであり、以下の特徴を有します。

動的オブジェクトのイントロスペクション

ローカル名前空間によって、タブ補完

継続的な歴史

セッションログ

パスの完了

JITデバッガ

自動インデント

いつものように、インストールはピップを経由して簡単です:$ピップはipythonをインストール

あなたはチュートリアルや他のテキストファイルを作成したい場合は、(今jupyter提供)ipython特性をノートPC値下げ、mathjax、matplotlibのツールなどのサポートを含め、ユーザーの個人IPythonブラウザとコマンドラインの対話を可能にします。

(これらは、オープンノートブックサービス(jupyterノート)によって(jupyterをインストールPIP)jupyterをインストールして使用することができます)。

読者はJSON / XMLなどのHTTPサービスとやり取りする必要があると私は特に便利リクエスト依存ライブラリをお勧めします。Pythonライブラリは、符号化、復号化、パラメータ、マーカー、およびリダイレクトなどの操作やインタラクティブなWebフェーシング、すべての種類を扱うことができます。たとえば、次のようにリソース要求とJSONコードを構文解析です。

R = requests.get( 'https://api.github.com/user'、AUTH =( 'ユーザ'、 'パス'))
r.json()
{u'private_gists ':419、u'total_private_repos': 77、...}

ほとんどのHTML構文解析とインタラクティブな作業はBeautifulSoupライブラリ、修理損傷したコードを含むすべての現在のブラウザ上でHTMLの入力を処理することができますPythonライブラリを手渡しすることができます。

3.ネットワークと対話

我々の目標のほとんどは、ネットワーク上で取得する可能性があり、インストールされている標準ライブラリはすでに一般的な、便利なPythonライブラリが含まれ、ここで私は簡単な紹介も。ソケットモジュールは、汎用オペレーティングシステムのすべてで利用可能であるBSDソケットAPI薄いラッパーに基づいています。

あなたは既にC言語のソケットでのプログラミング経験を持っているのであれば、簡単にあなたのコードはPythonコードに変換することができます。TCPソケット、マシンおよび特定のホストまたは接続ポートの確立を作成することができ、このようなcreate_connection機能など、多くの特殊な便利な機能があります。別のパッケージがsendall方法で、一部のデータは、すべてのデータが送信された場合にのみ与えられた、またはエラーが順序、およびデータを再送信しようとするsendall方法で伝送路で発生しています。

__future__インポートunicode_literalsから
ソケットインポート
S = socket.create_connection(( 'www.ernw.de'、80))
s.sendall(b'GET / HTTP / 1.1
:www.ernw.deホスト
「)
プリント(s.recvを1024年))

リンクを高めるためにTSL暗号化は非常に簡単です:

__future__インポートunicode_literalsから
ソケットインポート
インポートSSL
S = socket.create_connection(( 'www.ernw.de'、443))
、S = ssl.wrap_socket(S)
s.sendall(b'GET / HTTP / 1.1
ホスト:www.ernw .DE
「)
プリント(s.recv(1024))

上記機能は、関連して実装することができるでは、使用されてきました。

__future__インポートunicode_literalsから
ソケットインポート
インポートSSL
S = socket.create_connection(( 'smtp.example.com'、25))
s.sendall(b'HELO smtp.example.com
STARTTLS
「)
プリント(s.recv(1024))
S = ssl.wrap_socket(S)
s.sendall(b'MAIL FROM:<[email protected]>
「)
プリント(s.recv(1024))

どのようにこれらの低レベルのサービスの相互作用を必要としない、といくつかの高レベルのモジュールは、双方向サービスを提供することができます。

したりするsmtplib

ftplibの

poplibと

IMAP

httplib(Pythonの3以降のHTTPクライアント)

nntplib

telnetlib(開発と必要な対話型のコマンド・ライン・セッションの後のサービスに適用されます)

xmlrpclib(Pythonの3以降のXMLRPCクライアント)

4.バイナリコーディング操作または

サービスまたはファイルと対話するためのスクリプトを開発する場合、あなたは多くの場合、あなたは別のフォーマットやエンコーディングにデータを変換する必要があることがわかります。Python2.xバージョンでは、符号化または復号化方法は、一般に異なった文字列形式の間で変換するために使用されます。

"Hello World"の.encode( "進")
"AAA ="。( "BASE64")をデコード

残念ながら、このショートカットは、Python3.xバージョンでエンコードを取り消し、現在の方法は、唯一のそのようなように、UTF-8、CP1250、ISO8859、BIG5ととして文字エンコーディングを実現することができる復号化されました。

別の方法として、あなただけ進コードの二つの方法のバイトタイプを使用することができます。

bytes.fromhex( '414 141')
Py3.5からb'AAA'.hex()#開始

Base64エンコーディングのために、あなたは(もPython2.xバージョンで)追加の​​モジュールを使用する必要があります。

輸入base64で
base64.b64encode(b'Hello世界')
輸入コーデック
codecs.encode(b'Hello世界'、 'base64'の)
輸入binascii
binascii.b2a_base64(b'Hello世界)

URLはurllib.parseためのモジュールをコードするか、解析することができる(Python2.xバージョンはurllibはです)

urllib.parse輸入quote_plusから、unquote_plus 
quote_plus( 'Hello Worldの+ 1 = 1337')#こんにちは+世界%2B1%3D1337
unquote_plus( 'こんにちは+世界')#のHello World

Pythonの共通データタイプ(例えば、整数、浮動小数点、文字列)とバイナリの間の一般的な変換、stuctモジュールに実装されてもよいです。

インポート構造体
struct.pack( '<I'、1337)#そのリトルエンディアン、32ビット表現に整数1337を変換
struct.unpack( '<I'、B '')[0]の結果の#リターンタプル- > GET最初の結果
struct.unpack( '<I4s'、b'Test ')#リターン(16、b'Test')

Python3.2また、そのバイナリ表現にint型の直接アクセスを使用することができます。

= 1337 
a.to_bytes(4、 '少し')#32ビットリトルエンディアン
a.to_bytes(2、 '大きい')#16ビットのビッグエンディアン
int.from_bytes( 'B'、'少し)#16

あなたは(私たちは通常、)、あなたは、C ctypes.Structure構造化記述言語を使用することができますCアプリケーションからかのように、彼らのバイナリ表現を取得するインタプリタとしてCPythonのだろう場合は、特別なバーの機能のctypesのモジュールもあり、ダンプのように。

ctypesからインポート* 
IOインポート
クラスTestStructure(構造):
_fields_ =(( 'foo'で、c_intの)、( 'バー'、c_char))
T =試験()
t.foo = 1337
t.bar = B'A」
B = io.BytesIO()
b.write(T)
b.seek(0)
印刷(b.getvalue())#9Aは
T2 =テスト()
B = io.BytesIO(B'B ')
b.readinto(T2)
プリント(t2.foo)#16
プリント(t2.bar)#Bを

ctypesのモジュールは、通常、ライブラリは任意のPythonラッパーを記述する必要はありませんPythonのアセンブリ言語とCの間のブリッジです。ctypesのモジュールを使用すると、任意のC言語ライブラリとその出力機能を使用することができます。

ctypesのインポートから* 
libcの= ctypes.CDLL( 'libc.so.6と')
libc.printf(b'Hello世界
「)

上述した構造タイプは、対話型C言語ライブラリの主に使用され、または通話中に構造の伝達関数を得ます。

5.脆弱性開発ツール

CTFの独自のソリューションフレームワークを提供するために多くのCTFの組織では、IはGallopsledからpwntoolsフレームワークは特に有用であることが見出さ、遠隔ELFバイナリを開発する際に、特に、そのような(サイクリックモードによる)変位演算のような多くの便利な機能が含まれ、文字書式開発列(通常フィードデータとフォーマットされた文字列を生成する)、ジャンプの組み合わせ(ELFベースの解析は、単純なバイナリを生成し、通話ジャンプラッパー組み合わせを提供ropgadget)、及び異なるAPIの全ての送信チャネル(パイプとも呼ばれます)。これらは、読者がバックエンドコンパイラGDBを開発することができますが、単純に1行のコードは、ターゲット・サービスに転送することができます変更します。

PWN *インポート
R&LT gdb.debug =(」./レベル3' )
#= R&リモートLT(IP、PORT)遠隔対話型インターフェース、最初のコメントにするために#
( ':')r.recvuntil
r.sendlineは(エクスプロイト)
r.interactive()#は、対話型セッションを開きます

おすすめ

転載: www.cnblogs.com/qingdeng123/p/11311889.html