- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
实验4:代码注入攻击
Attack
实验目的
?进一步理解软件脆弱性和代码注入攻击。
实验内容
实验内容包括以下三个任务:详细内容请参考实验指导书:实验4.pdf
No.
任务内容
1
任务一:在这次任务中,你不需要注入任何代码,只需要利用缓冲区溢出漏洞,实现程序控制流的重定向。
2
任务二:在这次任务中,你需要注入少量代码,利用缓冲区溢出漏洞,实现程序控制流的重定向至touch2函数,并进入touch2函数的validate分支。
3
任务三:在这次任务中,你需要注入少量代码,利用缓冲区溢出漏洞,实现程序控制流的重定向至touch3函数,并进入touch3函数的validate分支。
实验要求
在Unbuntu18.04LTS操作系统下,按照实验指导说明书,使用gdb和objdump和代码注入辅助工具,以反向工程方式完成代码攻击实验。
任务一和任务二是必做任务;任务三为选做,有加分。
2)需提交:电子版实验报告全文。
实验结果
首先使用objdump-dctargetctarget.s命令得到ctarget程序的汇编程序。
任务一
unsignedgetbuf()
{
charbuf[BUFFER_SIZE];
Gets(buf);
return1;
}
图1任务一正常输入与超缓存输入
图2getbuf()汇编代码
根据提示得知,getbuf()存在缓冲区溢出,在ctarget.s中全文搜索getbuf找到相关汇编程序,由
4017a8: 4883ec28 sub$0x28,%rsp
发现栈指针只预留了40个字节的空间,所以只要输入超过40个字节便发生缓存区溢出。
代码中函数执行地址均为3字节,可知(%rsp–0x27,%rsp–0x29)处储存getbuf()函数返回地址,则输入的前40个字节可以被正常保存在buf[40]中,所以我们需要通过第41、42、43字节破坏函数返回地址。
图3touch1()汇编代码
voidtouch1()
{
vlevel=1;/*Partofvalidationprotocol*/
printf(Touch1!:Youcalledtouch1()\n);
validate(1);
exit(0);}
通过查看touch1开始地址为0x4017c0,确定要将getbuf()返回地址改为该地址,又因为小段序存储,高地址存储高字节,所以读入顺序应为为c0、17、40,即在任意40个不为0xa的字节后在加入c01740即可完成要求。
图4任务一完成
hex_1.txt中输入01020304050607080917111213141516171819202122232425262728293031323334353637383901c01740。
通过./hex2rawhex_1.txt|./ctarget-q运行通过
任务二
首先同任务一,将touch2起始地址传入栈溢出部分进行跳转
图5touch2()汇编代码
将ec1740按序输入40个字节后,便实现返回0x4017ec
图6进入touch2()
进入后,我们查看touch2()函数运行逻辑
voidtouch2(unsignedval)
{
vlevel=2;/*Partofvalidationprotocol*/
if(val==cookie){
printf(Touch2!:Youcalledtouch2(0x%.8x)\n,val);
validate(2);
}else{
printf(Misfire:Youcalledtouch2(0x%.8x)\n,val);
fail(2);
}
exit(0);
}
需要使val==cookie(0x59b997fa)从而进入validate(2),下面通过代码注入实现,将代码存入栈指针存放的地址处,再使getbuf()返回到%rsp处,从而执行注入的代码。
使用gdb工具inforegisters发现在(b*0x4017b4)
4017b4: b801000000 mov$0x1,%eax处时
rsp存放地址为0x5561dc78
图7任务二代码注入
将touch2()开始地址压入栈顶
将0x59b997fa赋值给%rd
您可能关注的文档
最近下载
- 软件资格考试软件评测师(基础知识、应用技术)合卷(中级)试题及答案指导(2025年).pdf VIP
- 如何进行水运工程竣工决算编制.pdf
- wps入门培训课件.docx VIP
- 2025--江苏省录用公务员考试申论A类真题卷及答案 .pdf VIP
- 小学生飞机科普PPT课件.pptx VIP
- 维修工安全教育培训.pptx
- ISO 4628-1-2016中文+英文,色漆和清漆—涂层老化的评价缺陷的数量和大小以及外观均匀变化程度的标识—第 1 部分.pdf
- 便血病的中医护理.pptx
- ISO 4628-2-2016中文+英文,色漆和清漆—涂层老化的评价缺陷的数量和大小以及外观均匀变化程度的标识—第 2 部分 起泡等级的评定.pdf
- 增值税加计抵减政策培训课件.pdf VIP
文档评论(0)