:より転載https://www.jianshu.com/p/7a06b0bda2d8
GDBのコミッショニングと使用
これは私が今までのgdbデバッグのガイドラインを見た中で最も詳細なの要約であるべきであり、ブロガーが非常に強い人で、彼のブログに孟は、より親しみやすい新しい、私はいつも彼らは自分の強力な完璧な学んだことができると思います誰が最強表明
1.デバッグキーボードショートカット
ヒントを与えるだろう(そうでない場合、コマンドは、パラメータを指定せずに基本的であることができる)の直接入力コマンドとPEDA機能。ここでは紹介しません
1.1ベースのデバッグのショートカット
- ■ステップ、SIへ
- NへのNI次の命令
- Bのブレークポイントはどこか、使用することができます
- b *表adrress
- bはFUNCTION_NAME
- ブレークポイント情報Bの表示情報
- 1削除する最初のブレークポイントを削除
- c続行
- Rの実行
- disas addrの前とaddrに逆アセンブルコードを表示した後、また、関数名であり
1.2表示データ
- Pシリーズ
- Pシステム/メインディスプレイアドレスは、関数であります
- P $のESP表示レジスタ
- P / XP / AP / BP / sの...
- P 0xffの - 0xea電卓
- プリント&VARNAMEは変数のアドレスを表示します
- P *は0xffffebacは、アドレスの値を表示します
- Pシステム/メインディスプレイアドレスは、関数であります
- Xシリーズ
- X / XW ADDR進シンボルテーブルがロードされている場合、開始時のアドレスの内容を表示するシンボルテーブル
- X / X $ ESP ESPレジスタ値を参照してください。
- addrのX / sのaddrのビュー列
- X / Bのaddr addrに文字を見ます
- addrのX / I addrの分解ビューの結果
- シリーズ情報
- (赤外線EBPと略す)の内容を表示するには、情報レジスタ$ EBPのEBPレジスタ
- ステータスレジスタのIR EFLAGSをチェック
- IR SSビューのセグメントレジスタ
- IBブレークポイントの情報を見ます
- 私のすべての機能を表示する機能
- disas ADDR ADDR逆アセンブルコードの前面および背面図で
- スタック内の表示20値スタック20
- 引数パラメータビューを表示
- 状況PEDAでマップを表示vmmap
- エルフファイルと、各セグメントのreadelfが表示PEDA開始アドレス
- PEDAとparseheapショーヒープのステータス
1.3データの検索
- PEDAで検索文字列を検索します
- PEDAとsearchmem検索文字列
- ropsearch "のXOR EAX、EAX; RET" のROP PEDAの一定期間に0x08048080 0x08050000を見て
- 結果PEDAとRET可能| ropgadgetよりポップを提供
1.4データを変更
- $ ESP = 0x110修正レジスタの値を設定します
- セット* 0xf7ff3234 = 0x08042334修正値メモリ
- セット引数「asdasg」「afdasgasg」「agasdsaは」パラメータ1,2,3に割り当てられています
- SET「ARGS
python -c 'print "1234\x7f\xde"'
」Pythonスクリプトを使用してこのパラメータを少し書き換えるには、いくつかの文字は避けるように正しく設定することができません - R "ARG1" "arg2に" "ARG3" 設定パラメータ
- ラン
$(perl -e 'print "A"x20')
1.5 PEDAプラグ
Enhance the display of gdb: colorize and display disassembly codes, registers, memory information during debugging.
Add commands to support debugging and exploit development (for a full list of commands use peda help):
aslr -- Show/set ASLR setting of GDB
checksec -- Check for various security options of binary
dumpargs -- Display arguments passed to a function when stopped at a call instruction
dumprop -- Dump all ROP gadgets in specific memory range
elfheader -- Get headers information from debugged ELF file
elfsymbol -- Get non-debugging symbol information from an ELF file
lookup -- Search for all addresses/references to addresses which belong to a memory range
patch -- Patch memory start at an address with string/hexstring/int
pattern -- Generate, search, or write a cyclic pattern to memory
procinfo -- Display various info from /proc/pid/
pshow -- Show various PEDA options and other settings
pset -- Set various PEDA options and other settings
readelf -- Get headers information from an ELF file
ropgadget -- Get common ROP gadgets of binary or library
ropsearch -- Search for ROP gadgets in memory
searchmem|find -- Search for a pattern in memory; support regex search
shellcode -- Generate or download common shellcodes.
skeleton -- Generate python exploit code template
vmmap -- Get virtual mapping address ranges of section(s) in debugged process
xormem -- XOR a memory region with a key
Installation
vmmap:メモリマップの現在のプログラムブロック表示
dumpropを:
PLTを見つけます、plt_2を得ました
- PLTのpwntoolsは、ELF(エルフ).symbols(FUNCTION_NAME)に直接使用することができます
- pwntoolsは、ELF(エルフ).gotを(FUNCTION_NAME)で直接使用することができました
- plt_2のpwntoolsは、ELF(LIB).symbols(FUNCTION_NAME)で直接使用することができます
3.プログラムのダイナミックリンクライブラリを探します
- ファイルpwn3
- pwn3:ELF 32ビットLSB実行、インテル80386、バージョン1(SYSV)、動的にリンクされ、インタプリタ/lib/ld-linux.so.2が使用は、GNU / Linuxの2.6.24ため、BuildIDは[SHA1] = 916959406d0c545f6971223c8e06bff1ed9ae74d、剥離しません
- checksec pwn3
- [*] '/ルート/デスクトップ/ Pwnable / FMT /ノーマル/ fmt_string_write_got / pwn3'
アーチ:i386-32-少し
RELRO:部分RELRO
スタック:いいえカナリアが見つかりません
NXを:NXが有効になっ
PIEを:いいえPIE(0x8048000)
- [*] '/ルート/デスクトップ/ Pwnable / FMT /ノーマル/ fmt_string_write_got / pwn3'
- LDDのpwn3
- Linuxベースgate.so.1(0xf77ad000)
libc.so.6と=> /lib32/libc.so.6(0xf75d2000)
場合には/lib/ld-linux.so.2が使用(0x56601000)
- Linuxベースgate.so.1(0xf77ad000)
4. 32の実行ファイルをコンパイルします。
gccの-m32 test.cの-oテスト
- 一般に、この場合、32ビット宛先ファイルに、デバッグ情報を生成することができません
gccの-m32 -g test.cの-oテスト
目標は、32ビットファイルを生成することで、デバッグを生成するために、オペレーティング・システム「ネイティブフォーマット(ネイティブフォーマット)」を利用してもよいです
情報。GDBはこの情報を直接使用することができ、他のデバッガはまた、このデバッグ情報を使用することができます
他の保護状態を開き、を参照してください一般的な保護メカニズムのLinuxのプログラム
PIEオンデバッグした後5.
私たちは地元のASLRをシャットダウンする必要があるように、オープンPIE後、対処するには、gdbデバッガを助長されていませんこれは、変更されています
一般的に使用される方法は次のとおりです:0>は、/ proc / sys / kernel / randomize_va_spaceエコー
オープン方法:2>は、/ proc / sys / kernel / randomize_va_spaceエコー
6.ランタイム実行ファイルの表示
あなただけの相対アドレスを見つけるために、実行していない場合、質問を行いますが、実際の実行ブレークポイント必要なアドレス。あなたはPIEをオフにした場合、それぞれが同じの実装、実行開始アドレスを見つける必要がある上、この時間に対処します。PEDA共通命令はvmmap持って、あなたは実際のアドレスを見つけることができます。
この質問は非常に厄介であるあなたは、GDBを実行しない場合、その後のサイクルに陥る最後に、最終的にはvmmapエラー強制場合、vmmapを使用することができない、ということです。この時間は、他のいくつかの方法があります。
- 実行は&、今回は背景にプログラムをPWNます./pwn、あなたはすぐにこのプログラムのPID、猫は/ procの/ PWN PID /マップ、実行に対応するアドレスを見つけることができるようになり、この時間を知ることができます。キルPID後-9 PWN
- 小さなスクリプト、任意の場所にブレークポイントを書いて、gdbデバッガを開き、ブレークポイントは、この時間は崩壊しますが、GDB-PEDAはまだ対応するアドレスを見つけることができますvmmap使用しました