get_started_3dsctf_2016

额,鸽了好久,因为这几天在将之前学的来做题总结和应用一下,发现学了和没学差不多,很难受就。
BUUCTF get_started_3dsctf_2016
1.直接进入from pwn import *,然后elf = ELF(“get_started_3dsctf_2016”),直接显示是32位的,且打开了NX,表示代码数据段的执行和写入权限不能同时开启。
2.拖入IDA pro,妈呀,好简单的源码,直接gets(v4),有栈溢出的漏洞啊这是。发现v4到ebp的距离为0x38.又在ida左侧的函数名中发现了get_flag函数.
到这里我其实就被卡住了,看了网上的wp,又自己研究了好久。下面我来写下自己的理解。
3.用mprotect来改变一个地址(我们暂时称这个地址位start)的权限,让其变成可读可写可执行,然后利用read函数的读取功能,再将ip返回到start这个地址就的目的是执行这段shellcode来获取shell,然后再构建一个payload2 就是自动生成一个shellcode,就可以拿到shell了。
4.因为mprotect和read都需要参数,我们利用完参数之后,需要将他们pop出来,所以需要用pop pop pop ret来使程序的执行进行下去,第一个ret是将ip置为read函数的地址,而第二个ret是将程序执行流转到start这个地址处,这样才能向其中传入shellcode啊。
5.栈中的情况请看图,画的很乱,请见谅,我会尽量换一个做图软件的。
在这里插入图片描述

右侧的read_addr是我一开始忘记画上去了(呜呜),后来又补上了。嘿嘿

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值